1

我有一个带有两个键KeyAKeyBAWS Keyspaces 的表。

我在 AWS 控制台上打开 CQL 编辑器并运行查询:

SELECT fields FROM table WHERE KeyA = 'value' AND KeyB = 'value' LIMIT 10 ALLOW FILTERING

它返回 10 行,我将查询复制到我的 node.js 项目并运行相同的查询,也返回 10 行。

现在我只想按一个键进行过滤,我在 AWS 控制台上打开一个 CQL 编辑器并运行查询:

SELECT fields FROM table WHERE KeyA = 'value' LIMIT 10 ALLOW FILTERING

并返回 10 个字段,现在我将相同的查询复制并粘贴到我的节点项目中,但这次返回 0 行。

我相信我的 node.js 上缺少一些配置?是图书馆的问题?AWS 问题?

我正在使用 Node v14.16.1,cassandra-driver v4.6.1

4

1 回答 1

3

使用允许过滤时,即使您使用的限制为 10,您也应该实现分页。

Amazon Keyspaces 根据它为处理请求而读取的行数对结果进行分页,而不是根据结果集中返回的行数。因此,某些页面包含的行数可能少于您在 PAGE SIZE 中为筛选查询指定的行数。此外,Amazon Keyspaces 在读取 1 MB 数据后自动对结果进行分页,为客户提供一致的个位数毫秒读取性能。

由于 Amazon Keyspaces 根据为处理请求而读取的行数而不是结果集中返回的行数对结果进行分页,因此如果您正在运行过滤查询,某些页面可能不包含任何行。

https://docs.aws.amazon.com/keyspaces/latest/devguide/working-with-queries.html#paginating-results

client.eachRow(query, parameters, { prepare: true, autoPage : true }, function(n, row) {
   // Invoked per each row in all the pages
}, callback);

最后,完整扫描不是典型的 Cassandra 访问模式,它建议您始终基于完全限定的分区键访问数据。

于 2021-11-12T21:08:09.020 回答