WEB开发网
开发学院软件开发Java 深入浅出 jackrabbit 八 索引合并(上) 阅读

深入浅出 jackrabbit 八 索引合并(上)

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: 这段代码的主要功能是把 indexbucket 里的 persistentindex 信息拿出来,而且量超过 2 的话就把他们加入到一个队列中,深入浅出 jackrabbit 八 索引合并(上)(4),并将它们从该 indexbucket 里删除,通过这个步骤,其实它就是消费者,它主要完成以下几

这段代码的主要功能是把 indexbucket 里的 persistentindex 信息拿出来,而且量超过 2 的话就把他们加入到一个队列中,并将它们从该 indexbucket 里删除。通过这个步骤,那么 mergeTasks 队列中就存在一些需要合并的 index 了。

中场总结:

通过上面的方法和前面的索引提交的文章我们得到一些重要信息:当用户把 ramdirectory 中超过 100 的 docs 的 index data 刷到 fsdirectory 中时,新建一个目录,作为这个新 fsdirectory 的目录,接着把这个 fsdirectory 对应的 PersistentIndex 加到 IndexMerger 类的某个 IndexBucket 中,接着当某个 IndexBucket 中的 PersistentIndex 数量(即这些目录的数量)超过 10 ( mergefactor )的时候,就会执行合并的操作。

那么下面的问题是,合并之后,这 10 个目录将会何去何从,它们是把另外 9 个合并到其中一个中去呢还是怎么滴?接着看吧。

显然,这里又用到生产消费模型,任何调用 indexAdded 方法的都属性生产者,生产者根据一些条件,有选择的把需要合并的 persistentindex 放到 mergeTasks 的队列中,有了生产者肯定存在消费者,文章开头提过, IndexMerger 类是一个 deamon 线程,看看它的 run 方法,那么就发现,其实它就是消费者。它主要完成以下几个功能:

1 判断消费者是否空闲

2 判断队列中是否有退出命令

3 如果空闲则进入 wait 状态

4 根据 persistentindex 的名字取到所有的 persistentindex 的 IndexReader 对象

5 再创建一个新的 PersistentIndex, , 原来的 index 文件合并到这个新的目录中

6 将前面的 IndexReader 对象添加到 PersistentIndex 的 indexwriter 方法中,并执行optimize。

上一页  1 2 3 4 5 6 7  下一页

Tags:深入浅出 jackrabbit 索引

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接