проблемы производительности с Lucene.net
От: sinister  
Дата: 17.06.09 14:57
Оценка:
Добрый вечер коллеги.
Имеется проект, в котором уровень доступа к данным реализован на nHibernate, а для организации поиска — Lucene.net через nHibernate.Search. Данные регулярно обновляются, скажем раз в минуту. При "обновлении" удаляется до 500 индексируемых объектов и добавляется столько же новых. В базе сейчас всего окола 200000 индексируемых объектов, а размер самого индекса lucene-а 62 Mb. Так вот, когда удалять индексируемые объекты не надо (просто добавление новых), то все работает, медленно конечно но работает. Но вот когда приходится удалять, то транзакция коммитится более 5 минут! По логам видно что 100% процентах случаев, когда коммит прерывается таймаутом, люсьен пытается удалить объект из индекса. Причем это происходит с неприятной регулярностью.

Подскажите, в какую сторону тут вообще копать.
lucene.net nhibernate.search performance
Re: проблемы производительности с Lucene.net
От: sinister  
Дата: 18.06.09 16:24
Оценка:
в продолжение, вот что говорит log4net:
2009-06-18 19:37:05,145 [5] DEBUG NHibernate.Search.Backend.Impl.Lucene.LuceneWorker — remove from Lucene index: SampleApp.Organization#48
2009-06-18 19:37:16,739 [5] DEBUG NHibernate.Search.Backend.Impl.Lucene.LuceneWorker — Add to Lucene index: SampleApp.Organization#48: Document<stored/uncompressed,indexed<_hibernate_class:SampleApp.Organization, SampleApp> stored/uncompressed,indexed<ID:48> indexed,tokenized<Name:***>>
2009-06-18 19:37:19,693 [5] DEBUG NHibernate.Search.Backend.Impl.Lucene.LuceneWorker — Add to Lucene index: SampleApp.Order#121795: Document<stored/uncompressed,indexed<_hibernate_class:SampleApp.Order, SampleApp> stored/uncompressed,indexed<ID:121795> indexed,tokenized<Name:***> indexed,tokenized<Descrition:***>>
2009-06-18 19:37:20,927 [5] DEBUG NHibernate.Search.Backend.Impl.Lucene.LuceneWorker — Add to Lucene index: SampleApp.Order#121794: Document<stored/uncompressed,indexed<_hibernate_class:SampleApp.Order, SampleApp> stored/uncompressed,indexed<ID:121794> indexed,tokenized<Name:***> indexed,tokenized<Descrition:***>>
2009-06-18 19:37:20,927 [5] DEBUG NHibernate.Search.Backend.Impl.Lucene.LuceneWorker — Add to Lucene index: SampleApp.Order#121796: Document<stored/uncompressed,indexed<_hibernate_class:SampleApp.Order, SampleApp> stored/uncompressed,indexed<ID:121796> indexed,tokenized<Name:***> indexed,tokenized<Descrition:***>>
2009-06-18 19:37:20,927 [5] DEBUG NHibernate.Search.Backend.Impl.Lucene.LuceneWorker — Add to Lucene index: SampleApp.Order#121798: Document<stored/uncompressed,indexed<_hibernate_class:SampleApp.Order, SampleApp> stored/uncompressed,indexed<ID:121798> indexed,tokenized<Name:***> indexed,tokenized<Descrition:***>>
2009-06-18 19:37:20,927 [5] DEBUG NHibernate.Search.Backend.Impl.Lucene.LuceneWorker — Add to Lucene index: SampleApp.Order#121797: Document<stored/uncompressed,indexed<_hibernate_class:SampleApp.Order, SampleApp> stored/uncompressed,indexed<ID:121797> indexed,tokenized<Name:***> indexed,tokenized<Descrition:***>>
2009-06-18 19:37:20,974 [5] DEBUG NHibernate.Transaction.AdoTransaction — IDbTransaction disposed.
2009-06-18 19:37:20,974 [5] DEBUG NHibernate.Impl.SessionImpl — running ISession.Dispose()
2009-06-18 19:37:20,974 [5] DEBUG NHibernate.Impl.SessionImpl — closing session
2009-06-18 19:37:20,974 [5] DEBUG NHibernate.AdoNet.AbstractBatcher — running BatcherImpl.Dispose(true)

что произошло на самом деле:
1. объект Organization#48 был обновлен (на самом деле индексируемое поле не изменилось)
2. удалено 5 объектов Order
3. добавлено 5 новых объектов Order.

меня смущают 3 момента:
1. удаление из индекса занимает 11 секунд!
2. добавление Organization занимает 3 секунды, в строке Name было 6 слов, длинна строки всего 80 символов
3. где же 5 удаленных Order-ов?
Re: проблемы производительности с Lucene.net
От: sinister  
Дата: 18.06.09 16:58
Оценка:
update: иногда удаление 1го документа занимает более 5 минут
Re: проблемы производительности с Lucene.net
От: hugo Австрия  
Дата: 18.06.09 20:46
Оценка:
Здравствуйте, sinister, Вы писали:

S>... все работает, медленно конечно но работает....

S>Подскажите, в какую сторону тут вообще копать.

Честно скажу, я бы копал в сторону другого движка.
В одном проекте использовал Люсин, производительности добились более-менее нормальной. Требования к скорости обновления — секунду назад Но чего это стоило... По ходу, по краней мере в .НЕТ порте, логика построена на исключениях Так что пришлось основные места просто переписать. Порт активно не поддерживается, качество — уй..ня полная.
Для вашего объема данных пойдет RAMDirectory (или как так его) и SingleInstanceLockFactory. А вообще, пока не поздно — в топку...
Re[2]: проблемы производительности с Lucene.net
От: Vadimmer Франция https://github.com/vadimkantorov
Дата: 03.07.09 17:11
Оценка: 1 (1)
Здравствуйте, hugo, Вы писали:

H>Честно скажу, я бы копал в сторону другого движка.


А какие есть альтернативы?
Новичок в этой теме, буду благодарен за любые ссылки / соображения
Учусь, учусь и ещё раз учусь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.