我们的数据库技术该何去何从│长文章

我们的数据库技术该何去何从│长文章

数据库接线“纠结”么,还有更纠结的…

纵览当今的网站和手机app的架构数据库,你会发现除了基于SQL语言(结构式查询语言)的关系数据库技术外,还有另外一些数据库管理系统也起着举足轻重的作用。Wanderu公司就是一个例子。她是一家三年前在波士顿成立的从事大巴和火车旅游票务的网站。为了应对网络访问所产生的海量非结构化数据(大数据:好比PDF格式的巴士时刻表),Wanderu采用了一种非SQL数据库:MongoDB,完全不同于传统的基于行列表格的SQL数据库系统。

但是走非SQL这条技术路线的动机又是什么呢?是否“以网站为焦点的商业运作”即等于“选择非SQL模式”?为什么像Wanderu这样的公司会放弃使用SQL数据库,而选择了MongoDB这种非SQL的模式?又在什么情况下,SQL数据库会是更好的选择呢?后面细说…

如今,数据库技术的市场版图日益复杂,硝烟阵阵。通常的SQL数据库,像SQLServer,Oracle,DB2,Postgres之流,并没有牢牢占住日新月异的市场需求阵地,甚至有人认为,SQL已经开始失去这场战争。然而有些时候也有和谐的地方,SQL和非SQL这双方的界限似乎日渐模糊不清,开发人员们常常做的是取两者之长而综合开发数据库。

非SQL技术的起源

很久很久以前……大约12年前,在当时的技术环境下,方便实用的结构化数据一直占据这主导地位,它通常由数字、日期,以及字符串(字母数字的组合)等数据组成。这类数据能够在行列表格中显示,而且很容易排序。这种特性很受金融公司的欢迎:他们将客户的名字和账户填入表格的行,在相对应的列中输入标题,再把相关数据填入表格,之后就可以使用一种和英语很相近的傻瓜编程语言SQL进行诸如表格融合和查询之类的操作,日子很简单,用起来方便,大家唱着歌坐着小船,没人想过船未来会不会翻。

但是这些数据是动态的存储在操作系统中的,例如企业资源规划系统(ERP)之类的系统。用户可以从中获取来诸如销售情况或各地分公司的业务情况等的信息。这也导致IT部门很讨厌这种方式,因为他们担心数据访问操作很可能会威胁到火车…哦不,是操作系统的运行。因此数据又被划分为可读写操作数据和只读分析数据,并由此派生出数据库。但这种做法也使得分析数据来需要的操作越发复杂,并且数据存储量也越变越大,数据库不再像SQL那么使用便捷。

在金融交易行业的需求下,基于SQL的关系数据库应运而生。其设计原则为“ACID”:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这些特性保证了每个时间点只允许有一个对数据的修改操作,这样就避免了交易冲突。如果你在波士顿从一台ATM上取款50美元,而同时你的另一半想在东京从同一个账户上取款美元,那么数据库必须正确响应这两个操作请求,如果余额不足,其中一个请求就会被拒绝。而这其中的一致性意味着,任何用户在无论何时何地访问任一数据库服务器,他所获得的结果都能相同。

ACID原则保护了数据的安全,可是却并没有给数据的读取带来便利,正相反,就像加上了超级防弹重甲,我们的小船越来越慢。SQL数据库用来保护数据一致性的数据库锁机制会时常妨碍数据的读取。“来自网络的海量数据访问,对于SQL数据库,很像一场规模极大的网络攻击,”数据库技术供应商VoltDB的市场总监DennisDuckworth说道,“数十万人希望同一时间访问同一个数据源。”这种情况下,服务器就“树獭”化了,“服务不可用”是大多数人获得的结果。因为当太多用户试图在同一时间进行数据交换时,努力维持数据一致性的数据库会很容易陷入一种死锁状态,应对海量访问并不是关系数据库的长项,数据库的小船说翻就翻了。

