WEB开发网
开发学院软件开发Java 深入浅出 jackrabbit 十 redolog 和 recovery.doc... 阅读

深入浅出 jackrabbit 十 redolog 和 recovery.docx

 2009-09-17 00:00:00 来源:WEB开发网   
核心提示: 从上面的代码中,我们得到了一个重要的信息,深入浅出 jackrabbit 十 redolog 和 recovery.docx(2),redolog有append和flush的功能,没啥好说的,虽然说加进去,但是这个时候还没有刷到磁盘上,其实就是一个文件操作, 关键的在于什么时候把数据写到磁盘上

从上面的代码中,我们得到了一个重要的信息,redolog有append和flush的功能,没啥好说的,其实就是一个文件操作。

关键的在于什么时候把数据写到磁盘上,这个才是重点。从上面的代码中看到,只有是事务提交Action.TYPE_COMMIT或者添加一个索引目录Action.TYPE_ADD_INDEX的时候才会把redolog中的数据刷到磁盘上。

这里面有两个原因,第一个原因是缓存的问题,由于VolatileIndex的存在,导致很多新的document对应的索引数据其实是放在内存中的,这一点在前面的文章中有详细的描述,那么一旦crash,内存中的数据毫无疑问会消失,索引线程成功的将document的索引数据生成在内存中,该索引线程成功返回,这个时候当机,那么这条索引线程之前所做的操作就白费了,所以就需要在索引线程返回之前,将内存中的对应记录放在文件中。这样即使当机,重启之后依然能否通过redolog恢复之前因为当机而消失的索引数据(如果索引线程在做索引的过程中当机,比如说代码还没有运行到redolog的时候当机,这种case神仙也救不了,认了吧)。

第二个原因是因为indexes文件,在前面的索引合并逻辑中,我们详细的讲过,每次合并都会产生新的目录,那么考虑下面这个场景:

1 VolatileIndex中index数据对应的document超过100个

2创建一个PersistentIndex(同时也创建了一个目录),并将这个新建的目录情况加入到redolog,但是并不将其刷到磁盘

3将VolatileIndex中的数据拷贝到PersistentIndex

4 将这个新的PersistentIndex加入到indexes文件中(该目录保存着所有有效索引目录的列表,一旦机器crash,那么就可以根据这个文件中包含的目录来打开indexreader),虽然说加进去,但是这个时候还没有刷到磁盘上,也只是加在内存中。

上一页  1 2 3 4  下一页

Tags:深入浅出 jackrabbit redolog

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