LokiJS与更新和读取不一致,同时使用50k +读写



当前我们正在使用nodejs&Lokijs。由于我们的应用程序正在处理实时数据;要与外部NOSQL/关系数据库进行通信会导致延迟问题。

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

lokijs擅长于我们使用其中包含500-100个文档的收藏品时。但是,当涉及到更新时&并行读取;情况更糟。

这意味着我们的供应商之一已发布Kafka端点以消耗供稿,并再次将其提供给一些外部服务;从Kafka主题中,我们每秒获得100-200个活动。因此,每当我们收到Kafka活动时,我们都会更新现有的集合。由于Delta更新过于频繁,因此Lokijs Collection更新无法通过该阅读给出不一致的结果来正确完成。

这是我的收藏创建片段。

    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)
    }
}

你能建议我,我在这里错过了什么。

我认为您的问题在于您在每个更新中保存数据库。您已经指定了autoSaveautoSaveInterval,因此Lokijs将定期保存您的数据。如果您还强制从每次更新中保存该过程,则由于JS是单线读取的,因此必须处理大部分操作(当保存操作传递到OS以获取文件保存位时,它可以继续运行(。

最新更新