大数据的存储和办理

大数据的存储和处理 任何机器都会有物理上的捆绑:内存容量、硬盘容量、处置器速度等等,我们需求在这些硬件的捆绑和功用之间做出取舍,比如内存的读取速度比硬盘快得多,因此内存数据库比硬盘数据库功用好,可是内存为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有必要安置在专有硬件上不一样,比来开发的系统如Aster、Vertica等可以安置在一般的商业机器上,这些数据库系统可以称得上准云系统。 并行数据库系统的首要缺点就是没有较好的弹性,而这种特性对中小型公司和草创公司是有利的。我们在对并行数据库进行描绘和优化的时分认为集群中节点的数量是固定的,若需求对集群进行扩展和缩短,则有必要为数据转移进程拟定周全的方案。这种数据转移的价值是宝贵的,而且会引起系统在某段时辰内不可访问,而这种较差的灵活性直接影响到并行数据库的弹性以及现用现付商业方式的实用性。 并行数据库的另一个难题就是系统的容错性较差,以前我们认为节点缺点是个特例,并不常常出现,因此系统只供应事务等级的容错功用,如果在查询进程中节点发生缺点,那么整个查询都要从头初步从头实行。这种重启任务的战略使得并行数据库难以在具有数以千个节点的集群上处置较长的查询,由于在这类集群中节点的缺点常常发生。依据这种分析,并行数据库只适宜于资源需求相对固定的运用程序。不管怎样,并行数据库的许多描绘原则为其他海量数据系统的描绘和优化供应了比较好的学习。 NoSQL数据处理系统 NoSQL[5]一词最早出现于1998年,它是Carlo Strozzi开发的一个轻量、开源、不供应SQL功用的联络型数据库(他认为,由于NoSQL悖离传统联络数据库模型,因此,它应该有一个全新的名字,比如“NoREL”或与之类似的名字[6])。 2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的谈论[7],来自Rackspace的Eric 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,他们学习Amzon的Dynamo和Google的Bigtable的首要思想建立小我的海量数据存储处理系统,一些系统也初步开源,如Facebook将其开发的Cassandra捐给了Apache软件基金会。 虽然NoSQL数据库供应了高扩展性和灵活性,可是它也有小我的缺点,首要有:      数据模型和查询言语没有通过数学验证。SQL这种依据联络代数和联络演算的查询规划有着坚实的数学保证,即使一个规划化的查询本身很凌乱,可是它可以获取满足条件的全部数据。由于NoSQL系统都没有运用SQL,而运用的一些模型还未有完善的数学基础。这也是NoSQL系统较为失调的首要缘由之一。      不支撑ACID特性。这为NoSQL带来优势的一同也是其缺点,终究事务在许多场合下仍是需求的,ACID特性使系统在间断的情况下也可以保证在线事务可以准确实行。      功用简略。大多数NoSQL系统供应的功用都比较简略,这就增加了运用层的背负。例如如果在运用层完结ACID特性,那么编写代码的程序员肯定极点痛苦。      没有一同的查询模型。NoSQL系统一般供应不一样查询模型,这肯定程度上增加了开发者的背负。 NewSQL数据处理系统 我们曾广泛认为传统数据库支撑ACID和SQL等特性捆绑了数据库的扩展和处置海量数据的功用,因此检验通过牺牲这些特性来提升对海量数据的存储处理才干,可是如今一些人则持有不一样的观念,他们认为并不是ACID和支撑SQL的特性,而是其他的一些机制如锁机制、日志机制、缓冲区处理等制约了系统的功用,只需优化这些技术,联络型数据库系统在处置海量数据时仍能获得很好的功用。   联络型数据库处置事务时对功用影响较大、需求优化的要素有:      通讯。运用程序通过ODBC或JDBC与DBMS进行通讯是OLTP事务中的首要开支。      日志。联络型数据库事务中对数据的批改需求记载到日志中,而日志则需求不断写到硬盘上来保证耐久性,这种价值是宝贵的,而且降低了事务的功用。      锁。事务中批改操作需求对数据进行加锁,这就需求在锁表中进行写操作,构成了肯定的开支。      闩。联络型数据库中一些数据规划,如B树、锁表、资源表等的同享影响了事务的功用。这些数据规划常常被多线程读取,所以需求短期锁即闩。      缓冲区处理。联络型数据将数据组织成固定大小的页,内存中磁盘页的缓冲处答理构成肯定的开支。 为了处置上面的难题,一些新的数据库选用有些不一样的描绘,它取消了耗费资源的缓冲池,在内存中工作整个数据库。它还扔掉了单线程效力的锁机制,也通过运用冗余机器来完结拷贝和缺点恢复,代替原有的宝贵的恢复操作。这种可扩展、高功用的SQL数据库被称为NewSQL,其间“New”用来标明与传统联络型数据库系统的差异,可是NewSQL也是很广泛的概念。它首先由451集团在一份陈说中提出,其首要包括两类系统:具有联络型数据库产品和效力,并将联络模型的长处带到分布式架构上;或许前进联络数据库的功用,使之抵达不用考虑水平扩展难题的程度。前一类NewSQL包括Clustrix、GenieDB、ScalArc、ScaleBase、NimbusDB,也包括带有NDB的MySQL集群、Drizzle等。后一类NewSQL包括Tokutek、JustOne DB。还有一些“NewSQL即效力”,包括Amazon的联络数据库效力、Microsoft的SQL Azure、FathomDB等。 当然,NewSQL和NoSQL也有交叉的当地,例如,RethinkDB可以看作NoSQL数据库中键/值存储的高速缓存系统,也可以当作NewSQL数据库中MySQL的存储引擎。如今许多NewSQL供应商运用小我的数据库为没有固定方式的数据供应存储效力,一同一些NoSQL数据库初步支撑SQL查询和ACID事务特性。 NewSQL可以供应SQL数据库的质量保证,也能供应NoSQL数据库的可扩展性。VoltDB是NewSQL的完结之一,其开发公司的CTO宣称,它们的系统运用NewSQL的方法处置事务的速度比传统数据库系统快45倍。VoltDB可以扩展到39个机器上,在300个CPU内核中每分钟处置1600万事务,其所需的机器数比Hadoop集群要少许多。 跟着NoSQL、NewSQL数据库阵营的灵敏鼓起,当今数据库系统“百家争鸣”,现有系统达数百种之多,图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年破格提升为教授。首要研讨领域包括数据库技术和云核算技术。先后在SIGMOD、VLDB、ICDE、WWW等国际重要会议和期刊上宣告数据库方向的论文40多篇,主编多本云核算和大数据的教材和著作。 本文节选自《大数据应战与NoSQL数据库技术》一书。陆嘉恒编著,由电子工业出版社出版。    

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfgdj.html