那么该如何解决这个问题呢?一种方案是往性能高大上发展,来,翠花,上航母,购买更强大的服务器——比如HPSuperdome服务器等等。但是这种方式成本惊人,各种烧钱,向来很扣的用户怎么舍得花钱。所以大多网络公司选择从广度上出发购买大量便宜的商用服务器,构建基于数百甚至数千台服务器的分布式数据库,上不起航母,就来个潜艇编队吧。

而在金融交易领域之外,还有一些数据的实时性并不总是那么重要的应用领域,比如当服务器忙于更新时,你获得的数据过时个几秒几分钟并不影响什么的情况。以谷歌搜索为例,它的搜索引擎为整个公开的互联网每天编制索引,但是,谷歌不可能在每个用户输入关键词进行搜索时,都搜索一遍互联网,然后马上给用户反馈最新的搜索结果。谷歌只提供最接近搜索时刻的结果,就像疯狂动物园里“思聪”慢悠悠报的车主信息,虽然慢,但一样准确啊,这就足够了。

这种粗枝大叶的做法,金融业当然是不会接受的,但是在一些需求快速响应不拘小节的应用场合,这种技术真是刚刚好。

非SQL数据库常被应用于“大数据”任务之中,处来理不同格式的海量数据,时下大致有这样几类:

栏式数据库,用来处理海量的简单格式化数据,如日志文件等。像谷歌的Bigtable:一个面向列的分布式数据库,其任务是处理网络搜索以及页面服务(比如页面索引、MapReduce、谷歌地图、谷歌图书搜索、搜索历史、谷歌地球、谷歌博客、谷歌代码、YouTube和Gmail)中包含的结构化数据。

关键值及其他非结构化数据库,如MongoDB,它们基于程序员自定义的规则来梳理海量非结构化数据,包括文本和页面等,以取得关键数据。

极低延迟大数据流高速数据库。在各种迥异的需求刺激下,产生了多种被统称为“非SQL数据库”的技术,有些也被称为“新SQL”技术。这些新技术基于SQL关系数据库,但进行了大量调整,以面向处理大数据的需求。VoltDB就是一种高速的新SQL数据库。而Couchbase是另一种更通用的高速非SQL数据库。

认识这只呆萌的玩具小象么?

Hadoop并不是一个真正意义上的数据库,但是你在使用数据库的时候会无可避免的碰到它。它提供了一种廉价的方式来存储数据,用户可以随时随地的对该数据进行操作。现在Hadoop特别火,在互联网上的应用比比皆是,Facebook,eBay,Etsy,Yelp,Twitter和Salesforce统统都有它的踪影。此外它在娱乐,能源管理和卫星图像处理的实体公司中也有一席之地。这些公司用它来分析所采集的各种不同格式的数据。它的发展势头惊人,有预测显示,Hadoop的市值在年有望达到亿美元。

Hadoop始于谷歌一项名为MapReduce的技术,该技术在计算机集群网络(计算机编队…)上运用并行分布式算法来处理和生成大数据集。谷歌发表过几篇关于MapReduce的论文,接着雅虎公司的程序员将它带入到开源的Apache环境中去。而MapReduce也最终演变成了雅虎公司所希望的能解救公司搜索引擎困境的灵丹妙药:一个开源软件平台Hadoop。Hadoop从社交媒体、用户和金融界收集数据,并通过MapReduce将该数据存储到数据仓库中。这使得它在分析网络上大量涌现的海量数据时比以往的技术更方便成本更低。不知道吧,Hadoop的命名其实来自于一只呆萌的玩具小象,现在这个发展势头,是不是得换猛犸象了。

但是Hadoop并不是万金油。与SQL这种简单易用的语言相比,只有经过专业培训的大数据专家才会使用。因此开发人员推出了很多诸如Cassandra,HBase,Hive,Pig和ZooKeeper之类的接口软件来帮助用户驯服这头听不懂SQL语言的大象,但是这并不能解决根本问题,Hadoop还需要一个前端界面。可是想要真正骑上这头大象,需要做的不是一点两点,去看看这个Gigaom三年前做的像千层饼一样的介绍图吧。

