【问题标题】:Cassandra partition key for simple queries用于简单查询的 Cassandra 分区键
【发布时间】:2017-05-19 20:52:59
【问题描述】:

我正在尝试学习 Cassandra,但有一个关于分区/集群键的问题。

我有一个存储股票数据的表,例如行业分支、过去 6/12 个月的表现、名称等。

表格如下所示:

-kurs 代表当前股价
-perf12 表示过去 12 个月的性能,perf 6 表示过去 6 个月的性能。
-branch是行业的分支。

现在我想尽可能高效地执行以下查询(性能):

-读取/写入当前股价
- 计算同一业务部门中所有公司的平均股价。

您建议我使用哪种分区键?

非常感谢大家

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    这取决于您提出请求所需的信息。如果您知道分支和公司名称,您可以将主键:分支作为分区键,将名称作为集群键。

    primary key ((branch), name)
    

    这样您就可以进行第一次查询:

    select kurs from table where branch =? and name =?;
    

    第二个你可以只指定分区键并创建一个聚合函数来返回平均值:

    select avg(kurs) from table where branch = ?
    

    或在您的客户端代码处计算。

    看看Creating User-Defined Aggregate Function (UDA)Cassandra Aggregates - min, max, avg, group

    【讨论】:

    • 感谢朋友的回答。与仅将 id 作为主键相比,这是否具有任何性能优势?我知道所需功能的 cql 查询,只是分区键具有性能优势
    • 分区键将发挥重要作用:它将定义您的数据将存储在哪个节点上。此外,我上面提到的查询不起作用,您必须重新设计数据。但我认为该分支将是一个很好的方法,因为您将拥有来自同一分支的同一节点的公司,因此两个查询都会具有良好的性能。但是,如果分支机构中的公司数量不平衡(分支机构中的公司太多而其他公司中只有少数),则可能会导致节点拥有大量数据而其他节点则更少。
    猜你喜欢
    • 2019-03-23
    • 2015-02-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2016-03-22
    相关资源
    最近更新 更多