问题标签 [datastax-node-driver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
192 浏览

node.js - cassandra-driver(Node.js)中的同步查询执行问题

我正在尝试使用cassandra-driverdatastax 维护的节点实现在运行时在其中创建键空间和表。

在文档(此处)中指出,有一种同步方式来调用execute()应该阻止执行的方法,直到返回查询的结果。

我认为在这个url链接的示例(Node.js 的同步和异步部分)仅用于异步执行,因为它们在返回结果之前不会阻塞。

我遗漏了什么或者无法使用 Node.js 驱动程序实现查询的同步执行?

0 投票
1 回答
511 浏览

cassandra - Cassandra nodejs驱动,如何正确更新数据

我是 Cassandra 的新手,我不太清楚我的数据模型是否正确。我试图根据我想在我的应用程序中进行的查询来创建它。我想创建和更新书籍对象,我想按作者和出版日期查找书籍。我正在使用适用于 Cassandra 的 DataStax Node.js 驱动程序(使用 Typescript),到目前为止,这是我的架构:

将 author_id 和 date_published 作为主键,我能够使用 nodejs 驱动程序并在 DataStax 文档的帮助下进行查询:

上面的代码运行良好;我可以按作者和在出版时指定日期范围来获取书籍列表。bookMapper 正在映射两个表(books_by_author、books),所以我使用它来进行所有数据库查询。

然后我遇到了问题。我在我的应用程序中创建了一本书,但我给了它错误的发布日期,我想更改它。所以,为了看看它是如何完成的,我创建了一个单元测试,将一本书保存到数据库中,然后尝试使用 bookMapper.update 来更新这本书的 datePublished 属性。这是我试图实现的一些伪代码:

如您所见,更新实际上为数据库创建了一个新书行,现在我有 2 本书而不是 1 本书。我不知道更新该数据的正确方法是什么。我尝试使用批处理:

使用批处理来删除和插入似乎有效,因此 remove 是对 DB 的最后一次调用,我将这些语句添加到我的更改数组中的顺序并不重要,它会删除导致我最后一个 get 语句返回 null 的书。

我想使用批处理来使操作原子化。我不想最终陷入这样一种情况:我首先删除现有书籍,然后在没有批处理的情况下将新书插入单独的数据库调用中,因为如果在删除之后但插入之前发生一些错误,那么我将丢失我的书籍数据数据库。

我的问题:当更新的属性恰好是主键的一部分时,更新书籍数据的正确方法是什么?谢谢你。

0 投票
2 回答
217 浏览

node.js - Cassandra Node.js 驱动程序 - 可以切换允许过滤吗?

我们的团队最近从自托管 Cassandra 切换到 AWS Keyspaces。尽管“小册子”提到了 Cassandra 的兼容性,但我们实际上正在失去一些 Cassandra 最关键的功能(包括重要的功能 - UDT、物化视图和二级索引)。

然而,这种转换对我们来说仍然是值得的,因为对于一个小团队来说,自我维护的 Cassandra 开销太大。

作为迁移计划的一部分,我们决定在绝对需要的地方用自我维护的表替换物化视图,其余部分用ALLOW FILTERING我们认为在接下来的 6-12 个月内对性能的影响很小的地方,希望 Keyspaces 能够添加支持 MV 或通过使用 Spark、Elassandra 或类似工具实现搜索端点。

我们正在使用带有对象映射的 Node.js Datastax Cassandra 驱动程序。因此,我们希望保持这种方式,而不是使用原始 CQL 查询。但是,当尝试使用映射器运行查询时,我们似乎无法使该ALLOW FILTERING功能正常工作。

我们在 Node.js 和 express 中使用以下设置。

到目前为止,一切都很好。

问题是映射器方法似乎不支持“允许过滤”。

所以,这行得通 -

但是,在使用映射器时,似乎没有办法切换允许过滤选项

理想情况下,会有一个运行选项

搜索文档不会显示任何相关选项。

任何帮助将不胜感激。

0 投票
0 回答
75 浏览

node.js - 节点 JS OperationTimedOutError,NoHostAvailableError:插入 Cassandra 时

我有一个使用标准虚拟机在 GCP 中运行的 3 节点 Cassandra (4.0.1) 集群。每台机器 2 个 CPU 8gb 内存。复制因子为 2 并使用简单的策略。我有一个插入数据的节点进程,Cassandra 将在没有可用连接或插入超时的情况下出错。峰值事务大约是 60/s,我对具有 1 个 CPU 和 4gb 的 Postgres 服务器进行完全相同的插入,没有问题。我增加了虚拟机的大小,但仍然存在问题。我读过的所有内容都表明它应该能够毫无问题地处理这个问题。我只创建一个连接。我使用准备好的语句。

我检查了日志,运行 nodetool 并找不到任何问题或配置问题。在这一点上,任何见解都会有所帮助。要清楚......大约 95% 的插入成功。