当时在TokBox公司担任工程经理的大数据工程师帕特里克.李(PatrickLie),在负责开发一个将视频、语音和信息嵌入到网页和手机apps中的软件平台WebRTC时,第一次接触到了Hadoop。他们用Hadoop在服务器日志和用户通讯中挖掘包括视频比特率之类的信息。PatrickLie说,这项工作涉及“大量的数据处理”,是应用Hadoop的一个经典案例。

“每天有数十万行的数据”李说,“我们读取这些数据,并对其进行处理使得它能够被分析师使用。。。。。。处理速度不在我们的考虑范围中,我们要做的就是把数据通过流程变得更为简洁易用。只有经过这样处理的数据后才能交付用户使用。”

这儿有段经典的分析,从中你可以看出李的团队从Hadoop中得到了些什么分析结果:TokBox拥有一套浏览器视频会议技术。不同浏览器的视频性能不同。李的团队收集到诸如浏览器种类、视频比特率以及基于IP地址分析的用户所在地等信息。通过汇总大量用户的信息,TokBox就能得出诸如“哎呦,不错哦,在瑞典,Chrome比IE更好用!”之类的结论。

理论上,这些任务SQL数据库也可以做到。李说,“但是如果使用传统的SQL数据库,除非你烧大量的钱去准备硬件,要不说不定你这辈子都运行不出什么结果。在Hadoop出现以前,如果想要做这些事情,就必须自己编写代码。”当然,好像SQL和非SQL之间并不是非黑即白,泾渭分明:TokBox公司仍然使用着SQL数据库。李的团队将Hadoop的输出存储到到SQL数据库中,这样使得分析师们的查询工作变得更加容易。

当然有些应用场合我们的大象就无能为力了,比如如果用户需要得到实时数据时,Hadoop就没有办法独当一面了。李认为如果你想要实时性,就得倚靠那些基于Hadoop之上的技术了,单打独斗的话,这头大象在实时领域严重水土不服。

另一个Hadoop应用潜在的问题是容易出现低效查询或者是一些误操作。一个常犯的错误就是选择了错误的关键值(这决定了生成键值的数量),好比说你在映射阶段选择了一个错误的一百万以内的随机数做关键值,那么,可能发生的是你会得到一百万个关键词,要处理这些少则一小时,多则可能一天,这将导致效率变得极为低下,而这种错误很容易产生。

Hadoop分公司Hortonworks的CTO,ScottGnau谈到:Hadoop的应用案例已经渗入到需要网路数据采集的各行各业,包括诸如零售业、医疗和汽车物联网等多个行业,甚至金融业,这可是SQL的大本营。当你去医院看病时,会产生大量的的结构化的标准数据或非结构化的比如图片照片pdf类数据。比如像病人信息、医生信息、诊断预测、X光片、CT片、药物过敏测试报告、检查报告、医疗保险付款人、医疗保险公司、医疗器械和药品生产商等等等等。这一切数据在Hadoop大象诞生之前,都是只能深埋地下,带着金边眼镜的SQL数据库前辈根本挖掘不了。

“30年来IT行业墨守的成规就是瀑布式研发模式。”Gnau说。“首先发掘客户,然后将他们集中起来,搜集需求,进行设计,分析数据结构,报告,实现,最后将产品提交给用户。再简练的开发也是始于需求调研,止于产品提交。没有变过”。

但是当有了Hadoop,一切都不一样了,年轻人,瀑布的水是可以倒流的。面对大量非结构的数据,幸福来得太突然,像要老虎吃天一样,客户可能自己也不知道自己的需求是什么,我们做的是通过发掘数据,分析其中潜在的吸引兴趣的关联所在,然后再生成需求,开发系统,回馈给用户,虽然倒行逆施,可是潜力无限啊,多人性化。

