Я столкнулся с выбором, где хранить некоторые справочные данные (по существу, выпадающие значения) для моего приложения. Эти данные не изменятся (или, если это произойдет, мне нужно перезапустить приложение), и к ним будет часто обращаться как к виджету автозаполнения AJAX (так что один пользователь может заполнить несколько запросов к этим данным, заполнив один поле).
Предположим, что каждая запись выглядит примерно так:
category
effective_date
expiration_date
field_A
field_B
field_C
field_D
Запрос автозаполнения должен будет проверить входную строку по 4 полям в каждой записи и дискретные параметры по категории и датам действия / истечения срока действия, поэтому, если бы это был SQL-запрос, он имел бы предложение where, которое выглядит примерно так:
... WHERE category = ?
AND effective_date < ?
AND expiration_date > ?
AND (colA LIKE ? OR colB LIKE ? OR colC LIKE ?)
Мне кажется, что это может быть довольно неэффективный запрос, но я полагаю, что я недостаточно знаю о том, как базы данных оптимизируют свои индексы и т. Д. Я знаю, что многие действительно умные люди очень усердно работают, чтобы сделать движки баз данных действительно быстро в этом типе вещи.
Альтернатива, которую я вижу, - сохранить ее в памяти моего приложения. Я мог бы получить список этих записей для каждой категории, а затем выполнить итерацию по каждой записи в категории, чтобы посмотреть, удовлетворены ли критерии фильтрации. Это определенно O (n), так как мне нужно изучить каждую запись в категории.
Кто-нибудь сталкивался с подобным выбором? Есть ли у вас какие-либо идеи, чтобы предложить?
РЕДАКТИРОВАТЬ: Спасибо за понимание, ребята. Отправка всего набора данных клиенту на самом деле не вариант, так как набор данных очень большой (несколько МБ).