第二次执行时出现错误
All host(s) tried for query failed. First host tried, 127.0.0.1:9042:
ResponseError: Not enough replicas available for query at consistency
QUORUM (2 required but only 1 alive). See innerErrors.
我尝试了很多方法来解决这个问题,但没有任何帮助
我尝试将复制类从 simplestartegy 更改为 networktopologystrategy 并将复制因子更改为 3,但它也不起作用。
这是我的代码 main.js:
const cqsql = require('./cqlfunction')
let insert_cassandra = async () => {
try {
let get_id = `SELECT next_id FROM ids WHERE id_name = 'person_id'`
let last_id = await cqsql.cql_getofdb(get_id)
let next_id = last_id[0].next_id
let update_id = `UPDATE ids SET next_id = ${next_id + 1} WHERE id_name =
'person_id' IF next_id = ` + next_id
let result = await cqsql.cql_execute(update_id)
console.log(result);
} catch (error) {
console.log(error);
debugger
process.exit()
}
}
insert_cassandra()
cqlfunction.js:
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['127.0.0.1'], localDataCenter: 'datacenter1', keyspace: 'javafrm'});
exports.cql_getofdb = async (query) => {
try {
// await client.connect()
let result1 = await client.execute(query)
if (result1.rowLength > 0) {
return result1.rows
} else {
return []
}
} catch (error) {
debugger
console.error(error);
return error
}
}
exports.cql_execute = async (query) => {
try {
// await client.connect()
debugger
let result1 = await client.execute(query)
return {}
} catch (error) {
debugger
console.error(error);
return error
}
}
最佳答案
而不是更改 replication ,这将为您的数据库提供弹性,您可能想尝试不同的 consistency水平。
选择和更新操作被视为原子操作,也称为比较和设置操作 (CAS),您可以使用 Lightweight transaction. 来实现。
关于node.js - 如何在同一函数中查询 SELECT 然后 UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57799234/