在网上查什么是数据库时,出现了七八个五花八门的答案……

MongoDB

除了上面那个几乎不能被称为数据库的Hadoop,这世上还有各种各样五花八门的数据库。在DB-Engines给出的项数据库技术排名中,MongoDB位居第4,是最受欢迎的非SQL数据库。

Wanderu从3年半前开始使用MongoDB数据库,这个时间点比网站可靠性架构师MattWarren入职还要早6个月。Wanderu的网站基于一个文档库,这个库的管理协议是一种基于JSON,MongoDB称之为BSON(BinaryJavaScriptObjectNotation)的私有协议。

Warren不记得在走非SQL技术这条路之前,公司用的是什么SQL数据库了,但是他记得,现任架构师来看了这个SQL数据库之后说,快拉倒吧。

“他认为原先的SQL解决方案试图解决的事情太多,”Warren说,“它要存储大量分支数据和路线信息,但是这种复杂的架构费时费力,但仍满足不了需求,吃力不讨好。其实有一类图形数据库正好迎合了这种需求,它能够将复杂的数据图形化,并且能够输出一系列完美的文档,关系以及路径需求。因此我们所做的是把MongoDB作为主要数据库来存储所有独立单元化的旅程。当需要为用户提供不同地点之间的路线信息时,我们会先查询图形数据库NEO4J,然后将结果返回MongoDB,再整合数据,把最后结果在网站上承给用户。”

用过MongoDB的网站开发人员都沉溺其中,无法自拔。它实际上起源于黑客松(hackathons,即黑客马拉松或编程马拉松-以电脑为跑道、以编程为体力的一场技术比赛)。你懂的,IT业常常是黑客引领潮流,财富榜强企业现在有30家都在用MongoDB。MongoDB战略副总裁KellyStirman宣称,MongoDB是第一个贴心的从设计阶段就着力于让开发者拥有“最大成效”的数据库。

“如今开发者致力于面向对象编程语言,他们思考和管理数据的方式和传统的关系数据库的运作方式大不相同。”Stirman说,“如果你了解过黑客松,你会发现,对黑客来说,开发效率具有无与伦比的价值。MongoDB比任何其他数据库更能提升你开发app的速度。黑客的最爱也是企业的最爱。如果我们开发app的速度比竞争对手更快,那么我们就能赢得先机,也就能更快地适应市场,随机应变。”

Stiman说,在关系型数据库支配着市场的时代,开发app最大成本在于硬件和存储。相对于硬件成本,开发所需时间的成本不值一提。但现在,在亚马逊(Amazon)上租用服务器一小时才几毛钱,因此开发时间成本变得举足轻重。

Stirman透露,在过去的一场黑客松大赛中能够,黑客们想挑战大都会人寿保险公司(MetLife)耗费数年来建立的一个基于关系数据库的中央用户呼叫应答中心。该中心负责了所有的保险产品业务,比如车险,人寿险和房屋险等等。而黑客们只用了数小时就把在MongoDB上构建这个数据库的需求整理出来,然后仅仅用了三个月时间就完成了产品开发。

YouGov是一家从事国际互联网市场调研的公司,它也是MongoDB的忠实客户。其CTOJasonCoombs说,自从升级到最新版本MongoDB3.0后,公司的存储需求降低了70%。就是说,通过WiredTiger节点(WiredTiger是MongoDB3.2系统的默认存储引擎)对数据的压缩复制,YouGov比以前节省了70%的存储空间。

有了MongoDB,Coombsr认为YouGov如虎添翼。面对每个小时涌入5GB的海量数据,YouGov现在不但能够轻松归档存储,而且一览无余,查询这种事情不过随时随地的小菜一碟。

