C: Consistency 一致性

• A: Availability 可用性(指的是快速获取数据)

• P: Tolerance of network Partition 分区容忍性(分布式)

10年前,Eric Brewer教授指出了著名的CAP理论,后来Seth Gilbert 和 Nancy lynch两人证明了CAP理论的正确性。CAP理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。

BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性: BasicallyAvailable基本可用。支持分区失败(e.g. sharding碎片划分数据库) Soft state软状态状态可以有一段时间不同步,异步。 Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时一致。

Cassandra是什么

Cassandra 的名称来源于希腊神话,是特洛伊的一位悲剧性的女先知的名字,因此项目的Logo是一只放光的眼睛。

Cassandra是一个高可靠的大规模分布式存储系统。高度可伸缩的、一致的、分布式的结构化key-value存储方案,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。2007由facebook开发,2009年成为Apache的孵化项目。

Cassandra使用了Google BigTable的数据模型,与面向行的传统的关系型数据库不同,这是一种面向列的数据库,列被组织成为列族(Column Family),在数据库中增加一列非常方便。对于搜索和一般的结构化数据存储,这个结构足够丰富和有效。

Cassandra的系统架构与Dynamo一脉相承,是基于O(1)DHT(分布式哈希表)的完全P2P架构,与传统的基于Sharding的数据库集群相比,Cassandra可以几乎无缝地加入或删除节点,非常适于对于节点规模变化比较快的应用场景。

Cassandra的数据会写入多个节点,来保证数据的可靠性,在一致性、可用性和网络分区耐受能力(CAP)的折衷问题上,Cassandra比较灵活,用户在读取时可以指定要求所有副本一致(高一致性)、读到一个副本即可(高可用性)或是通过选举来确认多数副本一致即可(折衷)。这样,Cassandra可以适用于有节点、网络失效,以及多数据中心的场景。

3. Cassandra特点

总结Cassandra的主要特点如下:

(1) 列表数据结构

在混合模式可以将超级列添加到5维的分布式Key-Value存储系统。

(2) 模式灵活

使用Cassandra,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。

(3) 真正的可扩展性

Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以增加动态添加节点即可。你不必重启任何进程,改变应用查询,或手动迁移任何数据。

(4) 多数据中心识别

你可以调整节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。

(5) 范围查询

如果你不喜欢全部的键值查询,则可以设置键的范围来查询。

(6) 分布式写操作

你以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。

吸引我选择Cassandra作为NoSQL的原因主要有如下三点:

极高的读写性能

Cassandra写数据时,首先会将请求写入Commit Log以确保数据不会丢失,然后再写入内存中的Memtable,超过内存容量后再将内存中的数据刷到磁盘的SSTable,并定期异步对SSTable做数据合并(Compaction)以减少数据读取时的查询时间。因为写入操作只涉及到顺序写入和内存操作,因此有非常高的写入性能。而进行读操作时,Cassandra支持像LevelDB一样的实现机制,数据分层存储,将热点数据放在Memtable和相对小的SSTable中,所以能实现非常高的读性能。

简单的部署结构

相对Hbase等的主从结构,Cassandra是去中心化的P2P结构,所有节点完全一样没有单点,对小公司来说,我完全可以选择数据复制份数为2,先用两三台机器把Cassandra搭起来,既能保证数据的可靠性也方便今后机器的扩展,而Hbase起码得四五台机器吧。以后为了更好地支持客户可能需要在多个地方建立数据中心,而Cassandra对多数据中心的支持也很好,可以方便地部署多个数据中心,今早还看到一个俄罗斯最大电信公司的案例。另外我们的机器现在托管在一个小机房里,万一到时机器满了无法增加要考虑搬迁机房时,使用多数据中心的方式也能做到无缝迁移。

和Spark的结合

Cassandra作为一个底层的存储系统,能够方便地和Spark集成进行实时计算,这一点对我们的业务场景有致命的吸引力,我看到国外有很多使用案例就是用Spark+Cassandra来实现Velocity计算,比如Ooyala。

有时间再细看下其架构和底层原理:

http://blog.jobbole.com/98970/

http://zqhxuyuan.github.io/2015/08/25/2015-08-25-Cassandra-Architecture/

转载于:https://www.cnblogs.com/bonelee/p/6211661.html

