1

目前我们正在使用 nodeJS 和 LokiJS。因为我们的应用程序正在处理实时数据;与外部 NoSQL/Relational DB 通信将导致延迟问题。

所以我们决定使用内存数据库,即 LokiJS。

LokiJs 擅长处理包含 500-100 个文档的集合。但是当涉及到更新和并行读取时;情况更糟。

这意味着我们的供应商之一已发布 Kafka 端点以使用提要,并再次将其提供给某些外部服务;从 Kafka 主题中,我们每秒收到 100-200 个事件。因此,每当我们收到 Kafka 事件时,我们都会更新现有集合。由于增量更新过于频繁,LokiJS 集合更新无法通过读取正确完成,从而导致不一致的结果。

这是我的收藏创​​建片段。

    let db= new loki('c:\products.json', {
        autoload: true,
        autosave: true,
        autosaveInterval: 4000
    });
     this.collection= db.addCollection('REALTIMEFEED', {
                        indices: ["id", "type"],
                        adaptiveBinaryIndices: true,
                        autoupdate: true,
                        clone: true
                    });


function update(db, collection, element, id) {
    try {
        var data = collection.findOne(id);
        data.snapshot = Date.now();
        data.delta = element;
        collection.update(data);
        db.saveDatabase();
    } catch (error) {
        console.error('dbOperations:update:failed,', error)
    }
}

你能建议我吗,我在这里有什么遗漏吗?

4

1 回答 1

1

我认为您的问题在于您在每次更新时都保存数据库。您已经指定了 anautoSave和 an autoSaveInterval,因此 LokiJS 将定期保存您的数据。如果您还强制从每个更新中保存,您将阻塞进程,因为 JS 是单线程的,因此它必须处理大部分操作(当保存操作传递给操作系统以获取文件保存位时,它可以继续运行) .

于 2019-07-30T09:09:09.217 回答