Ключ дерева карт MapDb не имеет свойства expire
Я использую прямую память mapdb, чтобы действовать как память вне кучи. Поскольку в моем приложении много sortedset, поэтому я использовал механизм кеширования mapdb treeset для хранения своих значений.
Код как ниже:
@PostConstruct
private void initDbEngine() {
try {
dbEngine = DBMaker
.memoryDirectDB()
.closeOnJvmShutdown()
.concurrencyScale(16)
.make();
logger.error("dbEngine init ok...");
} catch (Exception ex) {
logger.error(OffheapCacheConst.PACKAGE_CONTAINER, ex);
throw ex;
}
}
private SortedSet initSortedSetContainer(String containerName) {
try {
SortedSet sortedSet = dbEngine
.treeSet(containerName)
// why below three properties not exist????
//.expireAfterCreate(86400 * 30 * 12, TimeUnit.SECONDS)
//.expireAfterUpdate(86400 * 30 * 12, TimeUnit.SECONDS)
//.expireAfterGet(86400 * 30 * 12, TimeUnit.SECONDS)
.maxNodeSize(16)
.createOrOpen();
return sortedSet;
} catch (Exception ex) {
logger.error(OffheapCacheConst.PACKAGE_CONTAINER, ex);
throw ex;
}
}
Но когда я попытался найти expireAfterCreate/expireAfterUpdate/expireAfterGet property
Я не получил ни одного. Просто интересно, почему treeset не связал эти свойства?
Есть еще идеи, что я могу сделать срок действия ключа с набором деревьев mapdb?
1 ответ
Наконец, мы отказываемся от возможности использовать mapdb в качестве кэша вне кэша, потому что его производительность не соответствует нашим требованиям. Я сделал тест с OHC и результат ниже:
Benchmark Mode Cnt Score Error Units
OhcBenchmark.testOhcGet thrpt 20 923806.733 ± 19007.928 ops/s
OhcBenchmark.testOhcHGet thrpt 20 242194.462 ± 11365.323 ops/s
OhcBenchmark.testOhcHGetAll thrpt 20 265504.651 ± 15110.371 ops/s
OhcBenchmark.testOhcHSet thrpt 20 204028.508 ± 59620.923 ops/s
OhcBenchmark.testOhcSAdd thrpt 20 10097.188 ± 607.277 ops/s
OhcBenchmark.testOhcSet thrpt 20 417034.685 ± 69965.252 ops/s
OhcBenchmark.testOhcSmember thrpt 20 329536.900 ± 15128.885 ops/s
OhcBenchmark.testOhcZAdd thrpt 20 222422.422 ± 33836.662 ops/s
OhcBenchmark.testOhcZRange thrpt 20 155268.857 ± 5373.339 ops/s
Benchmark Mode Cnt Score Error Units
MapdbCacheBenchmark.testMapdbGet thrpt 20 43376.407 ± 6046.811 ops/s
MapdbCacheBenchmark.testMapdbHGet thrpt 20 45982.205 ± 2212.897 ops/s
MapdbCacheBenchmark.testMapdbHGetAll thrpt 20 48149.936 ± 1819.886 ops/s
MapdbCacheBenchmark.testMapdbHSet thrpt 20 18269.013 ± 1133.118 ops/s
MapdbCacheBenchmark.testMapdbSAdd thrpt 20 246.944 ± 31.502 ops/s
MapdbCacheBenchmark.testMapdbSet thrpt 20 28922.292 ± 1618.363 ops/s
MapdbCacheBenchmark.testMapdbSmember thrpt 20 50328.641 ± 3519.970 ops/s
MapdbCacheBenchmark.testMapdbZAdd thrpt 20 14729.551 ± 658.754 ops/s
MapdbCacheBenchmark.testMapdbZRange thrpt 20 37038.027 ± 1795.458 ops/s
Кроме того, ohc поддерживает истечение ключа, это то, что нам нужно. Mapdb не может установить время истечения для ключа на карте.