YouGov曾考虑过用MicrosoftSQLServer,但它实现不了若干重要的功能。所以目前YouGov运行了两套相互竞争的信息检索系统:一个是基于Microsoft.NET,另一个是基于Python和MongoDB。后者的开发速度更快,Coombs说道。YouGov仅仅使用了SQLite来存储聊天文本,但说起搜索响应时间么,我们只能呵呵了,树懒你知道么。

另外,YouGov也将关系型数据库Postgres作为默认数据库之一,与MongoDB一起使用。YouGov用Postgres来跟踪分析师和他们的联系方式,并通过跟踪他们的偏好和观点来推测他们的身份。以此来获得分析师对于产品推向市场后的反应。Coombs说道,MongoDB也处理这些,但作为多列式键值对数据库的Postgres也完全能胜任这项功能。

Couchbase

此Couch非彼Couch(原意:沙发躺椅),是“ClusterOfUnreliableCommodityHardware(不可靠商业硬件集群)”的英文缩写。Couchbase是一种开源的、非SQL的、分布式的、基于JSON的文本存储的服务器。

根据CAP或布鲁尔定理(CAP即:一致性consistance,可用性avialability和分区容错性Partitiontolarence,一个分布式计算机系统最多只能满足三项中的两项),Couchbase被认为是一个CP(一致性和分区容错性)类型的系统。

实际上,Couchbase服务器是CouchDB的一个副产品。CouchDB作为一个受到LotusNotes启发并由DamienKatz创建的开源数据库,可以在非Apache模式下和Couchbase协同工作。Katz提到Couchbase的优势就是用户规模,以及无需离线就可做到增减分类用户的弹性模式。

Katz说到:“许多公司都预期他们的服务器有可能会面对大量用户突然出现这样的用户涌动,就像双11一样,乌泱泱一下几百万用户嗷就来了。”而他们也不确定,万一没这么火呢。如果前期就做大量投入来架设大数据库,买了艘泰坦尼克,最后就来了一个旅客,不是亏大了么。Couchbase正好是面对这种需求的。它可以实时的按照需求扩容,这样这些公司就不用在无需额外容量时多投入。网络游戏是这种特性的主要对象。网游公司希望玩家数据库在玩家增多时不断扩充,而不需要开始一切都不确定时,就花大钱来搭建一个大容量数据库平台。

这儿有一个使用Couchbase数据库的手游案例。玩家根据想表达的东西画图,对方来看图猜物。这款产品大获成功,上线五周被下载超两百万次。

Couchbase的CEO,BobWiederhold认为容量可扩充性还有更大潜力。比方说应对像双十一这种疯狂的购物节这类的用户数量会大起大落的情况。这种技术学名叫XDCR(跨数据中心复制技术,即将数据从一个计算机集群复制到另一个集群),主要是用来做灾难性存储事故数据恢复的。Wiederhold也谈到,Couchbase还能很好的屏蔽一些非法的私人数据转移。斯诺登揭开老美的面具后,欧洲国家一下兴起了对这项功能的追捧。

一路走来Couchbase已经成长为一个更加通用的数据库,像甲骨文一样,满足了更多行业的不同需求。“五年前,梦想开始时不过只是一块小小的缓存。那时我们仅仅推出基于缓存的技术方案。然后我们不断发展开始做关键值数据库,这使得我们的产品适配于更广阔的技术领域。接下来我们不断改进产品直到真正成长为文档数据库,能够对存储的JSON文档建立索引。”

但是在这个瞬息万变开发领域,Couchbase的灵活性似乎还不够。Wiederhold表示4.0版就会解决这个问题。届时,Couchbase将推出名为N1QL的数据库查询语言,该语言遵从SQL语法,意图融合SQL的强大功能和JSON的易用性于一体,Couchbase将更加灵活易用。

“我们首先聚焦于满足少数几种主要需求,”Wiederhold说,“产品被市场接受后,我们再不断扩充功能。4.0版本将会是一款真正意义上能满足广泛需求的通用数据库”

