我正在学习大约一个月前发现它后如何使用兵马俑。这是一项非常酷的技术。
基本上我想做的事情:
我的根(记录系统)是ConcurrentHashMap。
主要的Instrumented类是一个“JavaBean”,我希望在HashMap中存在30个左右的字段。
Hashmap中将存在大约20000个这样的JavaBeans。
每个bean都有(至少)5个字段,每5秒更新一次。
(我之所以使用Terracotta是因为这些JavaBeans需要可以跨JVM和节点访问。)
任何有TC经验的人都有任何提示吗?表现是关键。
其他类似应用的任何示例?
答案 0 :(得分:7)
您可能会发现在一个锁定范围下批量处理多个更改会更好。每个同步的块/方法形成一个写事务(假设您使用写锁),必须将其发送到服务器(并可能返回到其他节点)。通过更改一堆字段(可能在一个锁定下的一堆对象上),可以减少创建事务的开销。至少可以玩的东西。
分区也是提高性能的关键方法。只需将更改发送到实际使用对象的节点。因此,如果您可以划分哪些节点通常会触及特定对象,从而减少必须在群集周围发送的更改数量,从而提高性能。
unnutz关于使用CHM或CSM的建议很好。 CHM允许更大的并发性(因为每个内部段可以同时锁定和使用) - 确保也尝试更大的段计数。 CSM每个条目实际上有一个锁,因此在N大小的表中实际上有N个分区。这可以大大减少锁争用(以管理更多内部锁对象为代价)。 CSM即将发生的变化将使锁定管理成本大大降低。
一般来说,我们发现一个好的策略是:
也可以随时询问Terracotta forums - 所有工程,现场工程,产品管理人员都会观察并回答这些问题。
答案 1 :(得分:3)
首先,我建议你也在他们的论坛上提出这个问题。
其次,实际上,集中在Terracotta willl上的应用程序的性能取决于发生的写入事务的数量。因此,您可以考虑使用ConcurrentStringMap(如果您的键是字符串)或ConcurrentHashMap。请注意,从性能方面来看,CSM比CHM要好得多。
毕竟,懒惰地加载了POJO。这意味着每个属性都是按需加载的。
希望有所帮助。
干杯