cassandra 概述
摘要
本篇文章主要是介绍cassandra与其他NoSQL的区别以及自身的特点与应用场景。在关系数据库我们没必要选择数据库,通常需要适配oracle/mysql/sql server/db2 等多种数据库。但是今天的NoSQL 还不够成熟,以及每一款的NoSQL 数据库应用领域不是很宽泛,设计理念也有很大差异,所以通常我们需要为我们的应用评估究竟哪款NoSQL数据库比较合适。个人认为各个NoSQL数据库并没有谁好谁差,需要从自己的应用本身出发来考量。
NoSQL比较——华山论剑,谁与争锋
排名
从DB Engines提供的数据可以看出,cassandra目前在NoSQL数据库排名第二,仅次于与MongoDB。所有数据库中排名第七。而且从趋势图中可以看出,cassandra目前处于快速上升阶段.
性能比较
有很多大公司或者学校的科研机构对目前比较流行的NoSQL 做过详细的benchmark.综合来看,cassandra的 insert throughput 有优势,线性扩展很好(貌似最流行的mongoDB在这一方面表现的不是很好),写操作要优于读操作。但是write,read latency还是比较大,不如其他的NoSQL.具体的读者可以参考下下面的两个链接信息.
http://www.planetcassandra.org/nosql-performance-benchmarks/
http://www.csdn.net/article/2013-04-15/2814886-nosql-benchmark
cassandra案例
cassandra 试用的场景主要有5个方面
1.物联网
物联网应用中有大量的传感器和设备,需要采集环境信息,然后发送给上位机。这些信息都是时间顺序排列的,cassandra非常适合用来存储这些信息。
2.个性化
使用cassandra接收,分析。可以提供快速,低成本,可扩展的用户体验
3.message
最早facebook就是使用cassandra来存储message(不过后期好像替换掉了)
4.欺骗检测
cassandra可以是欺骗分析模式变得更快速,精确,高效
5.列表
产品目录,电影评分,cassandra可以将用户选中的诸多项目作为一个集合存储起来
目前apple拥有最大的cassandra cluster.超过75,000nodes,存储数据达到10PB.不过apple没有关于他们使用cassandra的用途的相关报告。此外netflix 也有2500 nodes的cassandra cluster,netflix 是一家流媒体公司,使用cassandra来储存用户的访问痕迹,以及log数据,能够处理10M transactions/s的并发量。netflix在cassandra的实践过程中,遇到过很多的坑,也诞生了很多优秀的解决方案,他们都通过blog,code等方式开源了一部分出来。,是后续cassandra学习者不可多得的参考资料。
国内cassandra最早的实践者应该是360,用在搜索业务上,超过了1000Nodes.然后还有宜搜一家创业公司,做手机端的搜索,规模也有250Nodes.
总体架构——会当凌绝顶,一览众山小
CAP
在NoSQL领域,CAP理论不可不提的。
C:Consistency 一致性,数据信息保持一致
A:Available 可用性
P:Partition tolerance 集群能够容纳一部分节点/数据分区 down掉的情况发生
CAP 理论指出你不可能想获得一个操作低延迟,同时使CAP 都满足。cassandra 是牺牲了一部分的C,保证
AP.从而降低延迟。当然如果你不在乎延迟,那么在cassandra中你也是可以调整的,使C也得到保证。
Constistency Level
cassandra创建keyspace的时候可以指定数据在cluster中存储几份
create keyspace test with replication={'class':'NetworkTopologyStrategy','replication_factor':3}
RF=3
在cassandra client 端,对于每次的write/read操作都可以分别指定consistency level.
如
consistency level=ONE 表示只要有一份数据返回,就认为操作成功了。
consistency level=quorum,表示只要有(n+1)/2 【向上取整】份数据返回,就认为操作成功了。n
就是上面创建Keyspace 时指定的RF
一般来说,只要保证W+R>N就可以实现一致性。W等于write写操作指定的consistency level.R等于读指定的consistency level.N等于replication_factor
值
上面我们说过,如果你不在乎延迟,那么可以调节。使consistency得到保证。在这里,你可以指定Consistency Level=ALL。
这样就是强一致性。
通过我们的写操作Consistency Level 设置为QUORUM,即超过一半的replication写人成功就认为这次写操作成功。剩下的replication我们不能
保证一定能写入成功。cassandra有其他的机制保证一条记录最终能够一致,及达到RF设置的要求。所以cassandra的一致性又称之为最终一致性。
最终一致性
1.read repair
cassandra去读数据的时候,当有read consistency level 份数据成功返回的时候就认为成功了。但是会有异步操作去检测这条record是不是都存在,如果有个Node上面丢失了这个record,就会去修复。
2.hintedhandoff repair
当某个节点down后,coordinator会将应当写入到这个down node的信息写入到自己本地hinted 文件。当检测到这个节点
恢复了,coordinator会使用hint将这些数据再写入到down node.当然,超过设定的max_hint_window_in_ms时间后,hint
文件就会被删除。down node节点的数据就不会通过这种方式来恢复了。
3.anti-entropy repair
这种方式需要手动执行。nodetool repair.
cassandra 有一个叫Merkle trees 的结构来存储每份复制数据应该保存在哪个节点。
nodetool repair 就是比较发现目前cluster与Merkle trees的差别,然后修复复制数据。
分片
数据分片的技术在关系型数据中就有,就是将相似的数据放在一起,这样查询相似的数据,就可以查询更少的物理节点/分区了,
大大减少了延迟。
cassandra 提供了灵活的分片规则,你可以指定不同的partition key来对数据分片。
默认使用org.apache.cassandra.dht.Murmur3Partitioner来实现。
create table test (
name text,
age int,
address text,
PRIMARY KEY(name,address,age)
);
test 这种表的partition key 就是name 字段,根据name的hash value值在token ring 中的范围,来存储一条记录。
这样一样name的数据会有一样的hash value.就会存储在一个partition中。
参考
http://db-engines.com/en/ranking
http://db-engines.com/en/ranking_trend
http://stackoverflow.com/questions/2892729/mongodb-vs-cassandra
cassandra 概述的更多相关文章
- cassandra权威指南读书笔记--cassandra概述
cassandra是一个开源的.分布式.去中心化.弹性可扩展.高可用.容错.可调一致性.面向行数据库,分布式设计基于Amazon Dynamo,数据模型基于Google BigTable.cassan ...
- [Redis]Redis 概述及基本使用规范.
1 nosql的简介 1.1 nosql简介 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露 ...
- MongoDB笔记(一)MongoDB概述和安装
概述 关键词:关系数据库.非关系数据库 关系数据库: 关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据.目前主流的关系数据库有oracle.SQL.ac ...
- Cassandra监控 - OpsCenter手册
注:本文转自:http://eric100.blog.51cto.com/2535573/1717792 Opscenter用户手册 1. OpsCenter简介 DataStaxOpsC ...
- [转载] HBase vs Cassandra:我们迁移系统的原因
转载自http://www.csdn.net/article/2010-11-29/282698 我的团队近来正在忙于一个全新的产品——即将发布的网络游戏www.FightMyMonster.com. ...
- Spark环境搭建(五)-----------Spark生态圈概述与Hadoop对比
Spark:快速的通用的分布式计算框架 概述和特点: 1) Speed,(开发和执行)速度快.基于内存的计算:DAG(有向无环图)的计算引擎:基于线程模型: 2)Easy of use,易用 . 多语 ...
- 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序
第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...
- Redis数据库 01概述| 五大数据类型
1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...
- {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句
MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...
随机推荐
- 前端开发必备之Chrome开发者工具(下篇)
本文介绍的 Chrome 开发者工具基于 Chrome 65版本,如果你的 Chrome 开发者工具没有下文提到的那些内容,请检查下 Chrome 的版本 本文是 前端开发必备之Chrome开发者工具 ...
- 同主机下Docker+nginx+tomcat负载均衡集群搭建
想用Docker模拟一下nginx+tomcat集群部署,今天折腾了一天,遇坑无数,终于在午夜即将到来之际将整个流程走通,借本文希望给同样遇到类似问题的小伙伴们留点线索. 主机环境是CentOS 7, ...
- 自动化运维:使用flask+mysql+highcharts搭建监控平台
1.前言 本来想做一个比较完善的监控平台,只需要做少许改动就可以直接拿来用,但是在做的过程中发现要实现这个目标所需的工作量太大,而当前的工作中对其需求又不是特别明显.所以就退而求其次,做了一个类似教程 ...
- 如何设计一款APP,才能吸引用户眼球
有APP分析机构研究表明,人们每天耗费在手机和平板上的平均时长为158分钟,其中127分钟是耗费在各类APP中,而仅有31分钟是花费在浏览网页上.随着人们对互联网的依赖性越来越强,移动APP发展迅速已 ...
- flex布局小记
越来越深刻的感到日事日毕的必要性,很久之前就做了备忘说要深刻学习flex布局,没想到一拖就拖到了这个时候! 一,什么是flex布局: flex布局即flexible box布局,也就是弹性盒模型或者弹 ...
- servlet之隐藏域
隐藏域的实现, 商品对象 package app02b;public class Customer { private int id; private String name; ...
- [HNOI 2010]Planar
Description 题库链接 给出 \(T\) 个 \(N\) 个节点 \(M\) 条边的无向图(无重边自环),并给出它们各自的哈密顿回路.分别判断每个图是否是平面图. \(T\leq 100,3 ...
- [NOI 2015]荷马史诗
Description 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由& ...
- [SHOI2016]黑暗前的幻想乡
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪 ...
- 计蒜客NOIP2017提高组模拟赛(三)day2-直线的交点
传送门 简单几何+逆序对 发现当两条直线甲乙与平板的交点在上面甲在较左的位置,那么下面甲在较右的位置就可以相交 然后把上面的位置排下序,下面离散化+树状数组即可 #include<cstdio& ...