cassandra 批处理,删除操作在NodeJS应用程序中不起作用

mlnl4t2r  于 8个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(80)

这个问题是来自Database Administrators Stack Exchange的migrated,因为它可以在Stack Overflow上回答。Migrated上个月。
我正在使用AstraDB和NodeJS构建应用程序。我喜欢Cassandra,想在我的应用程序中试用它。
不幸的是,Node Cassandra驱动程序似乎性能不佳。批处理操作不起作用。删除操作也不起作用。当我在AstraDB CQL控制台中运行它们时,它们工作得很好。有什么我不知道的吗?

tyg4sfes

tyg4sfes1#

如果您在应用程序中使用CQL BATCH命令,如下所示:

BEGIN BATCH
    INSERT INTO ... ;
    UPDATE ... ;
    DELETE ... FROM ... ;
APPLY BATCH;

那么它就不会工作,因为它被设计为只与cqlsh实用程序一起使用。
在您的应用中,您将需要使用Node.js驱动程序的Client.batch() API来执行批处理语句。它在一个原子操作中执行一个语句数组。下面是a sample code from the Node.js driver docs

const query1 = 'UPDATE user_profiles SET email = ? WHERE key = ?';
const query2 = 'INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)';
const queries = [
   { query: query1, params: [emailAddress, 'hendrix'] },
   { query: query2, params: ['hendrix', 'Changed email', new Date()] } 
];
// Promise-based call
client.batch(queries, { prepare: true })
  .then(function() {
    // All queries have been executed successfully
  })
  .catch(function(err) {
    // None of the changes have been applied
  });

由于您是Cassandra的新手,我应该指出CQL批处理不应该用于批量加载数据,因为它们不是关系数据库中批处理的优化方式。只有在需要为多个分区实现原子性时才使用CQL批处理。
对于问题的第二部分,由于您没有提供任何细节,因此不可能知道您在DELETE操作中遇到了什么问题。
友情提示,您需要(a)提供一个很好的问题摘要,包括软件/组件版本,完整的错误消息+完整的堆栈跟踪;(B)描述你试图解决问题的方法,你所做的调查的细节;以及(c)复制问题的最小样本代码。如果有帮助,我写了一篇关于Asking good questions的文章,发表在Apache Cassandra官方网站上。干杯!干杯!

相关问题