我试图按照IRLBot纸 (相关页面从4开始)在Java中实现鼓(带有更新管理的磁盘存储库),但作为快速总结,它实际上只是对持久存储库进行批处理更新(键、值)对的一种有效方法。在链接文件中,它被用作爬虫URLSeen
测试、RobotsTxt
检查和DNS缓存的主干。
在c++ done 这里中有了一个很有帮助的实现,它以一种更易于理解的方式来布局架构。为了便于参考,这是来自c++实现的体系结构图:
我很难理解的部分是将(键,值)桶和辅助桶分开的原因。关于c++实现的文章声明如下:
在合并过程中,一个键/值桶被读取到一个单独的缓冲区中并进行排序。它的内容与持久存储库的内容同步。检查和更新就在此时进行。之后,将缓冲区重新排序为原来的顺序,使密钥/值对再次匹配相应的辅助桶,A调度机制随后将密钥、值和辅助性转发给后续处理和操作结果。此过程对所有桶依次重复。
那么,如果(键,值)桶的顺序需要恢复到辅助桶的顺序,以便将(键,值)对与辅助信息重新链接,为什么不将(键、值、辅助值)值保持在单数桶中?保持它们分离的原因是什么?将它们保持在一起是否更有效(因为您不再需要恢复桶的原始未排序顺序)?
发布于 2015-05-31 22:48:30
在合并时间鼓上,加载相应桶的键/值磁盘文件的内容,并根据所使用的操作使用检查、更新或check+updates,该文件的每个条目都带有备份数据存储。
因此,辅助磁盘文件是不相关的,没有将辅助数据加载到内存中,只需在排序时节省一些内存占用,为了处理60亿多个条目的唯一性,哪个鼓试图最小化。如果是f.e。在RobotsCache,辅助数据甚至可以是100 be左右的每一项。然而,这只是我自己的一篇论文,如果你真的想知道为什么他们分开这两个缓冲区和磁盘文件,你应该问一下Dmitri。
我还创建了一个基于Java的鼓实现 (也是一个基于Java的IRLbot实现),但两者都可能需要更多的爱。还有一个名为鼓声的基于Java的Github项目,它扩展了Java,并提供了一个选择特性,用于存储基因组代码。
https://stackoverflow.com/questions/27667138
复制相似问题