Java 消息的高性能存储
我一直在寻找用于在JavaEE环境中持久化soap消息的高性能文件存储解决方案 我们目前在OracleRMDB上使用CLOB表,但扩展成本非常高。虽然oracle可以很好地存储相关的元数据,但它对消息内容的处理效果并不太好。有CLOB的表上的Insert的性能比没有CLOB的表差大约1000%(这是通过比较VARCHAR2(4000)-Insert和CLOB Insert在CLOB禁用行内存储时的性能来衡量的) 在文件系统上持久化消息是一种选择,但我严重怀疑一般的文件系统每天存储数百万个文件的性能。考虑到我们必须把这些文件保存几个月,这听起来不太对劲 我知道有几个开源的键值数据库(jackrabbit、mongodb等等)可以完成这项任务,但我就是没时间对它们进行评估。我还想听听开源RMDB的性能 考虑到传输的消息量不断增加,优先考虑的是低延迟和高性能。我们不需要集群或事务性,系统故障时(轻微)数据丢失是可以接受的 要求:Java 消息的高性能存储,java,jakarta-ee,messaging,Java,Jakarta Ee,Messaging,我一直在寻找用于在JavaEE环境中持久化soap消息的高性能文件存储解决方案 我们目前在OracleRMDB上使用CLOB表,但扩展成本非常高。虽然oracle可以很好地存储相关的元数据,但它对消息内容的处理效果并不太好。有CLOB的表上的Insert的性能比没有CLOB的表差大约1000%(这是通过比较VARCHAR2(4000)-Insert和CLOB Insert在CLOB禁用行内存储时的性能来衡量的) 在文件系统上持久化消息是一种选择,但我严重怀疑一般的文件系统每天存储数百万个文件的性
- 当消息大小为8KB时,必须能够保持至少100persisted messages/sec的速率
- 必须能够存储至少1亿条消息
- 必须支持按年龄删除持久化邮件
- 删除过程中必须支持持久化
- 必须支持按id检索邮件
此外,如果你有兴趣深入挖掘,10Gen将在两周内获得一份证书 您可以尝试以下产品:
- 糖化血红蛋白
- 蒙哥达
- 卡桑德拉
- Solr 4.0(仅限)
它们都有很好的性能,但我没有按照您的要求运行基准测试。如果我是你,我会制定自己的基准。Oracle11g引入了重复数据消除功能。此功能将通过clob提高oracle数据库的性能。这是我到目前为止发现的。在评估每种产品后,我将尝试更新此答案 我使用MongoDB开始了我的实验,从纸面上看,这是一个可行的选择。以下是我的调查结果摘要:
- 用C写的++
- 复制(replicaset)需要3个节点才能实现高可用性
- 其中一个节点被选为主节点-只有主节点可以写入
- 向外扩展是通过分片(分区)完成的
- 每个分片本质上是一个复制集,因此分片环境至少需要6个节点才能实现高可用性
- mongod实例占用所有可用内存-虚拟化应用于资源分区(如果您打算在同一硬件上运行application server)
- 大师级连任最长可能需要1分钟
- 文档集合(表)在写入操作期间使用独占锁
- JavaAPI非常易于使用,并包括一个名为GridFS的虚拟文件系统
- 对于1KB文档,测试系统上的单节点写入性能约为20000次插入/秒
- 对于1KB的文档,单节点读取性能约为20000次读取/秒
- 用Java编写
- 复制需要3个节点才能实现高可用性
- 数据库在网络分区中生存
- 复制算法是为多个数据中心设计的
- 所有节点都是可写的
- 可以通过添加更多节点(达到一定限制)来进行向外扩展
- Cassandra可能需要JVM垃圾收集调优
- JavaAPI不是最容易使用的
- 对于1KB的文档,单节点写入性能约为7000次插入/秒
- 对于1KB的文档,单节点读取性能约为7000次读取/秒
目前,我们将继续使用Oracle安全文件。我们是否会耗尽Oracle上的资源,Cassandra和MongoDB似乎都是可行的替代方案。我会尝试couchDB,但我不知道这比其他数据库解决方案更适合您的使用。你会想把它们都读一遍的。此外,如果您的IT/DBA不支持mongodb或couchdb,您可能希望使用它们。实际上,我们通过将lob存储切换到SECUREFILES来降低Oracle的负载。尽管如此,我认为我仍然