У меня есть база данных MySQL, которая содержит более 100 таблиц. Эта база данных используется CMS, и каждые 6 часов PHP-скрипт использует все эти таблицы с большим количеством логики, вычислений и SQL-соединений, генерирует большой набор данных с более чем 1 миллионом строк и вставляет его в таблицу, которую мы называем «сделками». ». По сути, это таблица с 50 столбцами и множеством оптимизированных индексов, и в каждой строке содержится одно и то же:
dealid, цена, наименование товара, цвет товара, размеры товара, товар, марка и т. д.
Эта таблица «сделок» затем используется многими другими приложениями для внешнего и внутреннего интерфейса для любых целей. Примеры: страница, на которой клиент может отфильтровать, а затем просмотреть результаты. Страница, на которой клиент может найти информацию о сделке. Фид XML, используемый филиалами, который содержит все продукты бренда X (+/- 150 000 строк из таблицы 1 000 000 строк). Приложение для iOS, которое используется, чтобы показать вам, какие аксессуары доступны для вашего iPhone. Все эти приложения используют одну и ту же таблицу MySQL на 1 000 000 строк, чтобы легко находить и отображать данные.
Эти приложения испытывают проблемы со скоростью по мере роста таблицы «сделок». У MySQL, похоже, много проблем с обработкой таких чисел. Я не ожидал бы, что это будет так, но, возможно, проблема заключается в том, чтобы иметь только один сервер MySQL с 32 ГБ ОЗУ и 8 ядрами. Это не вариант обновления до пары серверов с 128 ГБ ОЗУ, и я также не уверен, что это действительно решит проблему.
Я сделал небольшой PHP-скрипт, который, помимо вставки 1 000 000 строк в MySQL, также индексирует их вasticsearch. Затем я протестировал и таблицу MySQL, и индекс ES в простом приложении фильтрации песочницы. Скорость приложения на базе ES была поразительной по сравнению с приложением на основе MySQL. Так что похоже на скорость, ES выигрывает.
Итак … это правильное использование экземпляра ES? Или я ошибочно полагаю, что ES будет лучшим решением для моей проблемы со скоростью MySQL?
Да, звучит так, как будто ES подойдет для ваших требований!
ES очень масштабируем, очень быстр — 1 миллион строк должен быть легким.
Вам нужно будет следить за использованием памяти, безопасностью, транзакционностью.
Но пока вы сохраняете базу данных MySQL в качестве основного источника данных, все будет хорошо.
Других решений пока нет …