Amazon Keyspaces 允许在 Node JS 中没有所有键的情况下进行过滤

Amazon Keyspaces ALLOW FILTERING without all keys in Node JS

我有一个 table,在 AWS Keyspaces 上有两个键 KeyAKeyB

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

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

它 returns 10 行,我将查询复制到我的 node.js 项目和 运行 相同的查询,也是 returns 10 行。

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

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

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

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

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

使用允许过滤时,即使您使用的是 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 访问模式,建议您始终基于完全限定的分区键访问数据。