Я пишу много документов, используя IndexWriter в Lucene .Net. Поскольку есть затраты на добавление документов, мне интересно, есть ли оптимальное количество документов для добавления до их совершения. Очевидно, слишком много, и если есть крах, вы рискуете потерять все в памяти, слишком часто, как после каждого документа добавляется пропускная способность дроссельной заслонки.Lucene .NET frequency of IndexWriter commit
ответ
Не похоже, что вы достигли высокой производительности, пока не достигнете очень большого количества.
Total time to commit [10] messages was [00:00:00.1093779]
Total time to commit [20] messages was [00:00:00.0156221]
Total time to commit [40] messages was [00:00:00]
Total time to commit [80] messages was [00:00:00.0312509]
Total time to commit [160] messages was [00:00:00.0156231]
Total time to commit [320] messages was [00:00:00.0156273]
Total time to commit [640] messages was [00:00:00.0312489]
Total time to commit [1280] messages was [00:00:00.0312509]
Total time to commit [2560] messages was [00:00:00.0500343]
Это нехороший ответ на этот вопрос, казалось бы, простой. Кроме «это зависит» ...
Это зависит от многих вещей, таких как:
- Насколько велик каждый документ? Если они большие (много полей, большие поля), то число будет довольно небольшим, если произойдет сброс
- Что такое прецедент? Вы вкладываете в объем? Если да, то высокое значение «лучше», меньше IO = более высокая пропускная способность. Вам требуется, чтобы документ был зафиксирован/сохранен/долговременен. Затем вы должны зафиксировать каждое добавление/обновление. Много IO, но если частота низкая. Тогда есть бесконечный спектр между ними.
Лучше установить «setRAMBufferSizeMB», а не «setMaxBufferedDocs». Ограничение объема используемой памяти делает инфраструктуру более предсказуемой. По умолчанию lucene сбрасывается по размеру памяти (по умолчанию 16 МБ).
Существует также другой подход. Установите размер буфера на довольно большое число. Но также есть таймер для совершения периодически. Это дает баланс между буферизацией и периодом, в течение которого вы можете «потерять» обновления.
Есть ли приращение «ID», связанное с документом? Если да, убедитесь, что это поле. Затем при запуске вы можете запросить самый последний документ, выполнив запрос с сортировкой по идентификатору (например, «выберите верхний 1 порядок по идентификатору») и перезапустите обновления оттуда.
Если идентификатора нет, то добавьте числовое поле даты и поместите DateTime.UtcNow.Ticks в него. Это станет вашим «курсором обновления».
Другая вещь, которую нужно иметь в виду - поиск латентности. Количество времени между проглатыванием документа и возможностью поиска. Вы можете следовать шаблону NRT и быть почти полностью обновленным. Но есть стоимость. Или вы можете решить, что некоторая латентность приемлема. В этом случае вы можете принять более разумные решения о том, когда обновлять Reader/Searcher.
Больше концептуальной дискуссии. Если вы можете дать более подробную информацию о различных проблемах и параметрах, я могу быть более конкретным.
- 1. Lucene .NET IndexWriter блокировка
- 2. Lucene .Net, мне нужно закрыть IndexWriter
- 3. IndexWriter уточнений Lucene в
- 4. Lucene IndexWriter OutOfMemory исключение
- 5. Многопоточность с lucene IndexWriter
- 6. Lucene - открыть закрытую IndexWriter
- 7. Lucene IndexWriter медленно добавляет документы
- 8. Набор Lucene IndexWriter макс полей
- 9. IndexWriter в Lucene 3.5 медленнее?
- 10. Lucene .NET
- 11. Процесс оптимизации Lucene .Net
- 12. Создайте индекс Solr с помощью Lucene IndexWriter
- 13. Почему Lucene IndexWriter запишет предыдущие документы?
- 14. Что происходит, если я выполняю commit() в IndexWriter, который открывается при предыдущем фиксации в Lucene?
- 15. Lucene .NET Обновить данные
- 16. IndexWriter Constructor
- 17. Lucene: Схожесть (BM25) of Fields
- 18. Auto-COmmit of DDL
- 19. Lucene 4.0 на Linux - ошибка IndexWriter: Нет в наличии
- 20. Как проверить, действительно ли экземпляр Lucene IndexWriter действителен/открыт?
- 21. Lucene net IndexWriter после UpdateDocument удваивает размер индекса даже при оптимизации?
- 22. Обработка Lucene NRTManager
- 23. Правильный способ получить читателей/писателей в Lucene .NET.
- 24. TermFreqVector Lucene .net
- 25. Поиск Lucene .NET
- 26. .net Lucene поиск Multifield
- 27. Поиск в Lucene .Net
- 28. Lucene Обновить индекс документа
- 29. Commit based view of Jenkins builds
- 30. Процесс резервного копирования Lucene 4.3.1