【问题标题】:Rest API Cassandra ALLOW FILTERINGRest API Cassandra 允许过滤
【发布时间】:2023-03-10 20:40:01
【问题描述】:

我有一个 DataStax Astra 数据库,我有这个示例来说明如何获取具有特定用户名的用户:

curl --request GET \
    --url https://${ASTRA_DB_ID}-${ASTRA_DB_REGION}.apps.astra.datastax.com/api/rest/v2/keyspaces/${ASTRA_DB_KEYSPACE}/user?where=\{"user_username":\{"$eq":"'+*username_value_here*+'"\}\}' \
    --header "x-cassandra-token: ${ASTRA_DB_APPLICATION_TOKEN}"

由于 Cassandra,我没有选项允许过滤:

{"description":"Bad request: org.apache.cassandra.stargate.exceptions.InvalidRequestException: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING","code":400}

我在任何地方都找不到如何在 curl 命令中启用此选项,所以问题是我如何编写这个(如果可能的话)或者有更好的选择。欢迎任何帮助。

【问题讨论】:

  • ALLOW FILTERING 在大多数情况下是最糟糕的选择
  • @AlexOtt 如果我们在一个没有复杂查询的单个节点中有一个小型数据库(9-10 百万行)怎么办,使用ALLOW FILTERING 是不是一个坏主意?
  • 您仍然需要扫描所有数据等。

标签: database cassandra datastax datastax-astra stargate-oss


【解决方案1】:

REST API 当前不支持ALLOW FILTERING,但您还有其他一些选择。

  • 如果用户名在您的系统中是唯一的,并且您能够更改数据模型,您可以将 user_username 设为分区键。这将允许您按该列进行查询,而无需过滤。
  • 如果您无法更改数据模型,另一种选择是在 user_username 上添加索引。该索引将使您能够维护现有的访问模式,同时还允许您通过用户名进行查询。

【讨论】:

  • 非常感谢,我会尝试使用分区键。
猜你喜欢
  • 2017-07-23
  • 2019-01-13
  • 2015-05-07
  • 2020-10-12
  • 2021-09-10
  • 2016-08-14
  • 2017-12-20
  • 2013-09-02
  • 1970-01-01
相关资源
最近更新 更多