Количество усилий, которое вы используете для решения этой проблемы, напрямую связано с количеством сохраненных запросов , с которыми вы имеете дело.
Более 20 лет назад мы обработали хранимых запросов , обрабатывая их как минидоки и индексируя их на основе всех , которые должны иметь , а может иметь условия. Список терминов нового документа использовался как своего рода запрос к этой «базе данных запросов», и в нем был составлен список возможно интересных поисков для запуска, а затем только эти поиски запускались для новых документов. Это может показаться запутанным, но когда имеется более чем несколько хранимых запросов (скажем, от 10000 до 1000000 или более), и у вас есть сложный язык запросов, который поддерживает гибрид булевого поиска и поиска на основе подобия, это существенно уменьшило количество запросов, которые мы должны были выполнять как полные запросы, часто не более 10 или 15 запросов.
Одна вещь, которая помогла, заключалась в том, что мы контролировали по горизонтали и по вертикали всего этого. Мы использовали наш синтаксический анализатор запросов для построения дерева разбора, и это использовалось для построения списка обязательных / возможных терминов, по которым мы индексировали запрос. Мы предостерегли клиента от использования определенных типов подстановочных знаков в хранимых запросах , поскольку это может привести к взрыву в количестве выбранных запросов.
Обновление для комментария:
Краткий ответ: я точно не знаю.
Более длинный ответ: Мы имели дело с пользовательским механизмом текстового поиска, и часть его синтаксиса запросов позволяла очень эффективно разрезать коллекцию документов определенным образом, с особым акцентом на date_added
. Мы играли во многие игры, потому что мы принимали 4-10 000 000 новых документов в день и выполняли их для более чем 1 000 000+ хранимых запросов на DEC Alphas с 64 МБ основной памяти. (Это было в конце 80-х / начале 90-х годов.)
Я предполагаю, что фильтрацию по чему-то, эквивалентному date_added
, можно было бы использовать в сочетании с датой последнего запуска ваших запросов или, возможно, самой высокой id
в последний момент выполнения запроса. Если вам нужно повторно выполнить запросы к измененной записи, вы можете использовать ее id
как часть запроса.
Чтобы получить более конкретную информацию, вам нужно получить лот , более конкретно о том, какую именно проблему вы пытаетесь решить, и масштаб решения, которое вы пытаетесь решить.