Индексировать всю БД в один документ с помощью Lucene

Я работаю над улучшением производительности существующего приложения ASP.Net и уменьшением количества обращений к базе данных для каждого критерия поиска. Нажмите на страницу. В процессе я пытаюсь реализовать Lucene.Net .

но странно то, что я пытаюсь индексировать, используя оператор "select *" для таблицы, имеющей миллионы записей, зависает на самом уровне БД.

Тогда как можно получить все результаты "select *" в одном документе с меньшим временем без зависания приложения, оттуда я могу применить поисковые фильтры к документу, который не будет отображаться в сетке.

заранее спасибо

1 ответ

При индексации миллионов записей в Lucene.NET вам нужно будет разбить процесс. То, что вы пытаетесь сделать, - это прочитать все данные заранее, поместить их в память, затем заставить Lucene.NET взять все эти прочитанные данные и затем создать массивный индекс. Это просто развалится с большими наборами данных. Вам нужно разбить процесс на "буферизованную" архитектуру.

То, что я делал в прошлом, это то, что вы могли бы сделать, например:

  • разбить оператор выбора на хранимую процедуру, которая возвращает миллионы записей. Например, если бы у меня было 100 миллионов записей, оно вернулось бы: 25 миллионов четыре раза
  • Я также использовал четыре разных потока для чтения данных. Затем вы запускаете асинхронную очередь, которая, как только данные считываются из базы данных, попадает в буфер очереди. Читайте о BlockingQueues в.NET
  • Затем у вас есть другая серия потоков, считывающих данные из очереди, а затем они направляют их в процесс построения индекса Lucene.
  • последний шаг состоит в том, чтобы построить индексы (из предыдущего шага) параллельно и использовать опцию слияния Lucene.NET, чтобы объединить все данные в один большой индекс

Я нашел эту архитектуру выше масштабируемой, поскольку вы можете запускать столько потоков (чтение и сборка), сколько у вас ядер. Он также масштабируется в облаке, поскольку вы можете использовать рабочие роли и очереди Azure, чтобы масштабировать их на множество компьютеров, если у вас очень большой индекс.

Другие вопросы по тегам