2014-11-13 2 views
1

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

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

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

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

ответ

2

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

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

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

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

Смежные вопросы