点亮启用了直写和后写,但每个记录仍然保留行

时间:2017-12-04 10:34:02

标签: sql-server ignite in-memory-database

我正在使用MS SQL Server进行第三方持久性。我的目的是将数据从数据库加载到数据网格,执行一些计算(分布式)并在结束时将结果写回SQL Server。要处理的记录数是>因此,我不希望每个记录保留记录但是分批(例如,根据间隔或每X毫秒)。以下是我配置节点的方法:

ccfg.setReadThrough(true);
ccfg.setWriteThrough(true);
ccfg.setWriteBehindEnabled(true);
ccfg.setWriteBehindBatchSize(10000);

以下是执行计算的代码和要缓存的put

int i = 0;

for (ComputePOJO computeItem : computeItems) {
    InvoiceItem invoiceItem = calcInvoiceItem();

    InvoiceItemKey key = new InvoiceItemKey(invoiceId, contractItemId);
    invoiceItem.setId(key);
    invoiceItemCache.put(key, invoiceItem);

    i++;

    if (i % 1000 == 0) {
        System.out.printf("> Computed %s InvoiceItems...%n", i);
    }
}

如果我在put调用上放置一个断点并在put调用之前和之后计算记录(SQL Server中的SELECT COUNT(*) FROM InvoiceItem查询),我可以看到该记录是立即写入磁盘的,尽管启用了后写和配置,每10秒写一次。我也试过了putAsync但结果相同。

我在这里缺少什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我后来意识到CacheAtomicityMode设置为CacheMode.ATOMIC,更改为CacheAtomicityMode.TRANSACTIONAL并且不再逐行写入DB。