WEB开发网
开发学院软件开发Java 深入浅出 jackrabbit 四 索引提交(上) 阅读

深入浅出 jackrabbit 四 索引提交(上)

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: 在看过方法中的注释,大家应该都明白了,深入浅出 jackrabbit 四 索引提交(上)(7),在AddNode方法中执行的操作其实就是在内存中生成index数据的操作,而且这个操作是并发执行的,到这里理论上来讲内存中的数据现在就需要被刷到磁盘上,ahuaxuan之前也是这么想滴,那么我们内存中

在看过方法中的注释,大家应该都明白了,在AddNode方法中执行的操作其实就是在内存中生成index数据的操作。而且这个操作是并发执行的。

那么我们内存中的index数据就不需要写到磁盘上了吗,可能吗,要回答这个问题我们回到MultiIndex#update方法:

Java代码  

executeAndLog(new AddNode(transactionId, doc)); 
          // commit volatile index if needed 
          flush |= checkVolatileCommit(); 

我们看到这里有一个checkVolatileCommit,就它了,从名字上看,它Y滴就是想把内存中的数据刷到磁盘上,进去看看呗:

Java代码  

private boolean checkVolatileCommit() throws IOException { 
    if (volatileIndex.getNumDocuments() >= handler.getMinMergeDocs()) { 
      commitVolatileIndex(); 
      return true; 
    } 
    return false; 
}

果然,volatileIndex.getNumDocuments()会返回它处理的document的数量,而 handler.getMinMergeDocs()的默认值是100,也就是说当内存中的index数据对应的document超过100的话,就需要做commitVolatileIndex操作,而且返回true,否则就是返回false,这个true或false非常重要,因为它决定着下面的 flush操作是否需要操作,而flush就是我们后面要提到的第3个大问题,如果你已经忘记有flush这回事,请看看文章开头提到的3个大问题。那么,到这里理论上来讲内存中的数据现在就需要被刷到磁盘上,ahuaxuan之前也是这么想滴,但是jackrabbit往往出乎人的意料,那么我们一起进去看看(请注意ahuaxuan的注释):

上一页  2 3 4 5 6 7 8 9  下一页

Tags:深入浅出 jackrabbit 索引

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