В БД имеется таблица products содержащая более полутора миллионов записей. Данная таблица заполняется/обновляется через крон скрипты ежедневно из разных источников.
Посредством web UI администратор системы имеет возможность добавлять/удалять fields - колонки этой таблицы и конфигурировать какая колонка из CSV фида (источника данных) соответствует какой колонке в этой таблице. В настоящее время имеется 37 колонок таблицы данных таких как например Vendor Name, VPN, SKU, EANUPC, Dealer Price, Stock, Stock Backlog Quantity, Stock Backlog ETA, Warehouse, Description, Category, OEM Part Number, etc.
Таким образом администратор системы может для CSV-фида из источника http://sourceX/feed.csv установить через конфигуратор:
колонка CSV #1 -> VPN
колонка CSV #2 -> Dealer Price
колонка CSV #12 -> Stock
колонка CSV #13 -> EANUPC
колонка CSV #14 -> Stock Backlog Quantity
...........etc.............
Требуется организовать поиск по таблице products в котором администратор может искать по любой комбинации колонок, например:
- найти все продукты где $5.55 <= Dealer Price <= $7.50 и Stock > 10
- найти все продукты где Description содержит «keyboard» и EANUPC начинается с XXXXXXX
- найти все продукты в которых VPN содержит XXX или SKU содержит XXX
...................etc...............
Поиск осуществляется только персоналом, т.е. нет необходимости беспокоиться о большом количестве параллельных запросов
В настоящее время после запроса можно сходить покурить пока появятся результаты. Используется mongodb, индексы есть но не помогают либо расставлены неправильно. Количество записей ~1.6M.
Прошу посоветовать возможно ли как то оптимизировать скорость работы поиска (с добавлением записей проблем нет) возможно засчёт замедления крон-скриптов импортирующих/добавляющих записи.
Машина довольно мощная:
- восьмиядерный AMD Opteron(TM) Processor 6220
- 32 гигабайта памяти
- диск вроде SSD 120 гигабайт
Прежде всего хотелось бы спросить совета относительно оптимальной БД для таких нужд. Оптимально ли подходит mongodb или стоит копать в другую сторону? Слышал что то про Elastic Search. Время для изучения новых технологий есть. Однако хотелось бы быть уверенным что копаю в правильном направлении.
Также буду благодарен если посоветуете какую то литературу по теме.