Cassandra索引详解

转自: https://www.cnblogs.com/bonelee/p/6278943.htmlhtml

1.什么是二级索引?优化

咱们前面已经介绍过Cassandra之中有各类Key,好比Primary Key, Cluster Key 等等。若是您对这部分概念并不熟悉,能够参考以前的文章: [Cassandra教程] (四)使用Key的正确姿式 对于Cassandra来讲,一级索引就是Primary Key. 由于查询的时候,能够直接根据Key算出token而后直接获取对应的记录。spa

而二级索引,做为辅助索引就是为了找到一级索引。而后再经过一级索引找到真正的值.net

原文连接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/翻译

2. 二级索引的原理3d

Cassandra之中的索引的实现相对MySQL的索引来讲就要简单粗暴不少了。他其实是 自动偷偷新建立了一张表格,同时将原始表格之中的索引字段做为新索引表的Primary Key!而且存储的值为原始数据的Primary Keycode

所以,什么样的数据、字段适合作二级索引,也就很清楚了。htm

咱们翻译一下官方的解释:blog

参考网址: https://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_when_use_index_c.html教程

原文连接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

3. 何时 不适合 用索引

  1. High-cardinality 列。 至关于这一列的值不少不少的时候。
    1. 由于查询了不少结果只能取出一小部分数据集
  2. counter 类型的列
  3. 删除、更新太过频繁的列
    1. Cassandra删除、更新数据都会给老数据设置一个Tombstone(墓碑)。当Tombstone的数据查过10K的时候,就会报错
    2. 再加上须要同步的更新索引表,Tombstone自己的标记也会很消耗资源
  4. 数据集值太多
    1. 原文英文没怎么看懂,这是笔者本身的理解。
    2. 再次强调一下:二级索引里面存储的是原始数据的Primary Key。所以若是一次查询的数据过多就会遇到超时异常

总结一下:

就是索引对应的数据值不能太多也不能太少。 太多就超时,太少就浪费资源(须要建立太多的Primary Key)。 同时索引的列还要稳定,不能频繁的删除或者更新~

因此我的认为, 能不用Cassandra之中的索引就不要用 ,还不如本身显示的建立一个

原文连接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

4. 如何使用索引

索引的使用很是简单,参考下面的代码以及相应的注释:

-- 建立索引 CREATE INDEX artist_names ON playlists( artist );   -- 查询 SELECT * FROM playlists WHERE artist = 'Fu Manchu';   -- 优化查询 SELECT * FROM playlists WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204 AND artist = 'Fu Manchu';

原文连接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

相关文章
相关标签/搜索