3个月前 eaglet :
很有意思的问题,我理解是不是可以这样。首先lucene的索引机制是不允许IndexWriter和IndexReader同时执行的。如果我们控制让每次操作都必须Close后再执行下一个操作,那势必又会影响效率。
那么我的想法是这样,因为所有的添加和更新都使用IndexWriter,这是可以同时执行的,而所有的删除又都使用IndexReader,这些操作也可以同时执行,这就好办了。我们参考操作系统进程调度的原理,把一个长的时间划分问若干时间片,并把这两类请求分成两个队列分别调度,同一时间片内只允许执行一类请求,时间片结束时,按照自己制定的调度规则进行切换,比如如果是轮转方式,那么时间片结束后如果前面是执行IndexWriter的,则检查IndexReader中有没有请求,如果有,Close掉IndexWriter,然后执行Indexreader队列中的所有请求知道时间片用完,同样方式再进行切换。也可以按队列长度作为调度规则,长度大的优先调度,或者自定义优先级。等我有空,我做个例子实验一下效果如何。我认为通过这种方式也许可以解决你说的大量并发问题。
1楼
|