我试图理解这两者之间的区别以及您希望使用一个而不是另一个的场景.
我的具体用例是使用cassandra作为事件摄取系统,由解释事件的分析引擎支持.
我的模型包括
我认为最常见的读取方案是在一个时间范围内获取事件,因此事件时间是聚类列.较不频繁的读取方案可能涉及按事件类型进一步过滤事件查询.
ant*_*duh 12
二级索引与我们从常规关系数据库中所知的非常相似.如果您的查询包含使用不属于主键的列值的where子句,则查找会很慢,因为必须执行完整行搜索.二级索引可以有效地为这些查询提供服务.二级索引存储为额外的表,只存储额外的数据,以便在主表中轻松找到您的方式.
所以这是一个很好的指数,我们已经知道了.到目前为止,cassandra及其分布式特性并不新鲜.
分区和聚类就是决定主表中的行如何在节点之间传播.这是cassandara独有的,因为它决定了数据的分布.因此,主键至少包含一列.主键中的第一列用作分区键.分区键用于决定存储行的节点.如果主键具有其他列,则列用于在给定节点上聚类数据 - 数据通过聚类列以节点顺序存储在节点上.
这个问题有更多关于聚类列的细节: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使用主键定义中的第一个列名作为分区键.
...
对于播放列表表,song_order是聚类列.每个分区的数据由主键定义的其余一列或多列聚类.在物理节点上,当基于聚类列按顺序存储分区键的行时
| 归档时间: |
|
| 查看次数: |
7004 次 |
| 最近记录: |