带有 nodejs 客户端的 Cassandra 没有按预期工作

Cassandra with nodejs client is not working as expected

我有一个如下所示的节点设置, DC1(节点 1、节点 2)和 DC2(节点 3 和节点 4)

我正在尝试通过如下所示的 NodeJs 客户端连接到 Cassandra,

const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['172.30.56.60','172.30.56.61','172.30.56.62','172.30.56.63'], keyspace: 'users' });

console.log(client);

const query = 'INSERT INTO user (user_id, user_name, user_phone) VALUES (?, ?, ?) IF NOT EXISTS';

console.log(query);
console.time('time');
for (var primaryKey = 0; primaryKey < 10000; primaryKey++) {
    const params = [primaryKey, 'hari', 12345678];
    console.log(primaryKey);
    client.execute(query, params, { prepare: true, consistency: cassandra.types.consistencies.quorum });
    console.log(primaryKey);
}
console.timeEnd('time');

我正在尝试跟踪插入所有 10000 个条目所花费的总时间,但我观察到,它正在异步更新条目(即,我得到的执行时间为“3.755 毫秒”,但是当我检查时在 cqlsh shell 中更新缓慢(使用 select count(*) 来自用户;),注意:我给出的一致性为 'cassandra.types.consistencies.quorum'

卡桑德拉:3.0

我需要做哪些更改才能同步执行它们?

谢谢, 哈利

现在您正在并发执行所有查询,因为您没有等待任何查询完成。

client.execute 方法 returns 一个承诺,因此要同步执行每个查询,您可以等待每个承诺完成,然后进行下一个查询。您可以使用 async/await -

async function insertBulk() {
    for (var primaryKey = 0; primaryKey < 10000; primaryKey++) {
        const params = [primaryKey, 'hari', 12345678];
        await client.execute(query, params, { prepare: true, consistency: cassandra.types.consistencies.quorum });
    }
}

async function getTime() {
    console.time('time');
    await insertBulk(); // wait till all the queries are executed sequentially.
    console.timeEnd('time');
}

getTime();

此外,如果您的用例是插入许多文档,那么您可以使用 Batch 查询。了解它 here