带有 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。
我有一个如下所示的节点设置, 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。