我正在评估Terracotta目前的问题陈述。该过程是CPU密集型的,需要大约5-10 GB的工作内存(RAM)。内存中的每个对象都是1千字节精细,由少数原始数据类型组成。整个RAM数据经过数千次迭代,每次迭代都会更改所有对象。每个对象都完全修改。这个过程需要数天才能完成。
百万个对象被分区并且现在在多个核心机器上运行,但是我需要更多的功率和更多的RAM(对于更大的问题)。一个线程处理的数据/对象不与其他人共享
Terracota会是一个很好的解决方案吗?是否会将数百万个对象同步到群集服务器是一个非常糟糕的瓶颈,导致它无效?
答案 0 :(得分:0)
我认为Terracotta最适合缓存和快速检索。作为看跌期权,我看过10K"批量看跌期权"每个缓存服务器实例的每秒速率。 "批量更新"模式意味着您可以一次性放置一组条目,这比单次放置更有效。
以下是批量更新的示例:
cache.setNodeBulkLoadEnabled(true);
try
{
Collection<Element> entries= new ArrayList<Element>();
while (...)
{
entries.add(new Element(key, value));
}
cache.putAll(entries);
}
finally
{
cache.setNodeBulkLoadEnabled(false);
}
此外,Terracotta具有BigMemory功能,可以使用JVM堆之外的内存。 要启用它,您必须添加ehcache.xml:
<cache name="com.xyz.MyPOJO" maxMemoryOffHeap="3g">
<terracotta/>
</cache>
上面的示例将在您的JVM之外使用Ram的3Gig。一般来说,你的堆大小不应该大于4G,否则你的JVM将在GC上花费大量的周期......在你的情况下,你的计算会进一步减慢。
检查的另一种方法是&#34;计算/数据网格&#34;解决方案。您可以从http://www.gridgain.com和http://www.gigaspaces.com
开始