我正在寻找一种简单的方法来存储和检索数百万个 xml 文件。目前一切都在文件系统中完成,这存在一些性能问题。
我们的要求是:
- 能够在批处理过程中存储数百万个 xml 文件。 XML 文件可能有几兆大,大多数在 100KB 范围内。
- 通过 ID 进行非常快速的随机查找(例如文档 URL)
- 可通过 Java 和 Perl 访问
- 在最重要的 Linux 发行版和 Windows 上可用
我确实看过几个 NoSQL 平台(例如 CouchDB、Riak 和其他),虽然这些系统看起来很棒,但它们似乎有点矫枉过正:
- 无需聚类
- 不需要守护进程(“服务”)
- 不需要巧妙的搜索功能
在深入研究 Riak 之后,我发现了 Bitcask(参见 intro),这似乎正是我想要的。介绍中描述的基础知识非常有趣。但不幸的是,没有办法通过 java 访问 bitcask 存储库(或者有吗?)
所以我的问题归结为
- 以下假设是否正确:Bitcask 模型(仅追加写入,内存中 key 管理)是存储/检索数百万文档的正确方法
- 是否有通过 Java 提供的 Bitcask 的可行替代品? (想到 BerkleyDB……)
- (针对 riak 专家)与“裸”Bitcask 相比,Riak 的实现/管理/资源方面的开销是否明智?
最佳答案
我认为 Bitcask 不会很好地满足您的用例。看起来 Bitcask 模型是为每个值的大小相对较小的用例而设计的。
问题出在Bitcask的数据文件合并过程中。这涉及将多个“旧数据文件”中的所有实时值复制到“合并数据文件”中。如果您有数百万个值,每个值都在 100Kb 左右,那么这是一个疯狂的数据复制量。
请注意,以上假设 XML 文档更新相对频繁。如果更新很少和/或您可以处理大量空间“浪费”,那么合并可能只需要很少进行,或者根本不需要进行。
关于java - Bitcask 可以用于简单和高性能的文件存储吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008576/