java - Bitcask 可以用于简单和高性能的文件存储吗?

标签 java xml file riak

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

我们的要求是:

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

我确实看过几个 NoSQL 平台(例如 CouchDB、Riak 和其他),虽然这些系统看起来很棒,但它们似乎有点矫枉过正:

  1. 无需聚类
  2. 不需要守护进程(“服务”)
  3. 不需要巧妙的搜索功能

在深入研究 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/

相关文章:

c++ - 如何在 C++ 中将文本文件传输到二维数组?

java - 如何等待文件创建

java - 消息客户端未启动

java - 将 JDBC 批量插入发送到 crate.io 时,返回值 -3 表示什么

java - JAX-RS 和 Jersey : Properly Nested JSON

java - 主键由一个外键组成

xml - 如何在 Swift 中解析 XML 附件

java - 如何从解压文件中获取 XML 值

.net - 不同子命名空间中的类都出现在 WSDL 的顶层

java - Java中的文件删除