Apache Cassandra数据库的优缺点有哪些

Apache Cassandra数据库的优缺点有哪些,第1张

Apache Cassandra数据库的优缺点有哪些?

TAG标签: 数据库 Apache 优缺点 Cassandra

本文将超越众所周知的一些细节,探讨与 Cassandra 相关的不太明显的细节。您将检查 Cassandra 数据模型、存储模式设计、架构,以及与 Cassandra 相关的潜在惊喜。

在数据库历史文章 “What Goes Around Comes Around”中,Michal Stonebraker 详细描述了存储技术是如何随着时间的推移而发展的。实现关系模型之前,开发人员曾尝试过其他模型,比如层次图和有向图。值得注意的是,基于 SQL 的关系模型(即使到现在也仍然是事实上的标准)已经盛行了大约 30 年。鉴于计算机科学的短暂历史及其快速发展的步伐,这是一项非凡的成就。关系模型建立已久,以至于许多年来,解决方案架构师很容易为应用程序选择数据存储。他们的选择总是关系数据库。

诸如增加系统、移动设备、扩展的用户在线状态、云计算和多核系统的用户群之类的开发已经导致产生越来越多的大型系统。Google 和 Amazon 之类的高科技公司都是首批触及规模问题的公司。他们很快就发现关系数据库并不足以支持大型系统。

为了避免这些挑战,Google 和 Amazon 提出了两个可供选择的解决方案:Big Table 和 Dynamo,他们可以由此放松关系数据模型提供的保证,从而实现更高的可扩展性。Eric Brewer 的 “CAP Theorem”后来官方化了这些观察结果。它宣称,对于可扩展性系统,一致性、可用性和分区容错性都是权衡因素,因为根本不可能构建包含所有这些属性的系统。不久之后,根据 Google 和 Amazon 早期的工作,以及所获得的对可扩展性系统的理解,计划创建一种新的存储系统。这些系统被命名为 “NoSQL” 系统。该名称最初的意思是 “如果想缩放就不要使用 SQL”,后来被重新定义为 “不只是 SQL”,意思是说,除了基于 SQL 的解决方案外,还有其他的解决方案。

有许多 NoSQL 系统,而且每一个系统都缓和或改变了关系模型的某些方面。值得注意的是,没有一个 NoSQL 解决方案适用于所有的场景。每一个解决方案都优于关系模型,且针对一些用例子集进行了缩放。我的早期文章 “在 Data Storage Haystack 中为您的应用程序寻找正确的数据解决方案” 讨论了如何使应用程序需求和 NoSQL 解决方案相匹配。

Apache Cassandra是其中一个最早也是最广泛使用的 NoSQL 解决方案。本文详细介绍了 Cassandra,并指出了一些首次使用 Cassandra 时不容易发现的细节和复杂之处。

Apache Cassandra

Cassandra 是一个 NoSQL 列族 (column family) 实现,使用由 Amazon Dynamo 引入的架构方面的特性来支持 Big Table 数据模型。Cassandra 的一些优势如下所示:

高度可扩展性和高度可用性,没有单点故障

NoSQL 列族实现

非常高的写入吞吐量和良好的读取吞吐量

类似 SQL 的查询语言(从 0.8 起),并通过二级索引支持搜索

可调节的一致性和对复制的支持

灵活的模式

这些优点很容易让人们推荐使用 Cassandra,但是,对于开发人员来说,至关重要的一点是要深入探究 Cassandra 的细节和复杂之处,从而掌握该程序的复杂性。

什么是列?

列 有点用词不当,使用名称单元格 很可能更容易理解一些。我会坚持使用列,因为这是一种习惯用法。

Cassandra 数据模型包括列、行、列族和密钥空间 (keyspace)。让我们逐一进行详细介绍它们。

•列:Cassandra 数据模型中最基本的单元,每一个列包括一个名称、一个值和一个时间戳。在本文的讨论中,我们忽略了时间戳,您可以将一个列表示为一个名称值对(例如 author="Asimov")。

•行:用一个名称标记的列的集合。例如,清单 1 显示了如何表示一个行:

清单 1. 行的示例

"Second Foundation"->{

author="Asimov",

publishedDate="..",

tag1="sci-fi", tag2="Asimov"

}

Cassandra 包括许多存储节点,并且在单个存储节点内存储每一个行。在每一行内,Cassandra 总是存储按照列名称排序的列。使用这种排序顺序,Cassandra 支持切片查询,在该查询中,给定了一个行,用户可以检索属于给定的列名称范围内的列的子集。例如,范围 tag0 到 tag9999 内的切片查询会获得所有名称范围在 tag0 和 tag9999 内的列。

•列族:用一个名称标记的行的集合。清单 2 显示了样例数据的可能形式:

清单 2. 列族示例

Books->{

"Foundation"->{author="Asimov", publishedDate=".."},

"Second Foundation"->{author="Asimov", publishedDate=".."},

}

人们常说列族就像是关系模型中的一个表格。如下例所示,相似点将不复存在。

•密钥空间:许多列族共同形成的一个组。它只是列族的一个逻辑组合,并为名称提供独立的范围。

