Cassandra索引详解
转自: https://www.cnblogs.com/bonelee/p/6278943.html
1.什么是二级索引?
我们前面已经介绍过Cassandra之中有各种Key,比如Primary Key, Cluster Key 等等。如果您对这部分概念并不熟悉,可以参考之前的文章: [Cassandra教程] (四)使用Key的正确姿势 对于Cassandra来说,一级索引就是Primary Key. 因为查询的时候,可以直接根据Key算出token然后直接获取对应的记录。
而二级索引,作为辅助索引就是为了找到一级索引。然后再通过一级索引找到真正的值
原文链接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/
2. 二级索引的原理
Cassandra之中的索引的实现相对MySQL的索引来说就要简单粗暴很多了。他实际上是 自动偷偷新创建了一张表格,同时将原始表格之中的索引字段作为新索引表的Primary Key!并且存储的值为原始数据的Primary Key
因此,什么样的数据、字段适合做二级索引,也就很清楚了。
我们翻译一下官方的解释:
参考网址: 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. 什么时候 不适合 用索引
- High-cardinality 列。 相当于这一列的值很多很多的时候。
- 因为查询了很多结果只能取出一小部分数据集
- counter 类型的列
- 删除、更新太过频繁的列
- Cassandra删除、更新数据都会给老数据设置一个Tombstone(墓碑)。当Tombstone的数据查过10K的时候,就会报错
- 再加上需要同步的更新索引表,Tombstone本身的标记也会很消耗资源
- 数据集值太多
- 原文英文没怎么看懂,这是笔者自己的理解。
- 再次强调一下:二级索引里面存储的是原始数据的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/
Cassandra索引详解的更多相关文章
- MySQL 联合索引详解
MySQL 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...
- Oracle索引详解
Oracle索引详解(二) --索引分类 Oracle 提供了大量索引选项.知道在给定条件下使用哪个选项对于一个程序的性能来说非常重要.一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程 ...
- 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)
[详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...
- MySQL 索引详解大全
什么是索引? 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2. 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结 ...
- 最全面的 MySQL 索引详解
什么是索引? 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构 ...
- ES系列七、ES-倒排索引详解
1.单词——文档矩阵 单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义.图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系. 图3-1 单词-文档矩 ...
- elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
一.分词器 1. 认识分词器 1.1 Analyzer 分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...
- elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)
一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...
- Solr系列三:solr索引详解(Schema介绍、字段定义详解、Schema API 介绍)
一.Schema介绍 1. Schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段.字段的数据类型.字段该索引存储. 2. Schema 的定义方式 ...
随机推荐
- python-虚拟环境搭建
虚拟环境 需求: --公司之有一台服务器 -目前运行这一个5年前开发的Django项目,基于1.5 -现在要基于Django2.0开发一套程序 ...
- 细说shiro之六:session管理
官网:https://shiro.apache.org/ 我们先来看一下shiro中关于Session和Session Manager的类图. 如上图所示,shiro自己定义了一个新的Session接 ...
- Char类型与Sting类型的数字字符转换时的不同点
这是在一次编程时的bug里偶然发现的一个问题.在C#中,单引号默认是char类型字符,而双引号默认是string类型字符.对于char类型的数字字符,通过强制类型转换或者convert转换,转换成的整 ...
- 群发技术-使用python3给微信好友群发消息
本文介绍如何给个人微信好友群发消息. 微信个人号中的群发助手可以一次给30个发送消息,如果要给所有所有群发,则需要自己手动发送多次,或者借助程序实现了.本文即是程序实现教程 一.原理 在微信的官方网站 ...
- MYSQL数据库安装记
这回安装数据库装,做下记录. 1.下载mysql源安装包 shell> wget http://dev.mysql.com/get/mysql57-community-release-el7-8 ...
- [C++]Linux之计算内存利用率与辨析
声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神.也欢迎大家一起探讨,交流,以共同进步,乃至成为朋友- 0.0 /* @url:http ...
- Java EE之Request部分方法使用示例
Description: ApplicationProjectName:MedicineMs login.jsp[action:login|method:get] to loginServlet Ou ...
- c/cpp枚举练习
enum aa{ am,bm }ha=bm,hb; int main(int argc, char *argv[]){ printf("%d %d",ha,am); //1 1 ; ...
- Codeforces 1065F(树形dp)
题目链接 题意 给一棵树,进行如下操作,如果当前点非叶子,则往子树移动,否则最多向上移动k次,问从根节点开始最多访问多少叶子 思路 预处理出每个点最多能“白嫖”到几个叶子,根据下一个点的状态更新最优方 ...
- html页面高度问题
首先,上图 说明 1. clientHeight大部分浏览器对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,即然是指可看到内 ...