1

我一直在寻找用于在 Java EE 环境中持久保存肥皂消息的高性能文件存储解决方案。

我们目前在 Oracle RMDBS 上使用 CLOB 表,但扩展成本非常高。虽然 oracle 可以很好地存储相关元数据,但它在消息内容方面表现不佳。在具有 CLOB 的表上插入的性能比没有它的表大约差 1000%(这是通过比较 VARCHAR2(4000)-insert 与 CLOB-insert 的性能来衡量的,当 CLOB 已禁用行内存储时)

在文件系统上持久化消息是一种选择,但我非常怀疑普通文件系统如何执行每天存储数百万个文件。考虑到我们必须将这些文件保存几个月,这听起来不太对劲。

我知道有几个开源键值数据库(jackrabbit、mongodb 等等)可能适合这项任务,但我只是找不到时间来评估它们。我还想了解开源 RMDBS 的性能。

考虑到传输的消息量不断增加,优先考虑的是低延迟和高性能。我们不需要集群或事务性,并且系统故障时的(少量)数据丢失是可以接受的。

要求:

  • 当消息大小为 8 KB 时,必须能够保持至少 100 条持久消息/秒的速率
  • 必须能够存储至少 1 亿条消息
  • 必须支持按年龄删除持久消息
  • 在删除过程中必须支持持久化
  • 必须支持通过 id 检索消息

帮助表示赞赏

4

4 回答 4

1

是 MongoDB 和 SQL Server 之间的一个很好的比较(我相信 Oracle 会有类似的性能)。从图表中可以看出,Mongo 每秒可以处理 20 000 次插入。Mongo 也有基于 JSON 的查询语言,它可以像常规 SQL 一样做几乎所有事情,它有分片集群和副本集,可以处理所有必要的备份和故障转移(这里有一些基本信息)。

此外,如果您有兴趣深入挖掘,10 gen 会在两周内开始提供在线课程,并获得证书。

于 2013-04-29T19:27:13.123 回答
1

您可以尝试以下产品:

  • HBase
  • MongoDB
  • 卡桑德拉
  • Solr 4.0(仅限)

这些是我有经验的人。市场上还有很多其他的好产品可以做你想做的事。

一些观察:据我所知,它们都没有开箱即用的“按年龄删除”功能。但是实现它应该非常简单。我必须假设在 MogoDB 中更容易。

如果您将尝试 Solr,您应该坚持使用 4.X 版本,因为它们是唯一支持近实时提交的版本,它会影响您的“删除和插入”要求。

它们都具有出色的性能,但我没有按照您的要求运行基准测试。如果我是你,我会制定自己的基准。

于 2013-04-29T19:50:38.493 回答
0

Oracle11g 引入了重复数据删除功能。此功能将使用 clob 提高 oracle 数据库的性能。

于 2013-05-05T02:51:13.060 回答
0

这是我迄今为止发现的。在评估每个产品后,我会尝试更新这个答案。

我使用MongoDB开始了我的实验,这在纸面上看起来是一个可行的选择。以下是我的发现的摘要:

  • 用 C++ 编写
  • 复制(replicaset)需要 3 个节点才能实现高可用性
  • 其中一个节点被选为master——只有master可以写
  • 横向扩展是通过分片(分区)完成的
  • 每个分片本质上是一个副本集 - 因此分片环境需要至少 6 个节点才能实现高可用性
  • mongod 实例消耗所有可用内存 - 应使用虚拟化进行资源分区(如果您打算在同一硬件上运行应用程序服务器)
  • 主重选可能需要长达 1 分钟
  • 文档集合(表)在写操作期间使用排他锁
  • Java API 非常易于使用,并且包含一个名为 GridFS 的虚拟文件系统
  • 1kbyte 文档在测试系统上的单节点写入性能约为 20000 次插入/秒
  • 1kbyte 文档的单节点读取性能约为 20000 次读取/秒

MongoDB 在两个数据中心配置上需要 6 个节点这一事实让我进一步寻找更具成本效益的解决方案。

阿帕奇卡桑德拉:

  • 用 Java 编写
  • 复制需要 3 个节点以实现高可用性
  • 数据库在网络分区中幸存下来
  • 为多个数据中心设计了复制算法
  • 所有节点都是可写的
  • 可以通过添加更多节点来实现横向扩展(达到一定限制)
  • Cassandra 可能需要 JVM 垃圾收集调整
  • Java API 不是最容易使用的
  • 1kbyte 文档的单节点写入性能约为 7000 次插入/秒
  • 1kbyte 文档的单节点读取性能约为 7000 次读取/秒

虽然 Cassandra 在单节点配置中速度较慢,但​​在高可用性配置上的写入性能将与 MongoDB 的性能相匹配。在每个节点上执行写入的能力(即使在网络分区期间)是非常受欢迎的日志记录功能。

沙发底座:

不幸的是,我无法测试 Couchbase。

现在我们将继续使用 Oracle SecureFiles。我们会在 Oracle 上耗尽资源吗,Cassandra 和 MongoDB 似乎都是可行的替代方案。

于 2013-05-13T19:41:01.610 回答