[hibernate-dev] Hibernate Search and massive indexing

Emmanuel Bernard emmanuel at hibernate.org
Thu May 7 11:19:36 EDT 2009


I have synced with Sanne on his work on massive reindexing and here is  
the outcome of the discussion.

1. An exclusive batch mode is a mode where a node has exclusive access  
to the index and can optimize writings (not flushing, not committing  
at specific times etc).

2. The node able to activate the exclusive batch has to be the master  
in a cluster (ie not the slaves).

3. The master will have two modes, a transactional mode (as today, ie  
commit at tx boundaries - potentially asyned) and an exclusive batch  
mode called the adaptative mode.
In this mode the BackendQueryProcessor can take some freedom in when  
and how it flushes changes to the Lucene index and when and how it  
commits.
One approach would be to be transactional (ie one queue of changes =  
one commit) for low thresholds and batch exclusive for higher  
threshold (apply several queues of changes before flushing or committing
this back end would somehow communicate with the master copy process  
to only copy changes at the right time. (I think it should work well  
already but needs to be verified).
A slave / client could force a commit by sending a Commit LuceneWork  
if needed.

4. There should be a way to switch at runtime from the tx mode to the  
adaptative mode. When switching, the tx queue is forked, new elements  
are queued, old elements are processed.
When the old queue is emptied, the adaptative mode kicks in.

5. On top of that, the massive indexer API, reads data from the  
database as fast as possible and push index works to the adaptative  
engine. This API will be mono server but multi thread for now. Sanne  
can describe that more in details.
This api woudl have a start and waitTillDone() API that starts the  
adaptative engine and stops it.

That's it for the first step.

Second steps (no particular order)
6. Make the massive indexer API work in a cluster.
Slaves would read the DB and push index works to the queue

7. find a way to apply analyzing before the actual IndexWriter usage
That would allow to increase the index parallelism by allowing some  
pipelining.
Or even better to analyze on the slaves and free cpu time for the  
master (would work nice with 6)

Sanne please add anything I have missed, misinterpreted.



More information about the hibernate-dev mailing list