为本地MVCC HashMap调整Infinispan

时间:2016-05-19 20:56:54

标签: infinispan

我是Infinispan的新手,并且在寻找一个孤立的MVCC HashMap for Java时基本上偶然发现了它。

我担心Infinispan可能对我需要的东西有点沉重,或者可能有一种更高效的方式来实现我对Infinispan的需求。我不需要集群或分发,我只需要在单个JVM中嵌入Infinispan。

目前我需要一个具有事务和 Repeatable Read 语义的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();

这是我能实现这一目标的最有效/最有效的方法,还是我应该考虑另一个类,还是有一些我不知道的调优选项?

1 个答案:

答案 0 :(得分:2)

Infinispan开发更侧重于集群设置;本地缓存是一个特例,因此它们的实现可能看起来有点重。

您错过了builder.transaction().notifications(false) - 这可能会削减另一个百分比,并禁用使用事务侦听器的功能。此外,您可以尝试使用budiler.transaction().useSynchronization(true),但使用虚拟TM(用于调用批处理),它可能并不重要。

有针对本地操作优化的缓存模式 - simple cache但不支持事务。所以,我会说这几乎都是。