Memory Terracota是由精细物体组成的快速变化的大数据的好解决方案吗?

Memory Terracota是由精细物体组成的快速变化的大数据的好解决方案吗?,memory,scalability,cpu,terracotta,Memory,Scalability,Cpu,Terracotta,我正在为我目前的问题陈述评估Terracotta。这个过程是CPU密集型的,需要大约5-10GB的工作内存(RAM)。内存中的每个对象都是1KB大小的,由一些基本数据类型组成。整个RAM数据经过数千次迭代,每次迭代都会更改所有对象。每个对象都被完全修改。这个过程需要几天才能完成 百万以上的对象已经分区,现在运行在多个核心机器上,但我需要更多的电源和更多的RAM(用于更大的问题)。一个线程处理的数据/对象不与其他线程共享 Terracota是一个好的解决方案吗?将数以百万计的对象同步到集群服务器是

我正在为我目前的问题陈述评估Terracotta。这个过程是CPU密集型的,需要大约5-10GB的工作内存(RAM)。内存中的每个对象都是1KB大小的,由一些基本数据类型组成。整个RAM数据经过数千次迭代,每次迭代都会更改所有对象。每个对象都被完全修改。这个过程需要几天才能完成

百万以上的对象已经分区,现在运行在多个核心机器上,但我需要更多的电源和更多的RAM(用于更大的问题)。一个线程处理的数据/对象不与其他线程共享


Terracota是一个好的解决方案吗?将数以百万计的对象同步到集群服务器是否会成为一个非常糟糕的瓶颈,导致其效率低下?

我认为Terracotta最适合缓存和快速检索。作为put速率,我看到每个缓存服务器实例每秒有10K个“批处理put”。“批量更新”模式意味着您可以将一组条目放在一次放炮中,这将比单次放炮更有效

以下是批量更新的示例:

cache.setNodeBulkLoadEnabled(true);
try
{
  Collection<Element> entries= new ArrayList<Element>();
  while (...)
  {
    entries.add(new Element(key, value));
  }
  cache.putAll(entries);
}
finally
{
  cache.setNodeBulkLoadEnabled(false);
}
cache.setNodeBulkLoadEnabled(true);
尝试
{
集合项=新的ArrayList();
而(…)
{
添加(新元素(键、值));
}
cache.putAll(条目);
}
最后
{
cache.setNodeBulkLoadEnabled(false);
}
此外,Terracotta具有BigMemory特性,能够使用JVM堆之外的内存。 要启用它,您必须在ehcache.xml中添加:

<cache name="com.xyz.MyPOJO" maxMemoryOffHeap="3g">
  <terracotta/>
</cache>

上面的示例将在JVM之外使用3Gig的Ram。一般来说,堆的大小不应该大于4G,否则JVM将在GC上花费大量的周期,这将进一步降低计算速度

检查的另一个替代方案是“计算/数据网格”解决方案。你可以从和开始