您当前的位置:首页 > 互联网教程

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

发布时间:2025-05-24 21:32:21    发布人:远客网络

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

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

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时不容易发现的细节和复杂之处。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二、国内哪些互联网公司使用了 Cassandra 数据库

国内生产环境使用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也未进入中国市场,因此在中国的推广会比较困难。

三、怎么把cassandra的数据转入oracle

1、DataStax宣布最新的DataStax Enterprise软件将为大型企业提供把工作负载从Oracle迁移到Cassandra NoSQL数据库的功能。DataStax开发了一种类似于SQL的数据库查询语言CQL,能够帮助DBA将应用从Oracle迁移到Cassandra。

2、DataStax首席技术官Jonathan Ellis表示:“Oracle在应对交易中的非结构化数据时表现并不好,而这正是DataStax擅长的领域。财富100强企业中,已经有20家企业开始从Oracle迁移到Datastax上,我们更适合现代化的应用场景。”

3、根据Ellis的观点,包括Oracle在内的关系型数据库技术不适合支撑现代化的在线业务应用。许多DBA开始考虑使用Oracle RAC以及Exadata这样的一体机来解决性能与扩展性问题,Ellis表示,这部分企业完全可以考虑使用NoSQL数据库系统。

4、eBay是DataStax的客户,他们一共有250 TB的数据运行在Cassandra和DataStax Enterprise集群当中。另外,包括路透社以及Netflix等知名公司也都使用DataStax来运行业务系统。根据DataStax公司给出的官方信息,新版本DataStax Enterprise软件在相同的应用场景当中,每个Cassandra的节点都能管理比之前多出10倍的数据,同时还能够保证相同的性能。也就是说,更少的物理服务器能管理与现在等量的数据。

5、据了解,新版本DataStax Enterprise中,应用能够使用CQL语言,并且支持.Net与Java的API。