2016-05-19 10 views
0

Infinispanを初めて使用していて、基本的にMVCC HashMap for Javaを探している間に遭遇しました。ローカルMVCCのInfinispanを調整するHashMap

Infinispanは、私が必要とするものに対して多少重いか、Infinispanで必要なものを達成するためのより効果的な方法があるかもしれないと心配しています。クラスタリングやディストリビューションは必要ありません。単一のJVM内に組み込みのInfinispanが必要です。

私はセマンティクスを取引があり、反復可能読み取りMap実装を必要とする瞬間に、私は現在、次の初期化コードを持っている:

final ConfigurationBuilder builder = new ConfigurationBuilder(); 
builder.jmxStatistics().available(false); 
builder.invocationBatching().enable(); 
builder.versioning().scheme(VersioningScheme.SIMPLE); 
builder.versioning().enable(); 
builder.locking().concurrencyLevel(Runtime.getRuntime().availableProcessors() * 2); 
builder.locking().writeSkewCheck(true); 
builder.transaction().locking().isolationLevel(IsolationLevel.REPEATABLE_READ); 
builder.transaction().lockingMode(LockingMode.OPTIMISTIC); 
builder.transaction().transactionMode(TransactionMode.TRANSACTIONAL); 

final DefaultCacheManager cacheManager = new DefaultCacheManager(builder.build()); 
final Cache<String, String> cache = cacheManager.getCache(); 
final TransactionManager transactionManager = cache.getAdvancedCache().getTransactionManager(); 

を私はそのようになど、さまざまなスレッドからcacheを使用します。

transactionManager.begin(); 
cache.put(KEY, VALUE); 
... 
transactionManager.commit(); 

これは私がこれを達成する最も効果的な方法ですか、別のクラスを検討すべきか、私が気づいていないチューニングオプションがありますか?

答えて

2

Infinispanの開発は、クラスタ化された設定に焦点を当てています。ローカルキャッシュはかなり特殊なケースであるため、実装が多少重くなっているように見えるかもしれません。

あなたは別のパーセントをスライスし、トランザクションリスナーを使用できないようにすることができます。builder.transaction().notifications(false)が見つかりませんでした。また、budiler.transaction().useSynchronization(true)を試すこともできますが、ダミーTM(呼び出しのバッチ処理に使用される)では多分問題はありません。

ローカル操作用に最適化されたキャッシュモードがあります(simple cache)が、トランザクションはサポートされていません。だから、これはかなり大変だと言えるだろう。

関連する問題