我有一个如下节点设置, 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
我需要同步执行哪些更改?
谢谢, 哈利
答案 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。