浏览:2442008-05-22 09:22   来自雨中漫步的太阳      :
楼主
  3个月前   eaglet      :
很有意思的问题,我理解是不是可以这样。首先lucene的索引机制是不允许IndexWriter和IndexReader同时执行的。如果我们控制让每次操作都必须Close后再执行下一个操作,那势必又会影响效率。
那么我的想法是这样,因为所有的添加和更新都使用IndexWriter,这是可以同时执行的,而所有的删除又都使用IndexReader,这些操作也可以同时执行,这就好办了。我们参考操作系统进程调度的原理,把一个长的时间划分问若干时间片,并把这两类请求分成两个队列分别调度,同一时间片内只允许执行一类请求,时间片结束时,按照自己制定的调度规则进行切换,比如如果是轮转方式,那么时间片结束后如果前面是执行IndexWriter的,则检查IndexReader中有没有请求,如果有,Close掉IndexWriter,然后执行Indexreader队列中的所有请求知道时间片用完,同样方式再进行切换。也可以按队列长度作为调度规则,长度大的优先调度,或者自定义优先级。等我有空,我做个例子实验一下效果如何。我认为通过这种方式也许可以解决你说的大量并发问题。
1楼 回到顶楼 
  3个月前   eaglet      :
我这种方法有个最大缺陷,就是修改添加和删除的顺序被打乱,如果这个顺序对应用来说很重要,那就必须在应用层面上进行一定的组合和排序了。
2楼 回到顶楼 
  2个月前   雨中漫步的太阳      :
目前我们的解决方式就是加锁等待,只有当锁释放后才执行下一个操作. 你说的这个 我考虑下
3楼 回到顶楼 

注册用户登录后才能回复,登录注册
> 返回“搜索引擎”


其他话题

相关链接
1 29044