Apache Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身。

Apache Cassandra 是一套开源分布式 NoSQL数据库系统。它最初由 Facebook 开发,用于储存收件箱等简单格式数据,集 Google BigTable 的数据模型与 Amazon Dynamo 的完全分布式架构于一身。

Facebook 于 2008 将 Cassandra 开源,此后,由于 Cassandra 良好的可扩展性和性能,被 Apple, Comcast,Instagram, Spotify, eBay, Rackspace, Netflix 等知名网站所采用,成为了一种流行的分布式结构化数据存储方案。

在数据库排行榜“DB-Engines Ranking”中,Cassandra 排在第七位,是非关系型数据库中排名第二高的(仅次于 MongoDB)。

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

这个项目由就职于 Facebook 的 Avinash Lakshman(也是 Amazon Dynamo 的作者之一)和 Prashant Malik 在为 Facebook 的 Inbox 编写。2008 年,Facebook 将项目开源,Cassandra 在 2009 年成为了 Apache 软件基金会的 Incubator 项目,并在 2010 年 2 月走出孵化器,成为正式的基金会项目。当前这个项目主要由专门进行 Cassandra 商业化运作的 DataStax 公司来开发,也有一些来自其他公司或独立的开发者。

Cassandra 使用了 Google 设计的 BigTable 的数据模型,与面向行(row)的传统的关系型数据库或键值存储的 key-value 数据库不同,Cassandra 使用的是宽列存储模型(Wide Column Stores),每行数据由 row key 唯一标识之后,可以有最多 20 亿个列,每个列有一个 column key 标识,每个 column key 下对应若干 value。这种模型可以理解为是一个二维的 key-value 存储,即整个数据模型被定义成一个类似 map<key1, map<key2,value>>的类型。

旧版的 Cassandra 与客户端交互的方法是通过 thrift,而当前新版本的 Cassandra 采用与 SQL 语言类似的 CQL 语言来实现数据模型的定义和数据的读写。其中 BigTable 中的列族(Column Family)在 Cassandra 中被称作类似关系型数据库中的称呼——表(table),而 Cassandra/BigTable 中的 row key 和 column key 并称为主键(primary key)。

Cassandra 的 row key 决定了该行数据存储在哪些节点中,因此 row key 需要按哈希来存储,不能顺序的扫描或读取,而一个 row 内的 column key 是顺序存储的,可以进行有序的扫描或范围查找。

与 BigTable 和其模仿者 HBase 不同,Cassandra 的数据并不存储在分布式文件系统如 GFS 或 HDFS 中,而是直接存于本地。与 BigTable 一样,Cassandra 也是日志型数据库,即把新写入的数据存储在内存的 Memtable 中并通过磁盘中的 CommitLog 来做持久化,内存填满后将数据按照 key 的顺序写进一个只读文件 SSTable 中,每次读取数据时将所有 SSTable 和内存中的数据进行查找和合并。这种系统的特点是写入比读取更快,因为写入一条数据是顺序计入 commit log 中,不需要随机读取磁盘以及搜索。

Cassandra 的系统架构与 Dynamo 类似,是基于一致性哈希的完全 P2P 架构,每行数据通过哈希来决定应该存在哪个或哪些节点中。集群没有 master 的概念,所有节点都是同样的角色,彻底避免了整个系统的单点问题导致的不稳定性,集群间的状态同步通过 Gossip 协议来进行 P2P 的通信。每个节点都把数据存储在本地,每个节点都接受来自客户端的请求。每次客户端随机选择集群中的一个节点来请求数据,对应接受请求的节点将对应的 key 在一致性哈希的环上定位是哪些节点应该存储这个数据,将请求转发到对应的节点上,并将对应若干节点的查询反馈返回给客户端。

在一致性、可用性和分区耐受能力(CAP)的折衷问题上,Cassandra 和 Dynamo 一样比较灵活。Cassandra 的每个 keyspace 可配置一行数据会写入多少个节点(设这个数为 N),来保证数据不因为机器宕机或磁盘损坏而丢失数据,即保证了 CAP 中的 P。用户在读写数据时可以指定要求成功写到多少个节点才算写入成功(设为 W),以及成功从多少个节点读取到了数据才算成功(设为 R)。可推理得出,当 W+R>N 时,读到的数据一定是上一次写入的,即维护了强一致性,确保了 CAP 中的 C。当 W+R<=N 时,数据是最终一致性因为存在一段时间可能读到的并不是最新版的数据。当 W=N 或 R=N 时,意味着系统只要有一个节点无响应或宕机,就有一部分数据无法成功写或者读,即失去了 CAP 中的可用性 A。因此,大多数系统中,都将 N 设为 3,W 和 R 设为 QUORUM,即“过半数”——在 N 为 3 时 QUORUM 是 2。

