前言
ApacheCassandra是最流行的NoSQL数据库之一,是基于Dynamo的研究论文:亚马逊的高可用键-值存储和Bigtable:一个关系型数据的分布式存储系统。Cassandra是这两篇论文的最好实现。总的来说,NoSQL数据库可以分为以下几种:
• 键-值数据库
• 列族数据库
• 文档数据库
• 图数据库
Cassandra属于列族数据库。Cassandra的点对点的架构避免了集群中的各个节点的单点故障,给予了跨机架或者数据中心 分配节点的能力。这使得Cassandra可以很好的线性扩展的数据存储。换言之,你的处理需求越大,你就需要往集群中添加更多的节点。Cassandra的多数据中心的支持,使得它对于跨数据中心的数据复制,灾难恢复,高可用性,分离事务处理,和分析建立弹性的数据存储基础设施环境,是一个完美的选择。
在Cassandra里,一个最基本的数据概念是由名称,值,时间戳,和可选的生存时间(TTL)属性组成的列。一行有一个行健,和一些有序的列组成的集合。一个列族(column family)或者说是一个表(table)是一系列行的集合。一个keyspace是列族的集合。
Cassandra 2.1带有许多新的特性使其成为一个比以往任何时候更强大的数据库。现在CQL的新关键词IF NOT EXISTS使得你可以在Cassandra建立一个新对象之前,检查该对象是否已存在。轻量级事务和CQL的批处理命令,使用户可以执行多个原子操作。使列族中的多个列变为静态(STATIC),使用户可以在一个给定分区键里的多行数据之间共享数据。用户自定义数据类型,给了你的数据存储非常接近现实世界中对象的能力,这些应用程序中使用的对象是用面向对象编程语言写的。集合的索引可以用来索引,和在Cassandra中查询集合的数据类型。行缓存的改进,读和写的变化,关闭堆内存表,增量节点修复,和新的计数器的实现,所有的这些都使得Cassandra比以前的版本表现的更好。
这本书中的所有实例代码都是为Cassandra 2.1.5写的。所有的例子都是按照CQL 3.X规范。基于Cassandra CLI的预CQL Thrift API被用来列出列族的物理布局。对于物理布局的理解是非常的重要,因为错误的选择分区键或者主键将导致潜在的性能问题。最好的实践方法,就是创建一个列族,插入几条记录,使用Cassandra CLI的命令列表。它会给出物理布局。
术语“设计模式”在软件发展社区是一个被高度误解的术语。在一个非常普遍的意义上,它是一组在特定的上下文中的已知问题的解决方案。它在这本书中被使用的方式是,描述了一个使用Cassandra 的某些特性来解决一些实际问题的模式。要参考它们并确定它们以后,每一个这样的设计模式都被赋予了一个名称。这些模式的名称可能跟其他类似在上下文中使用的和其他软件开发范式中的设计模式名称毫不相关。
用户喜欢Cassandra因为它有类似于SQL的接口,CQL,而且它的特性非常接近于关系型数据库,虽然它的范式是全新的。应用开发者喜欢Cassandra因为市面上有大量可用的驱动,这样他们就可以用他们的首选编程语言编写应用程序。架构师喜欢Cassandra因为他们可以用它存储结构化的,半结构化的,无结构化的数据。数据库管理员喜欢Cassandra因为它几乎没有维护开销。服务经理喜欢Cassandra因为市场上有很好的监控工具。首席信息官喜欢Cassandra因为给了他们钱的价值。这都是Cassandra的杰作!
这本书包含了哪些内容
第一章,共生模式,探讨了Cassandra如何在一个遗留的环境中与关系型数据库共存使用。
第二章,关系型数据库迁移模式,探讨了如何利用Cassandra一些独特的特征来提供价值,因此传统的关系型数据库的数据可迁移到Cassandra。这是与其他传统的关系型数据库共存的自然过程。
第三章,缓存迁移模式,解决一些使用缓存解决方案的陷阱,和如何使用Cassandra来克服它们。
第四章,CAP模式,讨论了Cassandra可用会使用的关于数据完整性的考虑,一致性,可用性,和分区容忍性,还有一些性能调优的可能,来设计强大的数据存储。
第五章,时间模式,探讨了时态数据和一些在Cassandra中可以用来设计强大的时空数据存储的特征。
第六章,分析模式,讨论了关于数据分析的必要性,以及Cassandra如何跟Spark连接用于数据分析。
第七章,设计中的应用,讨论了利用这本书中讨论的所有设计模式来设计一个完整的应用程序。
读这本书之前你需要做什么
建议读者在开启《Cassandra设计模式 第二版》的旅程之前,先学习一遍Cassandra的数据模型。学习数据模型的一本不错的书,《Cassandra数据模型和分析》,作者C.Y. Kan,,知名出版。如果理解关系型数据库的数据模型,绝对是加分的。
这本书有一些版本的具体内容。示例代码使用的是Cassandra查询语言(CQL)。引用以及运行这本书中给出的CQL示例代码,Cassandra 2.1.5及以上 是首选的版本。
这本书适合什么人
这本书非常适合那些想充分利用Cassandra 真正的力量,把他们的解决方案带向一个新的层次的Cassandra开发人员。如果你是一个架构师,正在设计可扩展的,基于Cassandra数据的解决方案,这本书对你是最理想的在正确的语境下利用正确的Cassandra特征解决实际问题。如果你已经在使用Cassandra,这本书讲帮助你利用其全部潜力。
习俗
在这本书中,你会发现在不同的信息种类中一些不同的文本样式。这里是一些样式的例子和它们意思的解释。
文本中的代码词,数据库表名,文件夹名称,文件名,文件扩展名,路径名,虚拟URL,用户输入,和Twitter处理 如下所示:
“在Order表中,CustomerId是外键,引用了Customer表中的CustomerId字段”
一个代码块设置如下:
CREATE KEYSPACE PacktCDP1 WITH replication ={'class':
'SimpleStrategy', 'replication_factor' : 3};
USE PacktCDP1;
CREATE TABLE CustomerOrder (
CustomerId bigint,
OrderId bigint,
CustomerName text static,
Email text static,
OrderDate timestamp,
OrderTotal float,
PRIMARY KEY (CustomerId, OrderId)
)
任何命令行输入或输出如下:
USE PacktCDP1;
list CustomerOrder;
Using default limit of 100
Using default cell limit of 100
RowKey: 1
=> (name=1:, value=, timestamp=1433970886092681)
=> (name=1:customername, value=4d61726b2054686f6d6173,
timestamp=1433970886092681)
读者反馈
读者反馈永远都欢迎。让我们知道你对于这本书的想法—你喜欢的或者不喜欢的。读者的反馈对我们来说非常重要,它可以帮我们做的更好。
向我们发送一般的反馈,仅仅需要发邮件到feedback@packtpub.com,在信息的标题写上这本书的标题。
如果在某个主题上你有专业知识,而且你有兴趣写书或者促成一本书,请看www.packtpub.com/authors的作者指南。
客户支持
现在你是一个知名的书的主人,我们有很多事情帮助你从你的购买中得到最多。
下载示例代码
你可以从你的http://www.packtpub.com账户上下载所有你购买过的Packt出版的书籍的示例代码。如果你在其他地方购买的这本书,你可以访问http://www.packtpub.com/support 然后注册,就会把文件用邮件发送给你。
错误
虽然我们非常小心谨慎,以确保我们的内容的准确性,但错误还是会发生。如果你在我们其中的一本书中发现了一个错误,也许是文字的错误,也许是代码的错误,如果你能向我们报告这些,我们将不胜感激。这样做,你可以把其他读者从挫折中拯救出来,并帮助我们改进这本书的后续版本。如果你发现任何错误,请访问http://www.packtpub.com/submit-errata 选择书籍,点击错误提交表单链接,输入详细的错误信息,报告给我们。一旦你的错误验证通过,你的提交会被接受,错误就会上传到我们的网站或者添加到那个已经存在的错误列表中。
查看以前提交的错误,去https://www.packtpub.com/books/content/support,并在搜索字段输入该书的名称。所需要的信息就会出现在错误部分下。
盗版
互联网上的盗版行为是在所有媒体中一个持续的问题。在Packt,我们对于我们的版权和执照的保护是非常认真的。如果你在互联网上碰到任何形式的非法拷贝我们的作品,请立即提供地址或者网站名称给我们,我们就可以追求补救措施。
请把疑似盗版材料的链接发给我们 copyright@packtpub.com
我们感谢你的帮助,保护我们的读者,和给你带来珍贵内容的能力。
疑问
如果你对这本书有任何方面的疑问,你可以联系我们questions@packtpub.com ,我们将尽我们所能解决问题。