VoltDB和SQL王者归来

年,互联网突然出现数据井喷,SQL日渐拙于面对这个局面,面向对象数据库技术开始被频频应用,似乎一代新人要换旧人,大家都在一旁冷眼相看,这位昔日之星,是否像条喇叭裤一样慢慢过气褪色。然而大家始料未及的是,SQL韬光养晦,借助新的数据技术在年浴火重生,以NewSQL之名,重返舞台。NewSQL像非SQL数据库一样,拥有极高的可扩充自由度,支持在线交易处理,并且同时也像传统的关系数据库管理系统一样,支持ACID原则。

VoltDB就是一个基于NewSQL的分布式并行内存关系数据库的例子。它的表现证明SQL仍有相当生命力。该公司的发起人之一是MikeStonebraker,年度ACM图灵奖获得者,他同时也是今天市场上多款关系型数据库的专家——包括Ingres和PostgreSQL。

回忆一下Brewer法则:在一致性,实时可用性和可分区性中三选二,你会选择满足哪两项?一些非SQL数据库设计者认为实时可用性最为重要,一致性可以放弃。而其他一些传统SQL开发者认为一致性最重要,你在波士顿写入数据库的内容必须与日本读出的数据一致,因此实时可用性可以放放再说。

然而作为SQL一员,VoltDB的开发者的想法却于同僚背道而驰。“Volt任务数据必须实时可用,”Volt公司市场总监DennisDuckworth说道,“Volt认为数据像海鲜水果一样越新鲜越好,时间长了容易变质。对数据我们也要即摘即食。想想各种机器装置里传感器吧,假如某个温度传感器突然检测到温度过高。你肯定想尽早报警尽早处理。但如果一周以后你才响应,机器早就烧成灰了。使用VoltDB,就可以实时捕捉升温信号并发出警报,同时立即关闭系统。“快数据”,“大数据”,孰重孰轻,要看场合了。”

Duckworth提到,金融行业不同于其他行业,同一账户在所有系统中的数目必须一致,这点至关重要。而非SQL真的做不到这一点。无论何时,金融业务数据库都必须满足ACID准则。

“非SQL阵营的码农们可做不到这一点,”他说,“就算他们想试试,你想想,一个做应用软件开发的,得码多少代行程序才能保证一致性,靠的住么?”

尾声

脉络越来越清晰,其实SQL技术和非SQL技术不但并不是水火不相容的死对头,而且更像一对相辅相成的基友,虽然各有所长,但也在不断的相互渗透集成。大公司的屁股扭一扭,我们就知道技术会往哪里走,你看,微软,甲骨文以及天睿目前都在推广集成了Hadoop和SQL的非结构化大数据分析。

天睿公司娱乐系统部经理DanGraham表示,该公司主要是由于网飞这个大客户的需求才转向了Hadoop技术。在网飞的不断敦促下,天睿将所有的数据移动到亚马逊云端。今天,网飞几乎所有的影片和其他数据都存储在了云端。天睿通过亚马逊Hadoop和天睿云Hadoop的混合运行环境来应对监控、维护和安装方面的重荷。从这里出发,天睿开始销售Hadoop,并且通过自己的SQL查询优化技术来为商业客户服务。

“如果你明确知道自己想要做什么,就会发现Hadoop跟我们并不是竞争关系,”Graham说。“他们俩就像卡车和宝马。他们之间有竞争么?要硬说有,好吧确实有点,比如你想搬家或者运水泥,你不会开宝马的。其实更重要的是你要知道自己需要什么,在工程上做出最佳的选择。”

LisaVaas是一个波士顿的自由职业技术记者和博客写手,专精于撰写关于数据库技术、信息安全、职业和应用跟踪系统方面的报道。









































广西白癜风医院
全国哪家医院治疗白癜风最好



转载请注明:http://www.xcqg58.com/pxxx/1068.html