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

时间:2017-11-20 13:36:55

标签: node.js database cassandra high-availability cassandra-3.0

我有一个如下节点设置, DC1 (Node1,Node2)和 DC2 (Node3和Node4)

我正在尝试通过NodeJs Client连接到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个条目所花费的总时间,但我观察到,它正在异步更新条目(即),我得到的执行时间为&#39; 3.755 ms&#39;但是当我在cqlsh shell中检查时,它正在缓慢更新(使用来自用户的select count(*);)注意:我已经给出了一致性&#39; cassandra.types.consistencies.quorum&#39;

Cassandra:3.0

我需要同步执行哪些更改?

谢谢, 哈利

1 个答案:

答案 0 :(得分:2)

现在你正在同时执行所有查询,因为你没有等待任何查询完成。

client.execute方法返回一个promise,因此要同步执行每个查询,您可以等待每个promise完成,然后进行下一个查询。您可以使用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