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

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

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示:我们从文本提取的逻辑中走出来,回到主体流程,深入浅出 jackrabbit 八 索引合并(上), 在前面的文章中,我们可以看到一次索引创建的操作,这里有一个非常奇怪的设计,就是在初始化的时候将 PersistentIndex 按照 docnums 的范围分组了,可能会产生多个 persistentindex 对象,而这

我们从文本提取的逻辑中走出来,回到主体流程。

在前面的文章中,我们可以看到一次索引创建的操作,可能会产生多个 persistentindex 对象,而这些对象其实代表着一个索引目录。随着创建索引的次数越来越多,那么索引目录也在增多,但是索引目录中的数据却不是很多,所以我们需要把多个目录合并,其实也就是索引的合并。

执行这个操作的类是 IndexMerger ,看其定义为:

Java代码   

class IndexMerger extends Thread implements IndexListener 
 
/*由此可见它是一个线程,并且同时充当着listener的角色,看看它的构造方法: 
*/ 
IndexMerger(MultiIndex multiIndex) { 
 
    this.multiIndex = multiIndex; 
    setName("IndexMerger"); 
    setDaemon(true); 
    try { 
      mergerIdle.acquire(); 
 
    } catch (InterruptedException e) { 
      // will never happen, lock is free upon construction 
      throw new InternalError("Unable to acquire mutex after construction"); 
    } 
}

还是一个 deamon 线程。而且一构造就来了一个 mergerIdle.acquire(); 真是迫不及待啊。啥意思啊?得到一把锁,一把非阻塞的锁。

在创建完 IndexMerger ,那么就有可能把 PersistentIndex 加进来了,因为 Merger 类必须知道哪些 PersistentIndex 是需要 Merger 的,那么我们看看负责这段逻辑的代码:这段代码主要负责 3 个功能,一个是初始化 indexBuckets ,这个一个 ArrayList ,其中放的是需要 Merger 的 PersistentIndex 的列表,也就是我们可以认为 indexBucket 里放的还是 list ,这里有一个非常奇怪的设计,就是在初始化的时候将 PersistentIndex 按照 docnums 的范围分组了,一组就是一个 indexBucket 。

1 2 3 4 5 6  下一页

Tags:深入浅出 jackrabbit 索引

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