摘要

本篇文章主要是介绍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

http://www.planetcassandra.org/apache-cassandra-use-cases/

cassandra 概述相关推荐

  1. java:Cassandra入门与实战——上

    一.数据存储方式和NoSQL 1.1 数据存储方式 互联网时代各种数据存储方式层出不穷,有传统的关系性数据库如:MySQL.Oracle等,:有全文检索框架如:ElasticSearch.Solr:有 ...

  2. NoSQL概述-从Mongo和Cassandra谈谈NoSQL

    分两部分介绍NoSQL - NoSQL 概览 1. RDBMS VS NoSQL 2. NoSQL 种类 3. NoSQL 的一些名词 - 结合Mongo,Cassandra谈谈NoSQL的设计和应用 ...

  3. 利用Kafka和Cassandra构建实时异常检测实验

    导言 异常检测是一种跨行业的方法,用于发现事件流中的异常事件 - 它适用于物联网传感器,财务欺诈检测,安全性,威胁检测,数字广告欺诈以及许多其他应用程序.此类系统检查流数据以检查异常或不规则,并在检测 ...

  4. Spark详解(三):Spark编程模型(RDD概述)

    1. RDD概述 RDD是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现.RDD是Spark最核心的东西,它表示已被分区,不可变的并能够被并行 ...

  5. ClickHouse数据分析列式数据库概述

    一. 概述 随着物联网IOT时代的来临,IOT设备感知和报警存储的数据越来越大,有用的价值数据需要数据分析师去分析.大数据分析成了非常重要的环节.当然近两年开启的开源大潮,为大数据分析工程师提供了十分 ...

  6. Spark之Spark概述

    Spark之Spark概述 什么是Spark Spark内置项目介绍 Spark特点 Spark的用户和用途 1. 什么是Spark Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生 ...

  7. 【NoSQL】NoSQL入门和概述 - 笔记

    NoSQL入门和概述 BSON BSON 是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式.它是一种二进制表示形式,能用来表示简单数据结构.关联数组(MongoDB中 ...

  8. cassandra数据备份_Cassandra中的数据建模

    cassandra数据备份 在关系数据模型中,我们为域中的每个对象建模关系/表. 对于Cassandra,情况并非如此.本文将详细介绍在Cassandra中进行数据建模时需要考虑的所有方面. 以下是C ...

  9. Cassandra中的数据建模

    在关系数据模型中,我们为域中的每个对象建模关系/表. 对于Cassandra,情况并非如此.本文将详细介绍在Cassandra中进行数据建模时需要考虑的所有方面. 以下是Cassandra数据建模的粗 ...

最新文章

  1. Activity Service 数据相互操作
  2. html5数据提交到mysql,保存html5画布作为数据到mysql数据库
  3. CNN结构:场景分割与Relation Network
  4. 初识机器学习——吴恩达《Machine Learning》学习笔记(八)
  5. 使用剪切板[3]: SetComponent、GetComponent
  6. Monkey稳定性测试,多少还是要了解一下的(上)
  7. RESTful Webservice 和 SOAP Webserivce 对比及区别
  8. leetcode—17.递归题目python解答
  9. 洛谷P2671 求和 数学 前缀和
  10. 用jsp编写一个猜26个小写英文字母的web小游戏
  11. [FFMPEG播放器]结合FFMPEG使用SDL2渲染ASS字幕
  12. TreeSet 和 TreeMap 排序
  13. mipi的dsi全称_MIPI-DSI/CSI协议介绍
  14. C++操作题-定义并实现一个银行类(Bank)
  15. react Hook useContext()
  16. [矩阵论] 谱半径小于1,则I-A可逆
  17. yunfile php,yunfile下载器
  18. 人工智能生态交易平台
  19. 一维中值、均值、高斯滤波的MATLBA实现
  20. 科普:互联网的盈利模式

热门文章

  1. Pytest系列——allure(原理)之allure工具与Pytest测试框架集成
  2. 三大管理法则—鱼缸法则、木桶效应、热炉法则
  3. SPSS做主成分分析
  4. 北工大计算机网络95分复习——【第三章 数据链路层】
  5. LeetCode题解(1079):活字印刷(Python)
  6. 【ManageEngine】IT服务管理(ITSM)指南
  7. 教你修改网卡物理地址(MAC)
  8. Zeal离线文档下载,以及报错解决方法
  9. 文献阅读-Clinical and Biological subtypes of B-cell lymphoma revealed by microenvironment signature
  10. Qt 获取硬盘可用字节