0

我使用 mapdb 的直接内存作为我的堆外内存。因为我的应用程序中有很多 sortedset,所以我使用 mapdb 树集缓存机制来存储我的值。

代码如下:

@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 的树集进行密钥过期吗?

4

1 回答 1

0

最后我们放弃了使用 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 支持 key expire,这是我们需要的。Mapdb 无法为 Map 中的键设置过期时间。

于 2018-08-17T06:28:59.587 回答