Cassandra是什么

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

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

Cassandra是什么

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”等几种操作。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年11月13日 上午4:28
下一篇 2023年11月13日 上午4:30

相关推荐

  • MyISAM是什么

    MyISAM是默认存储引擎(Mysql5.1前)。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL 5.1不支持ISAM)。 每个MyISAM在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。 MyISAM 是默认存储引擎(Mysql5.1 前)。它基于更老的 ISAM 代码,但有很多有用的扩展。(注意 MySQL …

    2023年12月3日
    1900
  • InnoDB是什么

    InnoDB是MySQL的数据库引擎之一,为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务功能,类似于PostgreSQL。 InnoDB 是 MySQL 的数据库引擎之一,现为 MySQL 的默认存储引擎,为 MySQL AB 发布 binary …

    2023年12月3日
    2100
  • INT是什么

    INT是数据库中一种数据类型,同时,作为函数,INT函数指数据库中常用函数中的“向下取整函数”。常用来取一个数中的整数部分。Int是将一个数值向下取整为最接近的整数的函数。为取整函数。 INT 是数据库中一种数据类型,同时,作为函数,INT 函数指数据库中常用函数中的“向下取整函数”。常用来取一个数中的整数部分。Int 是将一个数值向下取整为最接近的整数的函…

    2023年11月30日
    2300
  • 医学数据库是什么

    医学数据库技术的引入, 能够极大程度的节省医学数据存储的空间、更好的保护患者的隐私、进一步实现的各不同单位间的资源共享、更细致的整合互联网的各种医学资料以及更加快捷的检索各种信息, 从而给医学工作者带来极大的便利。 在计算机中,数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。而当数据库运用到医院系统中时, 既能够改变传统医学文档存储方式的冗余和…

    2023年11月29日
    1600
  • hosts是什么

    Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址。 Hosts 是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的 IP 地址建立一个关联“…

    2023年11月28日
    2400
  • 内存数据库是什么

    内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。 内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。 数据库简介 内存数据库抛…

    2023年11月27日
    2700
  • 技多不压身 | 产品经理需知的那些数据库基础知识

    技多不压身,无论是什么数据产品经理还是其他品类的产品经理,都需要懂点数据库知识。懂技术能让你在跟开发撕逼中多了一个资本。 随着近几年AI智能,大数据的发展,“产品经理是是否需要懂技术?”“产品经理应该对技术理解到什么程度?”诸如此类的问题又再次出现在许多人的视野中,或者说它就未曾离开过。 笔者认为,这要具体放到某个具体业务场景或者行业下去分析,例如:作为一名…

    2023年11月26日 数据分析
    300
  • 曾被「扫地出门」的那群「疯子」,这次碾压了甲骨文

    继5G和芯片技术之后,中国互联网在数据库方面实现了又一次弯道超车。 一场曲折的中美互联网巨头之间的较量,在「十一」假期期间揭晓,中国企业拿下数据库「世界杯」冠军,而这此前已被美国公司制霸9年。10月2日,在被誉为「数据库领域的世界杯」TPC-C基准测试中,蚂蚁金服自研的分布式关系数据库OceanBase创造新的世界记录,打破甲骨文(Oracle)保持9年的世…

    2023年11月26日 数据分析
    200
  • 产品经理了解数据库,真的这些就够了!

    编辑导语:时常可以在网上看到大家对于产品经理需要懂数据库这个问题进行热议,那我们首先得明白,数据库是什么?数据库有何用处?数据库对产品经理而言是否有加持作用?本文围绕产品经理和数据库展开了讲述,推荐对此感兴趣的伙伴阅读。 大家好,本次我们分享一个在网上热议的话题,那就是产品经理需要懂数据库吗?懂的话需要懂到什么程度?这个仁者见仁智者见智,我觉得学一些简单的数…

    2023年11月26日 数据分析
    300
  • Llama-2首个全方位评测,国内外开源模型大比拼

    在最近,大语言模型进入了新的发展阶段,开源这一概念开始引领起新的浪潮。那么,开源模型的具体体验如何?在这篇文章里,作者就对Llama-2这一大模型发起了分析评测,并将国内大模型和Llama-2进行了比较,一起来看一下。 进入2023年7月,大语言模型(LLM)的发展进入了新阶段,开源成为一个火热的主题。 7月6日,上海人工智能实验室与商汤科技等联合发布了书生…

    2023年11月25日 分析测评
    300



微信客服