node.js - 如何在同一函数中查询 SELECT 然后 UPDATE

标签 node.js cassandra

第二次执行时出现错误

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/

相关文章:

node.js - 谷歌云存储 + Nodejs : How to delete a folder and all its content

node.js - 按关联模型排序时,Sequelize 抛出错误 "Unable to find a valid association for model x"

java - 如何将 Java Long 转换为 Cassandra 的 byte[]?

spring-boot - 如何在 springboot 应用程序中启用 Cassandra CqlSession Metrics

javascript - 重定向到 Node js Express 中的新页面?

javascript - 稍后捕获 Promise 拒绝

javascript - 未知长度数组用于按顺序执行 promise 的功能

java - 创建表时 Cassandra 'timestamp' InvalidQueryException

Cassandra:每个键空间的客户数据

php - 在 ubuntu 上安装 php datastax 驱动