在大约一个月前发现Terracotta之后,我才开始学习如何使用它。这是一项非常酷的技术。
基本上,我想要做的是:
我的根(记录系统)是一个ConcurrentHashMap。
主插装类是我希望存在于HashMap中的具有30个左右字段的"JavaBean“。
大约有20000个这样的JavaBeans存在于Hashmap中。
每个bean (至少)有5个字段,每5秒更新一次。
(我使用Terracotta的原因是因为这些JavaBeans需要跨JVM和节点访问。)
有比我更有经验的TC的人有什么建议吗?性能是关键。
还有其他类似应用的例子吗?
发布于 2009-04-25 18:57:47
您可能会发现,在一个锁范围内批处理多个更改的性能会更好。每个同步的块/方法形成一个写事务(假设您使用写锁),该事务必须发送到服务器(也可能返回到其他节点)。通过更改一组字段,可能是在一个锁下的一组对象上,您可以减少创建事务的开销。至少可以玩玩的东西。
分区也是提高性能的关键方法。更改只需要发送到实际使用对象的节点。因此,如果您可以划分哪些节点经常接触特定对象,从而减少必须在集群中发送的更改数量,从而提高性能。
unnutz关于使用CHM或CSM的建议是很好的。CHM允许更大的并发性(因为每个内部段都可以被锁定并并发使用)-请确保也尝试更大的段计数。CSM实际上每个条目有一个锁,因此在一个N大小的表中实际上有N个分区。这可以极大地减少锁争用(以管理更多内部锁对象为代价)。即将到来的CSM更改将使锁管理成本大大降低。
一般来说,我们发现一个好的策略是:
请随时在Terracotta forums上提问-所有工程、现场工程、产品管理都可以观看这些内容并在那里回答。
发布于 2009-04-25 16:33:35
首先,我建议你也在他们的论坛上提出这个问题。
其次,实际上,在Terracotta上集群的应用程序的性能将取决于发生的写事务的数量。所以你可以考虑使用ConcurrentStringMap (如果你的键是字符串)或者ConcurrentHashMap。请注意,从性能的角度来看,CSM比CHM要好得多。
毕竟,POJO是懒惰加载的。这意味着每个属性都是按需加载的。
希望这能有所帮助。
干杯
https://stackoverflow.com/questions/789147
复制相似问题