gpt4 book ai didi

cassandra - cassandra中的聚集列和二级索引有什么区别

转载 作者:行者123 更新时间:2023-12-03 11:43:10 26 4
gpt4 key购买 nike

我试图了解这两者之间的区别以及您更喜欢使用其中一种的情况。

我的具体用例是使用 cassandra 作为由解释事件的分析引擎支持的事件摄取系统。

我的模型包括

  • 事件 ID(分区键)
  • 事件时间(聚类列)
  • 事件类型(我不确定是使用聚集列还是二级索引)

  • 我认为最常见的读取场景是获取某个时间范围内的事件,因此事件时间是聚类列。不太频繁的读取场景可能涉及按事件类型进一步过滤事件查询。

    最佳答案

    二级索引与我们从常规关系数据库中了解到的非常相似。如果查询的 where 子句使用不属于主键的列值,则查找会很慢,因为必须执行完整的行搜索。二级索引可以有效地为此类查询提供服务。二级索引存储为额外的表,只存储额外的数据,以便在主表中轻松找到您的方式。

    所以这是一个很好的索引,我们已经知道了。到目前为止,cassandra 及其分布式特性并没有什么新鲜事。

    分区和集群就是决定主表中的行如何在节点之间分布。这是 cassandara 独有的,因为它决定了数据的分布。因此,主键至少包含一列。主键中的第一列用作分区键。分区键用于决定存储行的节点。如果主键有额外的列,则这些列用于将给定节点上的数据聚类 - 数据通过聚类列以字典顺序存储在节点上。

    这个问题有更多关于聚类列的细节:Clustering Keys in Cassandra

    因此,给定列 X 上的索引进行查找 X --> primary key高效的。分区键(主键中的第一列)决定了一行存储在哪个节点上。聚类列(主键中的附加列)确定行在其指定节点上的存储顺序。

    所以你的直觉听起来是对的 - 事件 ID 大概是唯一的,所以非常适合构建主键。事件时间是对给定节点上的磁盘上的行进行排序的好方法。

    如果你从来不需要按事件类型查找数据,例如,从来没有像 SELECT * FROM Events WHERE Type = Warning 这样的查询,那么您不需要额外的索引,但您对分区的需求不会改变。索引使使用不同谓词的查询变得容易。由于您提到您确实计划执行这样的查询,因此您实际上可能需要在 EventType 列上建立索引。

    查看 cassandra 文档:http://www.datastax.com/documentation/cql/3.0/cql/ddl/ddl_compound_keys_c.html

    Cassandra uses the first column name in the primary key definition as the partition key.
    ...
    In the case of the playlists table, the song_order is the clustering column. The data for each partition is clustered by the remaining column or columns of the primary key definition. On a physical node, when rows for a partition key are stored in order based on the clustering columns

    关于cassandra - cassandra中的聚集列和二级索引有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24622511/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com