现在的位置: 首页 > 综合 > 正文

cassandra权威指南读书笔记一为什么选择非关系型数据库

2018年05月13日 ⁄ 综合 ⁄ 共 1851字 ⁄ 字号 评论关闭

            首先说一下关系型数据库的优点,关系型数据库,关系型数据库这个概念和它的应用已经演化了40多年了,毫无疑问,它是软件应用历史上最成功的一个。它既可以在个人小公司里通过微软Access数据库来使用,也可以在大型跨国公司的上百台经过调优的服务器上使用,构成存储数据TB数据的数据仓库。关系数据库存储了账单、用户记录、产品目录、账户明细、用户鉴权、信息等,可以说关系型数据库里面差不多存储了整个世界。可以说关系型数据库差不多存储了整个数据库。

          当基于关系型数据库的应用取得成功的时候,访问量大幅度增加的时候,我们就会遇到可扩展性问题。所有最基本功能的关系型数据库都会支持join操作,不过join可能会很慢。由于数据库通常依靠事物来保持一致性,而事物需要锁住数据库的一部分,使之不能够被其他用户访问。因为锁本身意味着竞争同一数据的用户会被放入队列,等待获得读写权限,这在高负载的情况下可能会造成系统的死穴。

           通常我们会用如下的方法解决这些问题,很多时候是下面这个顺序。

            1 提升硬件能力来解决问题,如增加内存、用更快的处理器以及升级硬盘,称之为垂直扩展。

            2  当问题再度出现时,解决方法很类似:既然一台机器已经不堪重负了,我们就增加新的计算机,构成数据库集群。不过,这样你就会在正常的使用及出故障的时候遇到数据复制与一致性的问题了。

           3   现在我们需要更新数据库管理系统的配置。

           4   在数据库系统上投入了足够的精力之后,我们开始转过来审视自己的应用。我们开始优化索引、优化查询。不过,当我们的应用达到这个规模的时候,恐怕不太会完全没做过索引和查询优化,可能已经优化过不少了。那么,重新审视所有数据库访问代码,想发现零星的可以调优的机会,这是一件相当头痛的事。

           5   我们增加了一个缓存层。对于大型系统可能会引入分布式缓存,如memcached、EHCache、Oracle Coherence或其他类似产品。这样,又面临更新缓存和更新数据库一致性的问题了,对于集群来说,问题更加严重。

         当遇到这些问题时,显然关系型数据库显然就局限了,解决不了这样的问题。cassandra就是为了解决这样的问题而生的,apache cassandra是一个开源的、分布式、无中心、无弹性可扩展、高可用、容错、一致性可调、面向列的数据库,基于Amazon Dynamo的分布式设计和Google BigTable的数据模型,由Facebook创建,已经在一些最流行的网站中取得了应用。下面介绍下他是如何解决菲关系型数据库解决不了的问题的。

         1  分布式与无中心

          cassandra是分布式的,这意味着它可以运行在多台机器上,并呈现给用户一个一致的整体。事实上,在一个节点上运行cassandra毫无意义。需要运行多个节点才能帮助你了解他的工作机制。对于很多存储系统,一旦你开始扩展它,就需要把某些节点设为主节点,其他则作为从节点。但cassandra是无数据中心的,每个节点都是一样的,没有节点会承担特殊的管理任务。无中心这一事实意味着cassandra不会单节点失效。

        2   弹性可扩展性

        可扩展性是指系统架构可以让系统提供更多的服务而不降低使用性能的特性。仅仅通过给现有的机器增加硬件的容量、内存进行垂直扩展,是最简单的达到可扩展性的手段。弹性可扩展性是指水平可扩展性,意即你的集群可以不间断地扩展或缩减规模。要做到这点,集群必须能够在不大幅修改或者重新配置的情况下,接受那些新加入、获得全部或者部分数据的节点,让它们开始提供服务。你不需要重新启动进程,不必修改应用的查询,也无需自己手工重新均衡数据分布。

      3     高可用与容错

      cassandra就是高可用的。你可以在不中断系统的情况下替换故障节点,还可以把数据分布到多个数据中心,从而提供更好的本地访问性能,并且在某一个数据中心发生火灾、洪水等不可抗灾难的时候防止系统彻底瘫痪。

     4    可调节的一致性

     一致性的含义是读操作一定会返回最新写入的结果。cassandra只支持最终一致性,并不支持严格的一致性。但是这是在节点可用性和分区耐受性之前做的折中。cassandra希望了一定的一致性来换来了完全的可用性。

    由于 cassandra具有以上的特点,解决了关系型数据库解决不了的一些问题。后面,我将写如何应用cassandra来解决实际的问题。

          

抱歉!评论已关闭.