【问题标题】:Amazon Keyspaces ALLOW FILTERING without all keys in Node JSAmazon Keyspaces 允许在 Node JS 中没有所有键的情况下进行过滤
【发布时间】:2021-12-24 15:43:46
【问题描述】:

我在 AWS Keyspaces 上有一个带有两个键 KeyAKeyB 的表。

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

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

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

现在我只想按 ONE 键进行过滤,我在 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

【问题讨论】:

    标签: node.js amazon-web-services cassandra amazon-keyspaces


    【解决方案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 访问模式,它建议您始终基于完全限定的分区键访问数据。

    【讨论】:

    • 谢谢,这解决了我的问题,我知道这不是 cassandra 的工作方式,而是我被要求的要求,并且 KeyB 的可能值不可用。
    • 可以将 KeyA 作为分区键,将 KeyB 作为集群值。这样您就可以同时支持这两种访问模式。
    猜你喜欢
    • 2022-08-12
    • 2020-07-08
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2023-03-12
    • 2017-12-27
    相关资源
    最近更新 更多