繁体   English   中英

Terracotta + Compass = Hibernate + HSQLDB + JMS?

[英]Terracotta + Compass = Hibernate + HSQLDB + JMS?

我目前需要一个高性能的Java存储机制。

这意味着:

1)我有10,000多个具有1 - 多关系的对象。

2)对象每5秒更新一次,在系统出现故障时最新的更新会持续存在。

3)对象需要在合理的时间内(1-5秒)查询。 (IE:给我带有这个时间戳的所有对象,或者给我这些位置边界内的所有对象)。

4)对象需要在各种Glassfish安装中可用。

目前:

我一直在使用JMS来分发对象,Hibernate作为ORM,以及HSQLDB来提供所需的可恢复性。

我对表现并不满意。 特别是JMS的一部分。

在做了一些Stack Overflow研究之后,我想知道这是否是一个更好的解决方案。 请记住,我对Terracotta给我的经验没有任何经验。

我会使用Terracotta在系统周围分配对象,而其他东西需要能够“查询”这些对象的属性。

这听起来合理吗? 它会满足这些性能限制吗? 我应该考虑哪些其他解决方案?

我知道这不是你问的问题,但是,你可能想从HSQLDB切换到H2 H2是一个相对较新的纯Java DB。 它是由编写HSQLDB的同一个人编写的,他声称性能要好得多。 我现在用它已经有一段时间了,我很高兴。 它应该是一个非常快速的过渡(添加一个Jar,更改连接字符串,创建数据库)所以它值得一试。

总的来说,我相信在重写不同架构中的应用程序之前,我试图充分利用我所拥有的东西。 尝试对其进行分析以首先确定瓶颈。

起初,Lucene不是你的朋友。 (只读)

Terracotta将在Logical层进行扩展! 您的问题似乎与处理逻辑无关。 它更多地围绕存储/通信点。

  1. 找出你的瓶颈! 对存储/逻辑/ JMS处理时间和开销进行基准测试!
  2. 使用良好的JMS框架(例如ActiveMQ)和良好/优化的配置来解决JMS问题。
  3. 也许分布式密钥=>价值商店是你的朋友。 尝试Project Voldemort
  4. 如果你想留在Hibernate和HSQL,请查看Hibernate二级缓存和连接池(c3po,容器驱动......)!

几个Terracotta用户过去已经建立了这样的系统,所以我可以通过存在的证据告诉你它可以完成。 :)

Compass确实支持使用Terracotta进行群集,因此可能对您有所帮助。 我怀疑你可以通过小心创建集群数据结构来获得更快的速度。

关于您的要求和兵马俑:

1)从兵马俑的角度来看,10k物体非常小

2)5秒更新率似乎不是问题。 可能取决于有多少节点以及是否有任何自然分区可以利用。 所有更新都将持久。

3)1-5秒查询时间似乎相当容易。 构建自己组织良好的数据结构以进行查找是棘手的部分。 显然你想避免扫描所有数据。

4)Terracotta目前支持Glassfish v1和v2。

如果你在Terracotta论坛上发帖,你可能会在这个问题上获得更多Terracotta眼球。

我目前正致力于为非常(非常)快速的Key / Value分布式散列数据库编写客户端,该散列数据库提供集合+列表语义。 DB是C99并且需要GCC,现在我正在与好的旧Java网络IO进行斗争,以打破我目前每秒30,000次获取/设置的障碍。 希望在一周内完成。 通过我的帐户给我留言,我会在展示时间回来。

由于具有如此高的更新率,Lucene几乎绝对不是您想要的,因为一旦文档被索引,就无法更新文档。 您必须将所有对象版本保留在索引中并选择具有最新时间戳的对象版本,这将导致您的性能下降。

我不是数据库专家,但我认为你应该研究最近在新闻上发布的任何一个分布式数据库解决方案。 (CouchDB,Cassandra)

你没有说你正在为JMS使用什么供应商,但如果你有一些瓶颈,我不会感到惊讶。 我无法从ActiveMq每秒获得超过100条消息,无论我在确认,队列大小等配置方面做了什么,我们都无法将CPU超过百分之几。

解决方案是将许多查询批处理为一个JMS消息。 我们有一个简单的类,当它有200个查询或达到超时(我们使用了20ms)时发送了一批消息,这使我们的消息吞吐量大幅增加。

也许你应该看看: Prevayler

你的对象总是在mem中。 对象的“更改”将保持不变。 您可以不时拍摄快照:每个对象都是持久的。

Terracotta + jofti =可查询的持久性聚类数据结构搜索谷歌的terracotta querymap或访问tusharkhairnar.blogspot.com查询地图博客您可能还想集成timasync以更新数据库。 数据库是你的记录使用兵马俑系统作为缓存和数据库卸载机制你甚至可以批量异步更新,使其更快,以便我的db包含相当近期的数据

Tushar tusharkhairnar.blogspot.com

保证消息传递将比易失性消息传递慢得多。 鉴于每隔几秒钟更新一个对象,您可以考虑批量更新(比如说500个更改或时间说1-10毫秒),发送易失性消息,批量处理事务。 在这种情况下,您更有可能受到带宽的限制。 调整您的用例您可能会发现较小的批量大小也可以有效地工作。 如果带宽很关键(假设您有10 MB连接或更慢,那么您可以使用压缩而不是JMS)

使用自定义解决方案(也可能更简单)可以实现更高的性能,例如Hazelcast和JGroups是免费的(您可以添加一个节点来执行数据库同步,因此您的主应用程序不会变慢)。 有商业产品处理大约50万耐用消息/秒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM