这个问题是来自Database Administrators Stack Exchange的migrated,因为它可以在Stack Overflow上回答。Migrated上个月。我正在使用AstraDB和NodeJS构建应用程序。我喜欢Cassandra,想在我的应用程序中试用它。不幸的是,Node Cassandra驱动程序似乎性能不佳。批处理操作不起作用。删除操作也不起作用。当我在AstraDB CQL控制台中运行它们时,它们工作得很好。有什么我不知道的吗?
tyg4sfes1#
如果您在应用程序中使用CQL BATCH命令,如下所示:
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:
Client.batch()
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官方网站上。干杯!干杯!
DELETE
1条答案
按热度按时间tyg4sfes1#
如果您在应用程序中使用CQL
BATCH
命令,如下所示:那么它就不会工作,因为它被设计为只与cqlsh实用程序一起使用。
在您的应用中,您将需要使用Node.js驱动程序的
Client.batch()
API来执行批处理语句。它在一个原子操作中执行一个语句数组。下面是a sample code from the Node.js driver docs:由于您是Cassandra的新手,我应该指出CQL批处理不应该用于批量加载数据,因为它们不是关系数据库中批处理的优化方式。只有在需要为多个分区实现原子性时才使用CQL批处理。
对于问题的第二部分,由于您没有提供任何细节,因此不可能知道您在
DELETE
操作中遇到了什么问题。友情提示,您需要(a)提供一个很好的问题摘要,包括软件/组件版本,完整的错误消息+完整的堆栈跟踪;(B)描述你试图解决问题的方法,你所做的调查的细节;以及(c)复制问题的最小样本代码。如果有帮助,我写了一篇关于Asking good questions的文章,发表在Apache Cassandra官方网站上。干杯!干杯!