NoSQL数据库是否会像承诺的那样走下去?
本文是对《Will NoSQL Databases Live Up to Their Promise?》一文的简要翻译。翻译中省略了人名、研究机构名称,只翻译了作者自己或者作者引用的他人观点。
【原文下载地址】
与关系型数据库相比,NoSQL数据库最大的优势是它们能高效地处理非结构化的数据,如字符文件、邮件、多媒体、社交媒体等。一些NoSQL数据库可以运行在分布式的环境中,因此可以用多个较廉价的设备来完成一台高性能服务器的功能。
一些NoSQL的支持者认为,NoSQL有更好的性能,这对于大数据的处理是很重要的。
最早提出和使用NoSQL技术的公司是那些在WEB2.0浪潮拥中有大数据量,且数据增长速度极快的公司,如amazon和google。
关系型数据库的局限性:
规模。当数据规模变得很大时,一台服务器就装不完所有的表格了,这时候就需要进行分布式处理。但是将关系型数据库进行分布式处理是不是一件容易的事情,因为将不同机器上的表格join到一起很困难。另外,关系型数据库并不是设计来进行数据分割的,因此对它们进行分布式的功能划分是一件累人又麻烦的工作。
复杂性。关系型数据库需要将数据转换到表格中。当一类数据不容易转换为表格类数据时,其所对应的关系型数据库的结构将变得复杂且难以使用。
SQL。SQL对于处理结构化数据是很有效的,但对于非结构化数据就显得力不从心了。
大量的约束条件。关系型数据库提出了严格的约束条件及数据完备性要求。但NoSQL的支持者认为数据库的使用者通常并不需要那么严格的约束条件,并且不喜欢这些约束条件所造成的成本及为系统增加的复杂性。
由于关系型数据所固有的这些局限性,供应商及用户开始逐渐转向NoSQL数据库。一个关键的事件发生在2007年,amazon发表了一篇论文,介绍了内部使用的Dynamo distributed NoSQL系统。Amazon是最早使用非关系型数据库来存储公司数据的企业之一。
有三种比较常见的NoSQL数据库:
Key-value存储(key-value stores)
正像其名字所暗示的那样,Key-value存储就是使用key来检索value的系统。对于结构化或非结构化的数据,这类系统均可应对。Amazon的SimpleDB是一个网络服务,用来提供云端的核心数据库服务,包括检索和查询数据。它提供了一个简单的API来存储和获取数据。对用户实行按使用量来收费的政策。
Uppsala大学的AmosⅡ是一个科研样机,它可以作为一个独立的数据库系统或作为其他应用的前端来使用。
其他例子还有Scalaris,一个可以用于WEB 2.0服务中的可扩展及分布式的数据库。
列式数据库(column-oriented database)
相比于存储一些列高度结构化的,将行列以统一格式进行规范的关系型数据库相比,列式数据库包含了一个可扩展的列(column),列中存储的是closely related的数据。
这类数据库的代表有Facebook创造的高性能Cassandra,还有Apache开发的分布式开源数据库Hbase。Hbase其实是效仿了Google的Big Table。
基于文件的存储(document-based stores)
这类数据库将数据以文件集合的方式进行存储和组织。在这种方式下,用户可以增加任意多的任意长度的域(fields)到一个文件中。不像关系型数据那样需要受到column数量及每个record记录大小的限制。
这方面的例子有Apache主持的CouchDB,它是一个用Erlang编写的开源、可扩展的数据库,可以说使用任意方式来浏览数据库中的数据。除CouchDB外,还有受到10gen资助的MongoDB数据库。MongoDB数据库是一个开源的文件型数据库,旨在与提供易于使用的又具有良好扩展性的数据库服务。另外,还有Basho Technologies出品的Riak数据库,Riak是一个分布式、可扩展的离散型数据库,它也是开源数据库,并且适用于基于web的应用。
开源
大部分的NoSQL数据库都是开源的,这也反映了全球软件市场的一种发展趋势。
译者注:开源软件的最大好处是可以集众人之力快速将软件开发收敛到稳定版本,其盈利模式一般是通过软件的周边产品来赚钱,如提供技术支持、认证或提供更丰富功能的版本等。
NoSQL的优势与弊端
优势:
NoSQL通常情况下运行速度比关系型数据库快。关系型数据库一般用在商业交易上,因此需要很高的精准度。因此所有的数据都必须满足ACID(原子性、一致性、隔离性、持久性)原则。正是为了满足ACID原则才导致关系型数据库的数据较慢。
为了提高性能,开发人员一般不要求自己的NoSQL满足ACID原则,不过这样会导致在开发一些高精准度的应用时出现问题。
NoSQL速度比较快的另一个原因在于它的数据模型一般比较简单(Kyle Banker, 10gen工程师)。Kyle 说:“这是一个在速度与模型复杂性之间的权衡,但通常情况下牺牲一定的复杂性换取速度是值得的。”
弊端:
①复杂性与开销
由于NoSQL数据库不使用SQL语言,因此它们需要使用手册中指定的查询语句进行操作。在执行一些简单的任务时速度很快,但是当任务逐渐变复杂时,耗费的时间会很长。
②可靠性
关系型数据库天生支持ACID约束,但NoSQL数据库则不然。因此NoSQL数据库无法天然地支持ACID约束所带来的可靠性。如果用户希望NoSQL数据库可以支持ACID约束,那么还需要额外的编程来实现。
③一致性
由于NoSQL数据库并不天然地支持ACID约束,因此它可能无法满足数据一致性,除非手册中提供这样的支持。不提供一致性可以让数据库中的数据更灵活也更容易扩展,但是这也会在某类特定应用中变成一种难题,如银行业务等。
④对技术不熟悉
由于很多组织对NoSQL数据库还不熟悉,因此在挑选产品时没有足够的背景资料来帮助他们进行数据库产品间的对比,也不知道是否NoSQL数据库更符合他们的需求。
⑤有限的生态结构
不像商用的关系型数据库,很多开源的NoSQL应用还不提供商业支持或管理工具。
展望
在接下来的五年中,NoSQL的支持者们会专注于NoSQL的兼容性和管理工具的开发。并且NoSQL技术会大规模的应用在有扩展性需求的非结构化数据上。但是NoSQL的市场份额还是会很小,因为关系型数据库更为成熟而且拥有更多供应商与用户的投资。
在最近的一两年内,NoSQL数据库主要还是被用于特定类型的项目,如分布式项目、大数据量的项目或要求具有良好扩展性的项目,但越来越多不同类型的项目会开始考虑使用NoSQL数据库。
NoSQL数据库并不会取代关系型数据库,但是它会是某些特定类型项目的最佳选择。以后用户在为自己的数据选择数据库时,将会有关系型数据库之外的其他选择。用户将根据自己的需求来选择合适的数据库类型。
作者信息:
Editor: Lee Garber, Computer,
l.garber@computer.org