zoukankan      html  css  js  c++  java
  • 数据、系统大数据的存储和管理by小雨

    间时紧张,先记一笔,后续化优与完善。

        大数据的存储和管理

        任何呆板会都有物理上的制约:内存容量、盘硬容量、处置器速度等等,我们要需在这些硬件的制约和性能之间做出舍取,比如内存的取读速度比盘硬快多得,因此内存数据库比盘硬数据库性能好,但是内存为2GB的呆板可不能将小大为100GB的数据全体放入内存中,许也内存小大为128GB的呆板可以做到,但是数据加增到200GB时就力所不及了。

        数据断不加增形成单机系统性能断不降下,即使断不升提硬件置配也难以跟上数据的加增速度。然而,现今主流的计算机硬件比拟便宜而且可以展扩,在现购买八台8核内、128GB内存的呆板比购买一台64核内、TB别级内存的服务器划算多得,而且还可以加增或少减呆板来对应来将的化变。这类分布式架构策略对于海量数据来说是比拟合适的,因此,很多海量数据系统择选将数据放在多个呆板中,但也带来了很多单机系统不曾有的问题。

        面下我们分析大数据存储和管理开展进程当中涌现的四类大数据存储和管理数据库系统。

        行并数据库

        行并数据库[1]是指那些在无享共的体系结构中停止数据操纵的数据库系统。这些系统大部分用采了关系数据模型并且支撑SQL语句查询,但为了可以行并执行SQL的查询操纵,系统中用采了两个关键技巧:关系表的平水分划和SQL查询的区分执行。

        平水分划的要主想思就是根据某种策略将关系表中的元组分布到集群中的不同点节上,这些点节上的表结构是一样的,这样可就以对元组行并处置。现有的区分策略有哈希区分、围范区分、循环区分等。例如,哈希区分策略是将表T中的元组分布到n个点节上,可以用使一统的哈希算法对元组中的某个或某几个性属停止哈希,如hash(T.attribute1) mod n,然后根据哈希值将元组放置到不同的点节上。

        在区分存储的表中处置SQL查询要需用使基于区分的执行策略,如取获表T中某一数值围范内的元组,系统首先为全体表T成生总的执行筹划P,然后将P拆分红n个子筹划{P1,,Pn},子筹划Pi在点节ni上独立执行,最后每一个点节将成生的旁边结果发送到某一选定的点节上,该点节对旁边结果停止聚集发生终最的结果。

        行并数据库系统的目标是高性能和高可用性,通过多个点节行并执行数据库务任,进步全体数据库系统的性能和可用性。近最一些年断不涌现一些进步系统性能的新技巧,如引索、压缩、实体化图视、结果缓存、I/O享共等,这些技巧都比拟成熟且经得起间时的验考。与一些期早的系统如Teradata必须部署在专有硬件上不同,近最开辟的系统如AsterVertica等可以部署在通普的贸易呆板上,这些数据库系统可以称得上准云系统。

        行并数据库系统的要主点缺就是没有较好的弹性,而这类特性对中小型企业和创初企业是利有的。人们在对行并数据库停止计设和化优的时候以为集群中点节的数量是牢固的,若要需对集群停止展扩和缩收,则必须为数据转移进程制定全周的筹划。这类数据转移的价代是昂贵的,并且会致使系统在某段间时内可不拜访,而这类较差的灵活性直接影响到行并数据库的弹性以及现用现付贸易模式的实用性。

        行并数据库的另一个问题就是系统的错容性较差,从前人们以为点节故障是个特例,其实不经常涌现,因此系统只供提事务别级的错容能功,如果在查询进程当中点节生发故障,那么全体查询都要从头开始新重执行。这类重启务任的策略使得行并数据库难以在有拥数以千个点节的集群上处置较长的查询,因为在这类集群中点节的故障经常生发。基于这类分析,行并数据库只合适于资源需求绝对牢固的用应程序。不管怎样,行并数据库的很多计设原则为其他海量数据系统的计设和化优供提了比拟好的鉴借。

        NoSQL数据管理系统

        NoSQL[5]一词最早涌现于1998年,它是Carlo Strozzi开辟的一个轻量、开源、不供提SQL能功的关系型数据库(他以为,由于NoSQL悖离传统关系数据库模型,因此,它应该有一个全新的名字,比如“NoREL”或与之类似的名字[6])。

        2009年,Last.fmJohan Oskarsson发起了一次关于分布式开源数据库的探讨[7],来自RackspaceEric Evans再次提出了NoSQL的念概,这时的NoSQL要主指非关系型、分布式、不供提ACID的数据库计设模式。

        2009在年亚特兰大举办的“no:sql(east)”探讨会是一个里程碑,其口号是"select fun, profit from real_world whererelational=false;"。因此,对NoSQL最遍普的解释是“非关系型的”,夸大键值存储和文档数据库的长处,而不是单纯地支持关系型数据库。

        传统关系型数据库在处置数据密集型用应方面显得力不能及,要主表在现灵活性差、展扩性差、性能差等方面。近最涌现的一些存储系统摒弃了传统关系型数据库管理系统的计设想思,转而用采不同的处理方案来满意展扩性方面的需求。这些没有牢固数据模式并且可以平水展扩的系统在现统称为NoSQL(有些人以为称为NoREL更为公道),这里的NoSQL指的是“Not Only SQL”,即对关系型SQL数据系统的充补。NoSQL系统遍普用采的一些技巧有:

             单简数据模型。不同于分布式数据库,大多数NoSQL系统用采更加单简的数据模型,这类数据模型中,每一个录记有拥独一的键,而且系统需只支撑单录记别级的原子性,不支撑外键和跨录记的关系。这类一次操纵取获单个录记的束约极大地增强了系统的可展扩性,而且数据操纵可就以在单台呆板中执行,没有分布式事务的销开。

             元数据和用应数据的分离。NoSQL数据管理系统要需维护两种数据:元数据和用应数据。元数据是用于系统管理的,如数据区分到集群中点节和副本的映射数据。用应数据就是用户存储在系统中的贸易数据。系统之所以将这两类数据开分是因为它们有着不同的致一性要求。若要系统常正运行,元数据必须是致一且时实的,而用应数据的致一性需求则因用应场所而异。因此,为了到达可展扩性,NoSQL系统在管理两类数据上用采不同的策略。还有一些NoSQL系统没有元数据,它们通过其他方法处理数据和点节的映射问题。

             弱致一性。NoSQL系统通过制复用应数据来到达致一性。这类计设使得更新数据时副本同步的销开很大,为了少减这类同步销开,弱致一性模型如终最致一性和间时轴致一性到得广泛用应。

        通过这些技巧,NoSQL可以很好地对应海量数据的战挑。绝对于关系型数据库,NoSQL数据存储管理系统的要主优势有:

             免避不必要的杂复性。关系型数据库供提样各种各的特性和强致一性,但是很多特性只能在某些特定的用应中用使,大部分能功很少被用使。NoSQL系统则供提较少的能功来进步性能。

             高吞吐量。一些NoSQL数据系统的吞吐量比传统关系数据管理系统要高很多,如Google用使MapReduce天天可处置20PB存储在Bigtable中的数据。

             高平水展扩力能和低端硬件集群。NoSQL数据系统可以很好地停止平水展扩,与关系型数据库集群方法不同,这类展扩不要需很大的价代。而基于低端硬件的计设理念为用采NoSQL数据系统的用户节省了很多硬件上的销开。

             免避了昂贵的对象-关系映射。很多NoSQL系统可以存储数据对象,这就免避了数据库中关系模型和程序中对象模型互相转化的价代。

        NoSQL向人们供提了高效便宜的数据管理方案,很多公司不再用使Oracle甚至MySQL,他们鉴借AmzonDynamoGoogleBigtable的要主想思建立自己的海量数据存储管理系统,一些系统也开始开源,如Facebook将其开辟的Cassandra捐给了Apache软件基金会。

        虽然NoSQL数据库供提了高展扩性和灵活性,但是它也有自己的点缺,要主有:

             数据模型和查询语言没有经过数学验证。SQL这类基于关系代数和关系演算的查询结构有着坚固的数学保障,即使一个结构化的查询本身很杂复,但是它可以取获满意条件的所有数据。由于NoSQL系统都没有用使SQL,而用使的一些模型还未有完善的数学础基。这也是NoSQL系统较为凌乱的要主原因之一。

             不支撑ACID特性。这为NoSQL带来优势的同时也是其点缺,毕竟事务在很多场所下还是要需的,ACID特性使系统在中断的情况下也可以保障线在事务可以精确执行。

             能功单简。大多数NoSQL系统供提的能功都比拟单简,这就加增了用应层的累赘。例如如果在用应层实现ACID特性,那么编写码代的程序员必定极其苦痛。

             没有一统的查询模型。NoSQL系一统般供提不同查询模型,这必定程度上加增了开辟者的累赘。

        NewSQL数据管理系统

        人们曾遍普以为传统数据库支撑ACIDSQL等特性制约了数据库的展扩和处置海量数据的性能,因此尝试通过牺牲这些特性来升提对海量数据的存储管理力能,但是在现一些人则持有不同的观念,他们以为其实不是ACID和支撑SQL的特性,而是其他的一些机制如锁机制、日志机制、缓冲区管理等制约了系统的性能,只要化优这些技巧,关系型数据库系统在处置海量数据时仍能获得很好的性能。

         

        关系型数据库处置事务时对性能影响较大、要需化优的因素有:

             通信。用应程序通过ODBCJDBCDBMS停止通信是OLTP事务中的要主销开。

             日志。关系型数据库事务中对数据的修改要需录记到日志中,而日志则要需断不写到盘硬上来保障持久性,这类价代是昂贵的,而且降低了事务的性能。

             锁。事务中修改操纵要需对数据停止加锁,这就要需在锁表中停止写操纵,形成了必定的销开。

             闩。关系型数据库中一些数据结构,如B树、锁表、资源表等的享共影响了事务的性能。这些数据结构常常被多线程取读,所以要需短期锁即闩。

             缓冲区管理。关系型数据将数据组织成牢固小大的页,内存中磁盘页的缓冲管理会形成必定的销开。

        为了处理上面的问题,一些新的数据库用采部分不同的计设,它取消了耗费资源的缓冲池,在内存中运行全体数据库。它还摈弃了单线程服务的锁机制,也通过用使冗余呆板来实现制复和故障恢复,取代原有的昂贵的恢复操纵。这类可展扩、高性能的SQL数据库被称为NewSQL,其中“New”用来表明与传统关系型数据库系统的区别,但是NewSQL也是很宽泛的念概。它首先由451集团在一份报告中提出,其要主包括两类系统:有拥关系型数据库产品和服务,并将关系模型的好处带到分布式架构上;或者进步关系数据库的性能,使之到达不用考虑平水展扩问题的程度。前一类NewSQL包括ClustrixGenieDBScalArcScaleBaseNimbusDB,也包括带有NDBMySQL集群、Drizzle等。后一类NewSQL包括TokutekJustOne DB。还有一些“NewSQL即服务”,包括Amazon的关系数据库服务、MicrosoftSQL AzureFathomDB等。

        当然,NewSQLNoSQL也有交叉的地方,例如,RethinkDB可以看作NoSQL数据库中键/值存储的高速缓存系统,也可以当作NewSQL数据库中MySQL的存储引擎。在现很多NewSQL供提商用使自己的数据库为没有牢固模式的数据供提存储服务,同时一些NoSQL数据库开始支撑SQL查询和ACID事务特性。

        NewSQL可以供提SQL数据库的质量保障,也能供提NoSQL数据库的可展扩性。VoltDBNewSQL的实现之一,其开辟公司的CTO宣称,它们的系统用使NewSQL的方法处置事务的速度比传统数据库系统快45倍。VoltDB可以展扩到39个呆板上,在300CPU核内中每分钟处置1600万事务,其所需的呆板数比Hadoop集群要少很多。

        随着NoSQLNewSQL数据库阵营的迅速崛起,现今数据库系统“百花齐放”,现有系统达数百种之多,图1-1将广义的数据库系统停止了分类。

         

        1-1  数据库系统的分类

        1-1中将数据库分为关系型数据库、非关系型数据库以及数据库缓存系统。其中,非关系型数据库要主指的是NoSQL数据库,分为:键值数据库、列存数据库、图存数据库以及文档数据库四大类。关系型数据库包含了传统关系数据库系统以及NewSQL数据库。

        高容量、高分布式、高杂复性用应程序的需求迫使传统数据库断不展扩自己的容量极限,这些驱动传统关系型数据库用采不同的数据管理技巧的6个关键因素可以概括为“SPRAIN”,即:

             可展扩性(Scalability)——硬件价格

             高性能(Performance)——MySQL的性能瓶颈

             弱致一性(Relaxedconsistency)——CAP理论

             敏捷性(Agility)——持久多样性

             杂复性(Intricacy)——海量数据

             必然性(Necessity)——开源

         

         

        作者简介

        陆嘉恒,中国人民大学教授,博士生导师。2006年毕业于新加坡国立大学计算机科学系,获博士学位;2006-2008在年美国加利福尼亚大学尔湾分校(University of California, Irvine)停止博士后研究;2008年加入中国人民大学,2012年破格晋升为教授。要主研究领域包括数据库技巧和云计算技巧。先后在SIGMODVLDBICDEWWW等国际重要会议和期刊上发表数据库方向的论文40多篇,主编多本云计算和大数据的教材和著作。

        本文节选自《大数据战挑与NoSQL数据库技巧》一书。陆嘉恒编著,由电子工业出版社出版。

         

    文章结束给大家分享下程序员的一些笑话语录: 警告
    有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
    小伙子说,“没事儿,我是一个程序员”。
    那妇女说,“这又怎样?”
    程序员说,“我们从来不关心 Warning,只关心 Error”

  • 相关阅读:
    C# 反射设置属性帮助类
    WPF xaml中写代码
    redis 击穿、穿透、雪崩产生原因及解决方案
    Linux环境安装Tengine
    lsof使用说明
    Delve调试器简单使用说明
    web访问日志分析
    MongoDB中文社区 Freetalk,一起来玩快闪!
    在线研讨会:实时数据同步应用场景及实现方案探讨
    labview使用百度地图API,报错getContext方法未定义
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3029012.html
Copyright © 2011-2022 走看看