Cassandra——类似levelDB的基于p2p架构的分布式NOSQL数据库相关推荐

  1. RavenDB:基于Windows/.NET平台的NoSQL数据库

    众所周知,NoSQL运动旨在成为大数据时代传统关系数据库管理系统的替代品.如今Microsoft对开源的态度有所转变,RavenDB就是很好的例子.Microsoft对RavenDB(NoSQL数据库 ...

  2. 基于ARM架构下的PI数据库远程存储

        随着信息技术的进步,计算机技术在工厂的控制层和管理层都得到了充分和广泛的应用.而当计算机技术的应用要求进一部深入和提升时,势必要求把生产控制层和管理层连接起来.实时数据库系统能够及时地把控制层 ...

  3. cassandra 数据库_使用Apache Cassandra构建分布式NoSQL数据库

    cassandra 数据库 最近,我急于获得一个三节点的Apache Cassandra集群,该集群的复制因子为2,可以用于开发工作. 我几乎不知道这意味着什么,但需要Swift解决-这是系统管理员工 ...

  4. Remote Dictionary Server(Redis)——基于 KV 结构的作为 Cache 使用的 NoSQL 数据库管理系统

    Redis 是基于key-value存储结构的NoSQL 数据库,是内存数据库. 一.非关系型数据库NoSQL 和关系型数据库RDBMS 1)什么是关系型数据库和非关系型数据库? 答: 简单的说,关系 ...

  5. 如何基于LSM-tree架构实现一写多读

    简介:传统MySQL基于binlog复制的主备架构有它的局限性,包括存储空间有限,备份恢复慢,主备复制延迟等问题,为了解决用户对于云上RDS(X-Engine)大容量存储,以及弹性伸缩的诉求,Pola ...

  6. HBase、Cassandra、LevelDB、RocksDB底层数据结构是什么?

    大家好,我是球哥.没啥球用的球,目前在965互联网公司做架构.今天分享开源数据框架中最最常用的底层数据结构. 一.概述 当前已被广泛运用在一些开源的数据产品中,如:HBase.Cassandra.Le ...

  7. 基于p2p的sip电话系统

    摘要 p2p系统天生拥有高扩展性.健壮性和高容错性的特点,这些特点得益于系统没有中央服务器并且网络是自己管理的这种结构.本系统实现了在 p2p系统中较长的延迟的代价下定位感兴趣的资源.internet ...

  8. Kubernetes——基于容器技术的分布式架构领先方案,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩...

    1.Kubernetes介绍 1.1 简介 Kubernetes是什么? 首先,它是一个全新的基于容器技术的分布式架构领先方案. 其次,它是一个开放的开发平台. 最后,它是一个完备的分布式系统支撑平台 ...

  9. Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据...

    转自:http://www.letiantian.me/2014-06-16-dynamo-algorithm-protocol/ Dynamo是Amazon的一个分布式的键值系统,P2P架构,没有主 ...

最新文章

  1. 汉字转拼音,中文拼音排序器
  2. MIT微软为AI量身打造了一套leetcode编程题
  3. 一个关于在Fedora下安装jdk的问题
  4. 几种TCP连接中出现RST的情况
  5. 我是如何从一个新闻狗转行成为程序猿的?
  6. 花体英文字帖pdf可打印_考研政治 | 马原24个主观题答题原理!PDF可打印!
  7. CodeForces - 1109A Sasha and a Bit of Relax(思维+异或和,好题)
  8. LEX和YACC的使用(例子)
  9. 剑指offer---用两个栈实现队列
  10. 死于非命的中国亿万富翁们 1
  11. java 页面级缓存_用CashFilter实现页面级缓存实践
  12. xtrabackup部署以及使用
  13. UIProgressView的详细使用
  14. java的科学记数法_java – 为什么输出是科学记数法?
  15. poj 2356 Find a multiple dfs 爆搜!!!!
  16. sentinel——SLC数据下载、DEM数据下载拼接、精密轨道数据下载方法
  17. 有什么推荐的软件工程本科的毕业设计题目嘛?
  18. 交通信号灯控制器C语言代码,交通信号灯控制器代码及说明.doc
  19. 各种存储硬件(Memery)区分(ROM、RAM、DRAM、SRAM和FLASH)
  20. 使用golang链接达梦数据库

热门文章

  1. app导出excel_Excel教程:Excel_VBA你给我走开!
  2. 首次使用计算机鼠标键盘不能用,解决方案:如何解决无法使用计算机鼠标和键盘的问题?如果启动后无法使用鼠标和键盘该怎么办?...
  3. 大唐波斯将军 机器人_参观长沙博物馆“粟特人在大唐”文物展,感叹多元文明的交融互鉴...
  4. startservice方式启动服务
  5. Windows环境下配置环境变量
  6. linux c++开发环境_使用 VM VirtualBox 搭建完善的Linux开发环境
  7. group by是否会用到索引_平时工作中经常用到的SQL,这些你都知道吗?
  8. php bootstraptable分页,php+bootstrap+dataTable+jquery分页列表
  9. Java魂斗罗1234合集_《魂斗罗》正统续作1234部介绍,别再搞错喽!
  10. 珠海网络推广浅析该如何高效的提高搜索引擎的抓取频次?