Колись мені здавалось, що база данних MySQL потрібна виключно для того, щоб можна було встановити Joomla (WordPress я тоді не встанавлював) і вже саме CMS буде з нею працювати – зберігати там товари чи публікації. Але через деякий час, коли я вже почав працювати програмою ZennoPoster прийшло розуміння що без бази даних працювати важко.
Є наприклад задача скачати всі товари з інтернет магазину, зберегти картинки, відсортувати по артикулу, після чого віддати замовнику в якомусь визначеному ним форматі. І в цей момент можна звичайно використовувати текстові файли чи таблички Excel. Так раніше колись я і робив. Але що робити коли товарів дуже багато? А що якщо із-за цього їх потрібно скачувати в багато потоків одночасно? А що коли потрібно запустити цю роботу на декількох серверах так, щоб всі сервера скачували різні дані з різних посиланнь?
Звичайно це можна вирішити – просто завантажити всі посилання на товари в один текстовий файл. Потім розрізати його на декілька частин і кожному серверу дати в обробку інший файл. Проте, це робота, яку потрібно завжди тримати “на контролі”, слідкувати що відбулось, чи все скачалось чи ні.
Тому я подібні задачі зараз вирішую іншим шляхом – просто створюю нову базу даних в MySQL. Створюю там необхідні таблиці для збереження даних. Створюю там табличку з чергою обробки. Після чого можу запускати навіть в декілька потоків на декількох серверах. Кожний потік бере наприклад посилання в роботу, змінює йому статус з 0 на 1 і виконує роботу, після завершення – змінює статус з 1 на 2 якщо дані було одержано успішно, або з 1 на 3 якщо виникла якась помилка. Після чого через якийсь час всі посилання переходять в статус 2 чи 3. Якщо є якісь посилання з статусом 3, але немає з статусом 0, тоді всім з статусом 3 змінюю статус на 0 і продовжую роботу. Рано чи пізно всі посилання будуть оброблені, а мені не потрібно буде тратити час на те, щоб моніторити цей процес роботи – за цей час я можу просто займатись будь чим іншим.
Хлопці розказують що важко вивчити роботу з MySQL, і саме тому вони залишаються працювати з списками і таблицями. Проте думаю що якщо б вони подивились декілька відео на ютубчику про CRUD на PHP, то однозначно змогли би розібратись, після чого деякі завдання вирішувати було б набагато швидше і простіше.
Крім MySQL іноді приходиться працювати також з SQLite. В основному мені приходилось в той час, коли на компьютері локально було декілька великих баз з даними, з яких потрібно було генерувати html сторінки. Тоді виявилось, що якщо працювати з MySQL, то багацько часу тратиться саме на одержання даних з бази (так як вона була тоді на інших серверах), і коли працювати з базою SQLite локально, то швидкість генерації сторінок збільшувалась в декілька разів.
Хоча, вже зараз розумію, що якщо б мені поставили задачу що доступ до тих баз потрібно одержувати з декількох серверів одночасно – скоріш за все я вибрав би роботу саме з MySQL, так як SQLite на мою думку не дуже добре себе поводить коли до неї звертаються одночасно з багатьох потоків.
Власне що я хотів сказати – вивчайте хлопці роботу з MySQL, однозначно знайдете куди примінити свої знання!