【问题标题】:Is ALLOW FILTERING in Cassandra for following query efficient?Cassandra 中的 ALLOW FILTERING 是否可以有效地跟踪查询?
【发布时间】:2017-05-12 20:49:04
【问题描述】:

我有一张这样的桌子:

CREATE TABLE IF NOT EXISTS Posts (
    idObject int,
    objectType text,
    idParent uuid,
    id uuid,
    idResolution uuid,
    PRIMARY KEY ((idObject, objectType, idParent), id)
);

现在看看下面的查询:

SELECT * FROM POSTS WHERE idobject = 1 AND objectType = 'COURSE' AND idParent = 00000000-0000-0000-0000-000000000000 AND idResolution = 00000000-0000-0000-0000-000000000000 ALLOW FILTERING

现在分区键是完全已知的,所以如果我使用ALLOW FILTERING,是否会出现任何性能问题,因为过滤将在已知的单个分区中完成?

【问题讨论】:

  • 从性能的角度来看,为 idResolution 列添加二级索引可能是 ALLOW FILTERING 的一个很好的选择。

标签: performance cassandra nosql


【解决方案1】:

这取决于特定分区中有多少行,以及它们是否分布在多个 SSTable 文件中。但是就像你说的,这个查询保证限制在单个节点上,所以可能没问题。

为了确定,我会用 cassandra-stress 对其进行测试。这样您就可以知道您的应用程序是否可以接受查询延迟。

【讨论】:

  • 谢谢@Aaron。你能评论一下这个查询将被限制在一个节点上吗?据我说应该是因为完整的分区键是受限制的并且是已知的。
【解决方案2】:

对于大分区,您最好使用 DataStax 驱动程序分页 API。 https://docs.datastax.com/en/developer/java-driver/2.1/manual/paging/

一个巨大的分区可能会出现一些与应用程序相关的问题,因为您请求的大小不受限制。保持安全并继续前进。

【讨论】:

  • 谢谢帕特里克!所以如果我使用分页,那么这个查询的性能会很好吗?
  • 性能将与您获取的页面大小有关,而不是与整个分区大小有关。鉴于此,您应该会看到更好的性能。所以这意味着你应该密切关注你的 fetch size 作为性能调整的考虑因素。
猜你喜欢
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多