我正在寻找一种简单的方法来存储和检索数百万个xml文件。当前,一切都在文件系统中完成,这存在一些性能问题。

我们的要求是:

  • 能够在批处理过程中存储数百万个xml文件。 XML文件的最大大小可能为几兆,大多数在100KB范围内。
  • 通过ID(例如文档URL)进行非常快速的随机查找
  • Java和Perl均可访问
  • 在最重要的Linux发行版和Windows上可用

  • 我确实看过几种NoSQL平台(例如CouchDB,Riak等),尽管这些系统看起来不错,但它们似乎几乎像蜜蜂般被杀了:
  • 无需群集
  • 不需要守护程序(“服务”)
  • 不需要聪明的搜索功能

  • 在深入研究Riak之后,我发现了Bitcask(请参阅intro),这似乎正是我想要的。简介中介绍的基础知识确实很吸引人。但是不幸的是,没有办法通过Java访问位桶仓库(或者在那里?)

    所以我的问题归结为
  • 是以下正确的假设:Bitcask模型(仅追加写入,内存中的 key 管理)是存储/检索数百万个文档的正确方法
  • 是否可以通过Java替代Bitcask? (BerkleyDB浮现在脑海中...)
  • (面向riak专家)与“裸” Bitcask相比,Riak在开销,实现/管理/资源方面是否明智?
  • 最佳答案

    我认为Bitcask在您的用例中不能很好地工作。看起来Bitcask模型是为每个值的大小相对较小的用例设计的。
    问题出在Bitcask的数据文件合并过程中。这涉及将所有实时值从多个“较旧的数据文件”复制到“合并的数据文件”中。如果您有数百万个值(每个值都在100Kb左右),那么这就是大量的数据复制。

    请注意,以上内容假设XML文档的更新频率相对较高。如果很少进行更新,并且/或者您可以应对大量的空间“浪费”,那么合并可能只需要很少进行,或者根本不需要进行。

    10-07 12:56