Caasandr入门之一--Cassandra 是什么

在德国读研,毕业论文选择了关于云数据库方面, 大致内容是要用cassandra作为数据库实现一个MMORPG游戏. 于是开始看cassandra, 于是开始了混乱,各种版本,各种不适应,所以打算开个博客,记录下点点历程...今天算是第一篇吧.


按照标准要求,是要先做文献检索的,根据Laskhman 的论文,Cassandra-A DecentralizedStructured Storage System 以及各种资料,觉得下面的解释比较容易理解;

它是一个开源的,分布式,无中心,弹性可扩展,高可用,容错,一致性可调,面向列的数据库. 

目前国内看到的中文资料不多,最主要就是泡在他们的官网上,看看文档,由于版本众多弄得也是头大.干脆在这里写点什么东西,记录下自己的学习历程,以后也可以随时翻阅


Cassandra的核心设计集合了Google Bigtable 里面描述的数据模型以及Amazon的Dynamo里面的最终一致性.

其初由Facobook设计用于Facebook的数据平台,服务于社交应用例如inbox search. 应用于上百台服务器服务于百万用户.


在写这篇文章的时候, 官方的Cassandra版本是1.2.1, 看着一长串长长的更新日志感觉无从下手,资料还很少, 更郁闷的是, cassandra的几个基本交互工具,竟然还有

好几个版本,每个版本支持的查询语法不一样, 比如 cqlsh 1.0 2.0 3.0 以及cassandra-cli , 使用一种工具建立的数据库,也不能使用另外一种访问,真不知道要闹哪样啊.



Cassandra做为一种NoSql数据库, 足以引起业界震荡,我从压根儿不知道什么是NoSql到现在稍微有所了解, 算是有点个人的简介. 有人说,Nosql 的产品雨后春笋般出现,必定是一场革命,要动摇RDBMS的地位.我看则不然


首先我们来稍微看下Cassandra的历史吧:

Cassandra是一个自由,开源的分布式数据库,与传统RDBMS截然不同, 它在2009年1月成为Apache基金会的一个孵化器项目,



传统关系数据库有什么问题? Cassandra在革谁的命?

关系数据库的概念已经演化了40多年了, 毫无疑问,他是软件应用历史最成功的一个,你可以在小型公司用微软Access数据库使用,也可以在大型跨国公司上百台经过调优的服务器上使用,构成存储TB数据的数据仓库. 可以说,关系数据库存储了整个世界. 毫无疑问,无论从现代技术还是商业视角来看,关系数据库都扮演者关键角色. 多年后它也会以各种形式伴我们存在,关系数据库目前有什么问题呢? 就是没有问题, 那我们是否需要Cassandra之类的另类 Nosql数据库?  答案是,你不仅只需要一辆马车.

世界不断在演化,每一个概念都在改变着世界,孕育着一种革命,而这一次次的革命不过是历史的重演,从马车到汽车再到飞机.每一个都建立在前一个的基础上,解决前一个存在的某些问题,每个都有所长,有所短.

我们来看下RDBMS, 当你的数据库访问量大幅增加, 就会遇到扩展性的问题, 所有具备最基本功能的关系型数据库都会支持join操作,不过join可能会很慢,由于数据库依靠事务来保证一致性,而事务需要锁住数据库的一部分,其他用户就不能访问这一部分数据了. 锁本身意味着竞争统一数据的拥护会被放入队列,等待获得读写权限.这在高负载的情况下可能成为系统的死穴.通常解决问题的方法是

1提升硬件能力,增加内存,用更快的处理器和升级硬盘,这种成为垂直扩展,可解一时之忧

2当问题再度出现,解决方法类似,既然一台机器不堪重负,我们就增加新计算机,构成集群,不过这样你会在使用中碰到数据复制和一致性的问题了,这些问题以前没有出现过

3现在我们需要更新数据管理系统的配置,可能优化数据库来写底层文件系统的通道.

4在数据库上投入足够经历后,我们回来看自己的应用,优化索引和查询, 不过当应用达到这个贵哦,恐怕不太会完全没有做过索引和查询优化,可能已经优化不少了,只好重新审视所有数据库访问代码,想发现零星可以调优的机会. 比如减少改写join操作.

5我们增加了一个缓存曾 ,对于大系统可能会引入分布式缓存,我们又有了更新缓存和更新数据库一致性问题了,对于集群,问题更严重.

6现在我们把注意力重新转向数据库,由于应用在那里,我们应该很了解主要查询路径,我们复制那些访问频率较高的数据,使他们更接近查询想要得到的形式,这个过程是反范式化.他与关系模型的特征是对立的,也违反Codd对关系数据模型的12条建议.  这时候,数据库已经不是工作在纯粹的关系模型里了.


在如今数据爆发的背景下,我想工程师们都很熟悉上面的场景, 情况是不是和当年亨利 福特的境遇很向此,你真正需要的已经不是你本来想要的一匹快马了,或者, 你本身是需要一辆汽车的,只是你还没有想到这个事务存在的情况下,比较难接受.因为你要接受一大堆的概念, 离合,引擎,档位, 这在你只会骑马的时候是不可想象的.

首先我们认识到,关系模型只是一种数据模型,当初关系模型出现的时候,也带来很多灾难性的词语, 一些你从未听说的概念,你得学习这些不熟悉的概念,并且去运用它. 这么多年过去了,我们熟悉了这一切, 关系数据库就是解决一切问题放之四海而皆准的方案. 每个大学生到了大学也学关系数据库. 我们的世界也跟关系数据库紧密相连,至少目前, 我们没有理由去否认关系数据库


为什么要使用Cassandra

既然关系数据没有问题,我们为什么要使用Cassandra,当你没有遇到数据库弹性扩展,大规模数据库的问题,那么对于cassandra之类复杂系统取舍完全没有必要考虑,因为cassandra有自己的应用范围,正如,世界上有比汽车快得多的飞机,为什么大家还要坐汽车,因为飞机有飞机的用途,远途,汽车,是用来跑近途的.两者是互补的关系.

所以说,真正的问题不是关系数据库有什么问题,而是你要解决什么问题, 如果有一个模型,能做到容错,跨数据中心可用,可调整一致性以及上百TB大规模,多种客户端语言,又怎样?

cassandra正式服务于这种情况的



你可能感兴趣的:(Caasandr入门之一--Cassandra 是什么)