我正在寻找一种简单的方法来存储和检索数百万个xml文件。目前一切都在文件系统中完成,这有一些性能问题。
我们的要求是:
- 能够在批处理中存储数百万个 xml 文件。XML 文件可能最多只有几兆大,大多数在 100KB 范围内。
- 通过 id 进行非常快速的随机查找(例如文档 URL)
- 可通过Java和Perl访问
- 在最重要的 Linux 发行版和 Windows 上可用
我确实看了几个NoSQL平台(例如CouchDB,Riak等),虽然这些系统看起来很棒,但它们似乎几乎是矫枉过正:
- 无需群集
- 无需守护程序("服务")
- 无需巧妙的搜索功能
深入研究里亚克后,我找到了Bitcask(见介绍),这似乎正是我想要的。介绍中描述的基础知识非常有趣。但不幸的是,没有办法通过java访问bitcask存储库(或者有吗?
所以我的问题归结为
- 是以下假设正确:Bitcask 模型(仅追加写入、内存中密钥管理)是存储/检索数百万个文档的正确方法
- 是否有任何可行的Bitcask替代品可以通过Java获得?(伯克利数据库浮现在脑海中...
- (对于 Riak 专家)与"裸"Bitcask 相比,Riak 的开销实施/管理/资源是否明智?
我认为Bitcask不适合您的用例。 看起来Bitcask模型是为每个值的大小相对较小的用例而设计的。
问题出在Bitcask的数据文件合并过程中。 这涉及将所有实时值从许多"旧数据文件"复制到"合并数据文件"中。 如果你有数百万个值,每个值在 100Kb 左右,这是一个疯狂的数据复制量。
<小时 />请注意,上述假定 XML 文档的更新频率相对较高。 如果更新很少和/或您可以处理大量的空间"浪费",那么合并可能只需要很少进行,或者根本不需要。
Bitcask 可能适用于这种情况(大值),具体取决于是否存在大量覆盖。 特别是,除非有大量浪费的空间,否则没有理由合并文件,这仅在新值与旧值具有相同键时发生。
Bitcask 特别适合这种批量加载情况,因为它将按顺序将传入的数据流直接写入磁盘。 在大多数情况下,查找将进行一次查找,但如果有任何时间位置,文件缓存将为您提供帮助。
我不确定 Java 版本/包装器的状态。