电话+V:159999-78052 ,欢迎咨询有向图数据库结构,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]
ApacheCassandra数据库的优缺点有哪些?
TAG标签:数据库Apache优缺点Cassandra
本文将超越众所周知的一些细节,探讨与Cassandra相关的不太明显的细节。您将检查Cassandra数据模型、存储模式设计、架构,以及与Cassandra相关的潜在惊喜。
在数据库历史文章“WhatGoesAroundComesAround”中,MichalStonebraker详细描述了存储技术是如何随着时间的推移而发展的。实现关系模型之前,开发人员曾尝试过其他模型,比如层次图和有向图。值得注意的是,基于SQL的关系模型(即使到现在也仍然是事实上的标准)已经盛行了大约30年。鉴于计算机科学的短暂历史及其快速发展的步伐,这是一项非凡的成就。关系模型建立已久,以至于许多年来,解决方案架构师很容易为应用程序选择数据存储。他们的选择总是关系数据库。
诸如增加系统、移动设备、扩展的用户在线状态、云计算和多核系统的用户群之类的开发已经导致产生越来越多的大型系统。Google和Amazon之类的高科技公司都是首批触及规模问题的公司。他们很快就发现关系数据库并不足以支持大型系统。
为了避免这些挑战,Google和Amazon提出了两个可供选择的解决方案:BigTable和Dynamo,他们可以由此放松关系数据模型提供的保证,从而实现更高的可扩展性。EricBrewer的“CAPTheorem”后来官方化了这些观察结果。它宣称,对于可扩展性系统,一致性、可用性和分区容错性都是权衡因素,因为根本不可能构建包含所有这些属性的系统。不久之后,根据Google和Amazon早期的工作,以及所获得的对可扩展性系统的理解,计划创建一种新的存储系统。这些系统被命名为“NoSQL”系统。该名称最初的意思是“如果想缩放就不要使用SQL”,后来被重新定义为“不只是SQL”,意思是说,除了基于SQL的解决方案外,还有其他的解决方案。
有许多NoSQL系统,而且每一个系统都缓和或改变了关系模型的某些方面。值得注意的是,没有一个NoSQL解决方案适用于所有的场景。每一个解决方案都优于关系模型,且针对一些用例子集进行了缩放。我的早期文章“在DataStorageHaystack中为您的应用程序寻找正确的数据解决方案”讨论了如何使应用程序需求和NoSQL解决方案相匹配。
ApacheCassandra是其中一个最早也是最广泛使用的NoSQL解决方案。本文详细介绍了Cassandra,并指出了一些首次使用Cassandra时不容易发现的细节和复杂之处。
ApacheCassandra
Cassandra是一个NoSQL列族(columnfamily)实现,使用由AmazonDynamo引入的架构方面的特性来支持BigTable数据模型。Cassandra的一些优势如下所示:
高度可扩展性和高度可用性,没有单点故障
NoSQL列族实现
非常高的写入吞吐量和良好的读取吞吐量
类似SQL的查询语言(从0.8起),并通过二级索引支持搜索
可调节的一致性和对复制的支持
灵活的模式
这些优点很容易让人们推荐使用Cassandra,但是,对于开发人员来说,至关重要的一点是要深入探究Cassandra的细节和复杂之处,从而掌握该程序的复杂性。
什么是列?
列有点用词不当,使用名称单元格很可能更容易理解一些。我会坚持使用列,因为这是一种习惯用法。
Cassandra数据模型包括列、行、列族和密钥空间(keyspace)。让我们逐一进行详细介绍它们。
?列:Cassandra数据模型中最基本的单元,每一个列包括一个名称、一个值和一个时间戳。在本文的讨论中,我们忽略了时间戳,您可以将一个列表示为一个名称值对(例如author="Asimov")。
?行:用一个名称标记的列的集合。例如,清单1显示了如何表示一个行:
清单1.行的示例
"SecondFoundation"->{
author="Asimov",
publishedDate="..",
tag1="sci-fi",tag2="Asimov"
}
Cassandra包括许多存储节点,并且在单个存储节点内存储每一个行。在每一行内,Cassandra总是存储按照列名称排序的列。使用这种排序顺序,Cassandra支持切片查询,在该查询中,给定了一个行,用户可以检索属于给定的列名称范围内的列的子集。例如,范围tag0到tag9999内的切片查询会获得所有名称范围在tag0和tag9999内的列。
?列族:用一个名称标记的行的集合。清单2显示了样例数据的可能形式:
清单2.列族示例
Books->{
"Foundation"->{author="Asimov",publishedDate=".."},
"SecondFoundation"->{author="Asimov",publishedDate=".."},
…
}
人们常说列族就像是关系模型中的一个表格。如下例所示,相似点将不复存在。
?密钥空间:许多列族共同形成的一个组。它只是列族的一个逻辑组合,并为名称提供独立的范围。
最后,超级列位于一个列族中,该列族对一个密钥下的多个列进行分组。正如开发人员不赞成使用超级列一样,在此,我对此也不作任何讨论。
Cassandra与RDBMS数据模型
根据以上对Cassandra数据模型的描述,数据被放入每一个列族的二维(2D)空间中。要想在列族中检索数据,用户需要两个密钥:行名称和列名称。从这个意义上来说,尽管还存在多处至关重要的差异,关系模型和Cassandra仍然非常相似。
?关系列均匀分布在表中的所有行之间。数据项之间通常有明显的纵向关系,但这种情况并不适用于Cassandra列。这就是Cassandra使用各个数据项(列)来存储列名称的原因。
?有了关系模型,2D数据空间就完整了。2D空间内的每一个点至少应当拥有存储在此处的null值。另外,这种情况不适用于Cassandra,Cassandra可以拥有只包括少数项的行,而其他行可以拥有数百万个项。
?有了关系模型,就可以对模式进行预定义,而且在运行时不可以更改模式,而Cassandra允许用户在运行时更改模式。
?Cassandra始终存储数据,这样就可以根据其名称对列进行排序。这使得使用切片查询在列中搜索数据变得很容易,但在行中搜索数据变得很困难,除非您使用的是保序分区程序。
?另一个重要差异是,RDMBS中的列名称表示与数据有关的元数据,但绝不是数据。而在Cassandra中,列名称可以包括数据。因此,Cassandra行可以拥有数百万个列,而关系模型通常只有数十个列。
传统的基本数据模型有以下三种:
1、层次模型
层次模型是一种树结构模型,它把数据按自然的层次关系组织起来,以反映数据之间的隶属关系。层次模型是数据库技术中发展最早、技术上比较成熟的一种数据模型。它的特点是地理数据组织成有向有序的树结构,也叫树形结构。结构中的结点代表数据记录,连线描述位于不同结点数据间的从属关系(一对多的关系)。
2、网状数据模型
网状模型将数据组织成有向图结构,图中的结点代表数据记录,连线描述不同结点数据间的联系。这种数据模型的基本特征是,结点数据之间没有明确的从属关系,一个结点可与其它多个结点建立联系,即结点之间的联系是任意的,任何两个结点之间都能发生联系,可表示多对多的关系。
3、关系数据模型
由于关系数据库结构简单,操作方便,有坚实的理论基础,所以发展很快,80年代以后推出的数据库管理系统几乎都是关系型的。涉及到的基础知识有:关系模型的逻辑数据结构,表的操作符,表的完整性规则和视图、范式概念。
三种主要的数据模型是层次模型网状模型和关系模型
电话+V:159999-78052
机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。