Cassandra 支持对一列数据进行 insert、update、或 delete 操作。其中 insert 和 update 虽然语法略有区别,但语义上等价,即可以针对已经存在的行进行 update 或 insert 一个不存在的行。

轻量级事务

从 2.0 版开始,Cassandra 支持轻量级事务。这种事务被称为“compare-and-set”,简称 CAS。通过 paxos 算法实现在满足某条件后才修改数据否则不修改。当前支持”insert if not exist”、”update if col=value”、”delete if exist”等几种操作。

Cassandra简介相关推荐

  1. Cassandra 简介

    Cassandra 简介 Apache Cassandra是一个高度可扩展的高性能分布式数据库,用于处理大量商用服务器上的大量数据,提供高可用性,无单点故障.这是一种NoSQL类型的数据库. 让我们先 ...

  2. Cassandra简介(概念篇)

    什么是Cassandra Apache Cassandra是一个高度可扩展的高性能分布式数据库,用于处理大量商用服务器上的大量数据,提供高可用性,无单点故障.这是一种NoSQL类型的数据库.无单点故障 ...

  3. Apache Cassandra简介

    Apache Cassandra 是一个开源的.分布式.无中心.弹性可扩展.高可用.容错.一致性可调.面向行的数据库,它基于 Amazon Dynamo 的分布式设计和 Google Bigtable ...

  4. Cassandra 简介(一)

    作者:朴松梅 译自 Platform NHN Cassandra Cassandra是NoSQL世界中的佼佼者.Voldemort, MongoDB, TokyoCabinet/Tyrant等诸多No ...

  5. Cassandra使用简介 - Cassandra Knowledge Base

    1. Cassandra简介 Cassandra是一种非关系型(NoSQL)开源大规模分布式数据库,具有水平可扩展性.分布式架构及表结构灵活定义等突出特性. 具体而言,其特性表现在以下几方面: 弹性可 ...

  6. Apache Cassandra 数据存储模型

    我们在<Apache Cassandra 简介>文章中介绍了 Cassandra 的数据模型类似于 Google 的 Bigtable,对应的开源实现为 Apache HBase,而且我们 ...

  7. 数据源管理 | 分布式NoSQL系统,Cassandra集群管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.Cassandra简介 1.基础描述 Cassandra是一套开源分布式NoSQL数据库系统.它最初由Facebook开发,用于储存收件箱 ...

  8. 计算机编写代码简介,Vcomputer简介

    1.Vcompter存储程序式计算机虚拟机软件简介 Vcompter存储程序式计算机虚拟机软件的文件名为comp_alpha(一般要先安装java运行环境,然后双击该软件即可运行),该软件是桂林电子科 ...

  9. 非关系型数据库 之 列数据库 Cassandra 的使用(Python3)

    文章目录 1.Cassandra 简介 1.1.简述 1.2.突出特点 2.CentOS 操作 Cassandra 2.1.下载 Cassandra 2.2.检测是否安装了java环境 2.3.修改配 ...

最新文章

  1. Quartz.net官方开发指南 第二课:Jobs And Triggers
  2. 一般项目中是如何调bug的 ------- 手把手带你体验整个流程
  3. JAVA正则表达式介绍和使用
  4. 【python学习】——读取csv文件
  5. Java时间和日期指南
  6. leetcode129. 求根到叶子节点数字之和(dfs)
  7. python外汇兑换代码_python爬取人民币汇率中间价
  8. TortoiseSVN搭建本地版本库及简单操作使用
  9. 通过精读一本英文技术书籍搞定英语
  10. 算法学习01- 生兔子的问题
  11. ContentProvider 之 监听共享数据变化
  12. Java项目开发如何设计整体架构
  13. Generative Adversarial Networks(WGAN、SAGAN、BigGAN)
  14. va_list 使用总结
  15. python T检验
  16. 再谈谷歌搜索引擎使用技巧
  17. 小巧 linux 网页浏览器,冷门软件!几款干净极简浏览器,小巧强大、高效出众...
  18. 一芯FC1178BC/FC1179主控U盘量产分享
  19. java虚拟机jvm与Java内存模型(JMM)
  20. VBScript脚本语言基础

热门文章

  1. 使用Endnote快速导入知网的中文文献
  2. axure切换焦点文本框样式
  3. lindo中的0-1约束
  4. Python遥感图像处理应用篇(二十九):遥感图像拉伸处理
  5. Windows下如何给C盘扩容 (已更新提取码)
  6. 计算机专业转口腔好吗,口腔医学专业VS计算机专业,同样高考志愿大热门,我该选择哪个...
  7. JPG格式图片怎么插入CAD图纸
  8. U盘变成RAW格式怎么修复?U盘数据如何恢复?
  9. 怎么用计算机算组合,御魂组合计算器
  10. 实施工程师如何做好一次调研