转角遇到NoSQL

时间:2022-09-04 03:36:19

【摘要】近年来nosql运动来势汹汹,大有一夜颠覆关系型数据库之势,以Orcale为首的传统关系型数据库厂商面临巨大压力,在如此环境下,传统数据库该如何发展,成为众多厂商思考的问题。nosql的支持者推崇其性能优势,尤其是大数据时代的到来,他们认为nosql技术可以打破关系型数据库的性能瓶颈,给数据库的发展带来革命性的意义。的确,对于关系型数据库,存在一些性能瓶颈,但是大多是由于在数据库设计之初对表和表的关系,索引的建立等等规划不好造成的,所以关系型数据库的性能在我看来是有机会在设计上使其大大提高的,这并不能成为nosql替代sql的必然因素。那么在nosql高速发展的今天,nosql是否会成为未来数据库发展的趋势,文末是否该抛开传统数据库,转投nosql的怀抱呢?

【关键词】nosql 非关系型 数据库

一、nosql的优势

由于web和云应用带来了强烈的可伸缩性,使得nosql一下子从默默无闻走向红红火火,究其原因,有以下几点是明显优于关系型数据库的

(一)可以处理超大量的数据

虽然大多数的nosql数据库都被贴上了不同用途的标签,但都有一个共同点:支持大数据处理,比如Mongodb,其名字就来源于一个形容词humongous(巨大无比的),可见其对大数据处理的决心和信心。Zvents公司以BigTable模式搭建的开源数据库HyperTalbe可以每天在搜索引擎中写入10亿单元的数据。BigTable与MapReduce相结合,可以每天处理多达20PB的数据。种种数据表明,在数据量越来越大的压力下,人们正在寻找新的数据库替代方案,而nosql正是不二选择。

(二)易扩展,是云计算的最佳组合

无论是那一种nosql数据库,都是去掉或者减弱了关系型数据库的关系型特性,使得数据之间无关系,这样就使得nosql伸缩起来要比关系型数据库要自如的多,在架构层面上带来了很好的可扩展性,如果你考虑把一套系统数据整合起来,将庞大的数据伸缩需求交给数据仓库后面的海量服务器处理,那么nosql将是一个很好的替代方案。正是由于nosql良好的可扩展性,使得它和云计算结合在一起如鱼得水,云计算服务提供了相对廉价的数据存储平台,又具有庞大的可扩展能力,用户只需要根据需求用多少就要多少,整个平台的大小几乎可以不受限制。

(三)灵活的数据模型

nosql无需事先为需要存储的数据建立相应字段,随时可以自定义存储数据的格式,这一特点也给应用程序编码提供了方便,关系型数据库模型和应用代码对象模型通常以不同的方式建立起来,这导致了不兼容性,开发人员需要将代码映射到关系模型上以消除这种不兼容性,这个过程会消耗开发大量的时间和精力,nosql灵活的数据模型可以显著减少开发时间。

1.低廉的部署和维护成本

大部分的nosql数据库都是开源软件,没有昂贵的License成本。它们甚至可以部署在便宜的PC服务器集群上,相对于传统数据库的高额硬件成本,两者的开销天差地别。nosql数据库维护简单,例如mongodb,只需下载其二进制程序,几乎不用进行配置便可直接运行,你无需为它专门聘请一位DBA。

二、nosql的未来

nosql看起来很美,那么是否sql未来就再无容身之地了呢?当然不是,nosql目前也有很多缺陷的。

(一)nosql无法保证数据完整性

关系型数据库很容易实现数据完整性,而nosql则很难,连nosql的支持者都不得不承认:nosql无法像sql一下保证数据完整性,这就大大局限了nosql的使用范围,有很多类型的企业需要数据的完整性,比如金融、商务类的,sql很容易实现的完整性在nosql中需要通过代码来实现,这一过程无疑增加了风险,如果代码出现BUG导致完整性缺失,将导致不可估计的后果,在这方面,sql的作用是nosql无法替代的

(二)缺乏技术支持

nosql都是开源的项目,没有特定的供应商提供支持,而数据库又是各个项目中十分重要的一层,一旦数据库出现了问题,往往都是很严重的,这时候如果找不到解决的办法,后果不堪设想。nosql想从实验环境走向生产环境,还需要更加稳定的支持。连nosql项目的组织者Oskarsson也表示,他们自己公司用的也不是nosql数据库,连nosql的组织者都不敢在生产环境使用nosql,其它管理员谁又敢做第一个吃螃蟹的人呢?

(三)接口规范化和互操作问题

不可否认,nosql的数据服务接口有待规范,比如DHT,这是一个简单的接口,但仍旧没有标准的语义。每个DHT服务都使用其自己的一套接口。而对于关系型数据库则有一种强有利的准则,对于所有使用关系型数据库的人都有效,比如一个Oracle使用者经过短暂的学习可以很容易掌握SQL Server,而想学习众多的nosql则要付出更多的精力。另一个大问题是不同的数据结构,如 DHT和binary tree,所有这些服务中,指针没有内在的语义。这些服务中,处理互操作性是开发者的职责,尤其是当需要数据被多个服务访问时。一个简单的例子:后台工作由Java实现,Web服务类工作由PHP实现,数据可以被轻易地从两个域访问数据吗?显然,人们可以使用Web服务作为前端数据访问层,但是,NoSQL有可能让事情变得更复杂,并降低了业务敏捷性,灵活性和性能,同时增加了开发工作量。

三、结语

Nosql的产生和飞速发展绝非偶然,而传统关系型数据库能屹立数十年不倒也有其不可替代的优势,如果说nosql一定可以替代sql,我认为就目前的情况来看,是不可能的,甚至nosql想达到mysql目前的规模就十分困难,nosql的革命还有很长的路要走,未来的状况应该是sql和nosql共同发展的局面,nosql可以成为sql之外一种有效的补充方案。

参考文献:

[1]佚名.MongoDB权威指南(第2版)[J].中国科技信息,2014,(5).

[2]潘凡.从MySQL到MongoDB――视觉中国的NoSQL之路[J].程序员,2010,(6).

[3]陈明.NoSQL数据库系统[J].计算机教育,2013,(11).

上一篇:语文课堂,让学生做主 下一篇:量的积累与质的升华写作――在运用中积累,升华...