最后,超级列位于一个列族中,该列族对一个密钥下的多个列进行分组。正如开发人员不赞成使用超级列一样,在此,我对此也不作任何讨论。

Cassandra 与 RDBMS 数据模型

根据以上对 Cassandra 数据模型的描述,数据被放入每一个列族的二维 (2D) 空间中。要想在列族中检索数据,用户需要两个密钥:行名称和列名称。从这个意义上来说,尽管还存在多处至关重要的差异,关系模型和 Cassandra 仍然非常相似。

•关系列均匀分布在表中的所有行之间。数据项之间通常有明显的纵向关系,但这种情况并不适用于 Cassandra 列。这就是 Cassandra 使用各个数据项(列)来存储列名称的原因。

•有了关系模型,2D 数据空间就完整了。2D 空间内的每一个点至少应当拥有存储在此处的 null 值。另外,这种情况不适用于 Cassandra,Cassandra 可以拥有只包括少数项的行,而其他行可以拥有数百万个项。

•有了关系模型,就可以对模式进行预定义,而且在运行时不可以更改模式,而 Cassandra 允许用户在运行时更改模式。

•Cassandra 始终存储数据,这样就可以根据其名称对列进行排序。这使得使用切片查询在列中搜索数据变得很容易,但在行中搜索数据变得很困难,除非您使用的是保序分区程序。

•另一个重要差异是,RDMBS 中的列名称表示与数据有关的元数据,但绝不是数据。而在 Cassandra 中,列名称可以包括数据。因此,Cassandra 行可以拥有数百万个列,而关系模型通常只有数十个列。

•关系模型使用定义良好的不可变模式来支持复杂的查询,这些查询中包括 JOIN 和聚合等。使用关系模型,用户无需担心查询就可定义数据模式。Cassandra 不支持 JOIN 和大多数 SQL 搜索方法。因此,模式必须满足应用程序的查询要求。

国内生产环境使用Cassandra比较多的大公司有360,从公开的资料看,应该有至少1500台服务器的集群。360选用cassandra的原因如下:团队人员少,需求紧,选择开源项目;无单点,无中心,适合在线业务;代码易懂,团队成员有代码基础;社区比较活跃。

另外一些中小型公司和创业公司也有在使用。

这里要解释几个对cassandra的误解:

1、Facebook弃用?Facebook当初想用cassandra实现其消息系统,但后来发现不合适,原因不是cassandra不靠谱,而是Cassandra的最终一致性模型不适合Message System,HBase具有更简单的一致性模型。Cassandra强调AP ,Hbase强调CP。目前Facebook的inbox search系统在使用,8亿用户,200T数据;其移动应用开发平台也使用cassandra。

2、Twitter弃用?本质是mysql和nosql之争。cassandra能进入twitter的视野,恰恰说明cassandra是nosql的代表性产品之一。为什么twitter在tweets系统中不使用cassandra?"这是一次战略上的变化。我们将继续维护我们原本基于Mysql的存储。我们相信,现在还没有到大规模迁移数据到一个新技术的时候。”目前twitter也有使用cassandra——Using Cassandra in production for geolocation and analytics。

3、Cassandra不火?国内对mongodb和hbase推崇备至,究其原因是因为mongodb这个公司进入了中国市场并建立了中文组,而hbase在阿里的大范围使用和推广下培养了一大批用户和公开材料。Cassandra最近两年在大数据公司Datastax的大力培育下获得长足发展,功能和性能均大幅提升,Datastax的估值也达数亿美元。从apache cassandra首页来看,大概有超过1500个公司在使用cassandra。其中除了facebook和twitter外还一些有代表性的公司列举如下:

Instagram:inbox、newsfeed、 audit、fraud detection,12 EC2 node,1.2T,2w+ wps,1.5w+ rps;

eBay:200+TB,400+M写,100+M读,应用场景:商品详情页上的Social Signals,如Like,Want,Own,Favorites等;用户和商品的hunch taste graph;时间序列如移动通知,反作弊,soa,监控,日志服务等;

Netflix:包含288+96+60个实例的大规模集群,每秒110万的写 *** 作,3个AWS EC2 美国东部region的zone自动复制副本,总计330万写 *** 作/秒;

Apple:75000+ nodes, 10s  of PBs,Millions ops/s, largest cluster 1000+ nodes。

从技术实现上来讲,cassandra同时具备AWS Dynamo和Google Bigtable的设计理念,同时引入了P2P技术,具备大规模可分区行存储能力,强调AP,实现了最终一致性,具备多数据中心复制支持,具备市场上最具有竞争力的可扩展性,无中心节点,一致性和时延可调,无单点故障,每个节点只有一个进程等等大数据存储管理的先进特点,并支持spark、storm、hadoop的集成。但同时,Cassandra实现复杂性高,没有相应的中文社区,文档太少,国内应用和实践太少,Datastax也未进入中国市场,因此在中国的推广会比较困难。

1、cassandra不支持类似group by的查询,只能通过数据结构的设计来实现一些比较简单的统计。

2、bin包解压后,在bin目录下会有bat和shell文件

3、多研究一下wiki,有不少有用的信息


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9944196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存