为本地 MVCC HashMap 调整 Infinispan

Tuning Infinispan for local MVCC HashMap

我是 Infinispan 的新手,在为 Java.

寻找独立的 MVCC 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();

这是我实现此目标的最 effective/performant 方式吗,或者我应该考虑不同的 class 还是有一些我不知道的调整选项?

Infinispan 开发更侧重于集群设置;本地缓存是一种特殊情况,因此它们的实现可能看起来有些繁重。

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

有针对本地操作优化的缓存模式 - simple cache 但不支持事务。所以,我想说的就是这些了。