0

私は、現在の問題ステートメントについて Terracotta を評価しています。このプロセスは CPU を集中的に使用し、約 5 ~ 10 GB の作業メモリ (RAM) を必要とします。メモリ内の各オブジェクトは 1 キロバイトの細かさで、少数のプリミティブ データ型で構成されています。RAM データ全体が何千回も反復され、反復ごとにすべてのオブジェクトが変更されます。各オブジェクトは完全に変更されます。プロセスが完了するまでに数日かかります。

100 万以上のオブジェクトが分割され、複数のコア マシンで実行されるようになりましたが、(より大きな問題のために) より多くの電力とより多くの RAM が必要です。1 つのスレッドによって処理されるデータ/オブジェクトは、他のスレッドと共有されません

Terracota は良い解決策でしょうか? 何百万ものオブジェクトをクラスタリング サーバーに同期することは、効果をなくす非常に悪いボトルネックになるのでしょうか?

4

1 に答える 1

0

Terracotta はキャッシングと高速検索に最適だと思います。プット レートとして、キャッシュ サーバー インスタンスごとに 1 秒あたり 10K の「バッチ プット」レートを見てきました。「バッチ更新」モードは、エントリのコレクションを 1 回で配置できることを意味します。これは、単一の配置よりもはるかに効率的です。

バッチ更新の例を次に示します。

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 には、JVM ヒープ外のメモリを使用できる BigMemory 機能があります。有効にするには、ehcache.xml に追加する必要があります。

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

上記の例では、JVM の外部で 3Gig の RAM を使用します。一般に、ヒープ サイズを 4G より大きくしないでください。そうしないと、JVM が GC で大量のサイクルを消費することになります。この場合、計算がさらに遅くなります。

チェックする別の代替手段は、「コンピューティング/データ グリッド」ソリューションです。http://www.gridgain.comおよびhttp://www.gigaspaces.comから開始できます。

于 2012-09-27T19:20:53.633 に答える