2013-04-29 76 views
1

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

我们目前在Oracle RMDBS上使用CLOB表,但它的扩展非常昂贵。尽管oracle在存储相关元数据方面效果很好,但对于消息内容来说效果不佳。使用CLOB插入表的性能比没有CLOB的表的性能差大约1000%(这是通过比较在CLOB禁用行存储时VARCHAR2(4000)插入到CLOB插入的性能来衡量的)

坚持文件系统上的消息是一种选择,但是我对平均文件系统每天如何执行存储数百万个文件有些疑问。考虑到我们必须将这些文件保留几个月,这听起来不对。

我知道有几个开源键值数据库(兔崽子,MongoDB的命名等等),可能是弥补了任务,但是我只是找不到时间来评估他们。我也想听听开源RMDBS的性能。

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

要求:

  • 必须能够维持至少100persisted消息/秒的速率时的消息大小是8kilobytes
  • 必须能够存储至少1亿消息
  • 必须支持的持续缺失按年龄排列的消息
  • 必须支持持续同时删除正在进行中
  • 必须支持通过标识检索消息

帮助表示赞赏

+0

我会尝试couchDB,但我不知道这比其他数据库解决方案更适合您的使用。你会想要全部阅读。另外,如果您的IT/DBA不支持mongodb或couchdb,您可能需要使用它们。 – 2013-04-29 19:35:58

+0

通过将lob存储转换为SECUREFILES,我们实际上设法使Oracle负载下降了很多。不过,我认为我仍然需要评估开源选项。当我完成后,我会发表一篇关于我的发现的文章。 – 2013-04-30 10:18:49

回答

0

这是我到目前为止发现的。我会在评估每个产品后尝试更新此答案。

我开始我的实验,使用MongoDB,它在纸上看起来像一个可行的选择。这是我发现的一个总结:用C++编写

  • 复制(replicaset)

    • 需要高可用性3个节点
    • 其中一个节点被选作为主 - 只有主能写
    • 向外扩展是通过分片(分区)来完成
    • 每个碎片本质上是一个replicaset - 所以碎片化环境需要ATLEAST 6个节点的高可用性
    • 的mongod实例消耗所有可用的内存 - 虚拟化技术应该用于资源分区(如果你打算运行在相同的硬件应用服务器)
    • 主连任可能需要1分钟
    • 文档集合(表)写操作
    • 的Java API过程中使用排它锁是非常容易使用,并且包括所谓的GridFS的一个虚拟文件系统的测试系统上
    • 单节点写入性能为〜20000点的插入/秒为1K字节文件
    • 单节点读取性能为〜20000的读/秒为1K字节文件

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

    Apache的卡桑德拉:

    • Java语言编写
    • 复制要求的高可用性3个节点
    • 数据库生存
    • 复制算法已被设计为多个数据中心网络分区
    • 所有节点都可写入
    • 向外扩展可以通过增加更多的节点(达到一定极限)做
    • 卡桑德拉可能需要JVM的垃圾收集微调
    • 的Java API是不是最容易与
    • 单个节点的写入性能,以工作为〜7000个刀片/秒为1K字节文件
    • 单节点读取性能为〜7000读取用于1K字节文件/秒

    虽然卡桑德拉在单个节点配置较慢,写上一个高可用性配置将匹配MongoDB的性能的性能。在每个节点上执行写操作的能力(即使在网络分区过程中)对于日志记录来说都是非常受欢迎的。

    Couchbase:

    不幸的是我无法测试Couchbase。

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

  • 1

    Here是MongoDB中和SQL Server之间的比较不错(我相信甲骨文将有类似的性能)。你可以从图表中看到Mongo每秒可以处理20 000次插入。蒙戈也查询基于JSON语言,它几乎可以做一切都像常规的SQL,它具有分片群集和副本设定,它可以处理所有neccesary备份和故障转移(一些基本信息here)。

    另外,如果你有兴趣挖掘稍微深一点,10根具有online course在授予证书2周开始。

    +0

    我忘了感谢您提及在线课程 – 2013-05-13 18:45:43

    1

    你可以尝试以下产品:

    • HBase的
    • MongoDB的
    • 卡桑德拉
    • Solr的4.0头(只)

    这些是我有什么经验的球员。还有很多其他好的产品可以做到你想要的市场。

    一些意见:他们都没有这个“删除年龄”功能外的开箱,据我知道这一点。但实施它应该非常简单。更容易在MogoDB我必须承担。

    如果你会尝试Solr的,你应该4.x版本坚持,因为这些是唯一以接近实时的支持承诺,它会影响你的“删除和插入”的要求。

    他们都有伟大的表现,但我没有运行与您的要求的基准。如果我是你,我会制定我自己的基准。

    0

    Oracle11g中具有特色的介绍重复数据删除。这个特性将会提高clob数据库的性能。

    +0

    由于存储的邮件是唯一的,重复数据删除不会提供任何改进 - 但是,压缩在xml上运行良好 – 2013-05-05 21:45:16