非关系型数据库NoSQL的崛起

《连线》杂志网络版近日刊载文章,对NoSQL(非关系型数据库)的来源与历史进行了追溯。文章主要介绍了最古老的NoSQL数据库之一CouchDB,这种数据库的创造者达米安?卡茨受到了在线协作平台Lotus Notes的启发,他的故事有助于帮助解释NoSQL运动的兴起,及为何这种数据库与以往的数据库存在如此巨大的差异。


CouchDB的创造者达米安·卡茨

以下是这篇文章的全文:

在追溯NoSQL运动的源头时,大多数互联网人士都会想到谷歌和亚马逊。

随 着自身网络服务日益取得巨大而成功的增长,谷歌和亚马逊需要新的方法来存储不断增加的服务器所带来的数量庞大的数据,于是两家公司都为此而创造了一个新的 软件平台——谷歌构建了BigTable平台,而亚马逊则构建了Dynamo平台。在这两家互联网巨头发布研究论文来描述其各自的数据存储平台以后,其他 许多公司也都寻求进行复制。

其结果是,一支NoSQL(非关系型数据库)“大军”就此产生,这种数据库是专为在数千台服务器之间运作而设计的。这些新时代的软件平台——包括Cassandra、HBase和Riak等——对数据库市场进行了改造,不仅有助于Facebook和Twitter等诸多互联网巨头的运作,同时也涵盖了更多的传统业务。

“如 果你看看市场上所有的NoSQL解决方案,那么就会发现每一种解决方案都能追溯至亚马逊Dynamo论文或谷歌BigTable论文。”云计算公司 Joyent首席技术官贾森?霍夫曼(Jason Hoffman)说道。“如果谷歌或是亚马逊没人曾写过一份学术报告(来描述NoSQL平台)的话,那么今天的世界将会是个什么样子呢?”

好 吧,如果真是那样,那么世界还将拥有另一种最古老的NoSQL数据库之一,那就是CouchDB。CouchDB的创造者达米安?卡茨(Damian Katz)并未受到谷歌、亚马逊或是其他任何网络巨头的启发,而是受到了在线协作平台Lotus Notes的启发,这个平台最初是在二十世纪七十年代和八十年代开发的。

虽然 Lotus Notes以身为一个电子邮件系统而闻名于世,但事实上它并非只是个电邮系统,同时还是构建依赖于数据库的应用的基础——换句话说,是有组织的信息集合。 通过使用Lotus Notes这个平台,企业能构建从开支申报应用到IT帮助桌面工具等所有东西。卡茨就是构建这种应用的人之一,他从1995年开始就为Lotus开发 Notes应用。他表示,即使是在那时,这个平台也已经展示出一些特性,而正是这些特性让今天的NoSQL数据库取得了如此之大的成功。

正 如其他NoSQL后继者一样,Lotus Notes也同样来自于关系数据库的“领地”。关系数据库是建立在关系数据库模型基础上的传统数据库,借助于集合代数等概念和方法来处理数据库中的数据。 “那是一个复杂的系统,能通过关系数据库让原本难以做到的事情变得简单。”卡茨说道。

从 很多方面来说,卡茨的故事都有助于帮助解释NoSQL运动的兴起——以及为何这种数据库与以往的数据库存在如此巨大的差异。虽然这场运动毫无疑问是取得了 成功,但NoSQL数据库的概念仍旧很难确定下来——“NoSQL意味着如此之多且各有不同的事情,要看你正在讨论什么而定。”谷歌杰出工程师安德鲁?菲 克斯(Andrew Fikes)最近曾这样对我们说道——在整个科技行业中,还有很多人尚未把握到这些新数据库的重要性。

“NoSQL” 其实该算是用词不当,因为NoSQL数据库并不是为了摒弃SQL(Structured Query Language,结构化查询语言,这是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展 名);更好的名称本来应该是“non-relational database”(非关系型数据库)。NoSQL数据库不使用为关系数据库提供支撑的整齐数据图表。

NoSQL数据库拥有两种基本特性:首先,这种数据库能在许多服务器之间延展——允许用户在必要时候扩大运算,甚至是在不同的地理位置之间也可以——其次,这种数据库能给用户带来按自己喜欢的方式架构数据的自由度,正是这第二个特性与Lotus Notes非常相似。

柏拉图式的理想

Notes 平台是受PLATO Notes的启发而创造出来的,后者是一个在伊利诺斯大学PLATO主机上运行的在线社区。PLATO Notes的创造者大卫?伍利(David R. Woolley)曾在1994年写道,这个项目始于1973年,当时还只是一个简单的报错系统。在最开始的时候,人们通过编辑一个文本文件的方式来报错, 但这种方式带来了一些问题。

“那样做根本没有安全性可言,想要确切地知道是谁写了一份报错文件是不可能做到的。”伍利说道。“大多数人都会报错时签上名字或至少是名字的首字母缩写,但没有什么东西能强制他们这样去做。有些时候,会有爱开玩笑的人觉得,删除整个文件是件很有意思的事情。”

因 此,当时年仅17岁的伍利就被分配到了一项任务,那就是创造一个更具结构性的系统来报错。他开发出来的工具允许用户将其报错报告输入到一个应用中去,该应 用会把报告保存为文本文件,并加上用户的姓名和提交日期。然后,支持部门的员工能分屏显示和查看这些文件,就像我们今天的电子邮件客户端一样:报错报告列 表在上面,报告文本在底下。

随后,所有这些信息会被保存为一个大的文本文件,而不是关系数据库。今天,我们将其称为“文件数据库”(document database)。

你可以把一个关系数据库看作一个庞大的电子表格,数据以图表、行和列的方式组织起来。如果你想要增加一个域,那么就新增一列,这一列会在表格的每一行中出现,从而让你的数据变得结构化和统一化,但管理许多无结构性的数据或是以多种方式构建结构的数据则要困难一些。

文件数据库更像是文件的集合,每一个“入口”都是一个文件,而且都能拥有自己的结构。如果你想要对一个“入口”添加一个域,那么这样做的同时不会对其他任何“入口”造成影响。

不久以后,PLATO开发者就添加了更多的Notes应用。到二十世纪七十年代末,他们拥有了一个电子邮件应用,一个一般用途留言板,以及网络游戏等,诸如此类。

在 1984年,雷?奥兹(Ray Ozzie)——一名Lotus开发者,在伊利诺斯大学上学时曾在PLATO工作过——离开了Louts,自己开创了一家名为Iris Associates的公司。随后,Lotus对这家公司进行了投资,双方签署了一项协议,内容是Lotus将拥有使用Iris旗舰产品的独家权利:一个 基于PLATO的企业用系统。

时至今日,许多人都认为Lotus Notes是一个过时的系统,应该像WordPerfect和Novell Netware那样被扔进同一个垃圾桶。但是,Notes为它之后的几乎所有类型的企业通信和协作应用铺平了道路,从微软Outlook电子邮件客户端到Jive Software等社交网络工具再到CouchDB数据库都是如此。

卡茨与CouchDB

1995年时,卡茨以夏季实习生的身份加入Lotus;大约就在同一时间,Lotus被IBM收购。卡茨在Lotus Notes顾问部门工作了一段时间,然后又回到这家公司,加入了Iris团队,当时Iris已被Lotus正式收购。

在 Iris,卡茨对Lotus Notes的精髓作出了改进。他重写了为Formula提供支持的引擎,这是用来开发Notes应用的脚本语言。卡茨表示,当时他远不能胜任这项工作,但 他同时认为自己天生就是要写代码的人。“每完成一个@function,我就跟打了一针毒 品似的;我就像是个瘾君子,在不停地寻找下一个需要修补的地 方。”他后来在自己的博客中这样写道。

卡茨在2005年离开Lotus,加盟了一家名 为Koobie的创业公司;但在不久以后,他就启动了一项事业,目标是将Lotus Notes的思潮带入现代社会,这最终演变成了CouchDB。卡茨曾在一篇早期的博客中谈到这个项目,当时他写道:“Couch就是为网络而从头开始构 建的Lotus Notes。”

最初版本的CouchDB使用一种类似于 Formula的编程语言,但不久以后卡茨就带领这个项目走向了新的方向,从平台转变成了一个专用的数据库。“MySQL是其人气度达到顶峰的产物。”卡 茨说道。“当时如果你告诉人们说,你在开发某种类似于Lotus Notes的东西,那么就会让他们发出惊叹的声音。”

在 这条发展的道路上也存在不少坎坷。在2007年初,卡茨到了Sun Microsystems的MySQL团队工作,放弃了构建CouchDB的工作。但是,这个开源项目吸引了其他的开发者坚持不懈地为之努力,其中著名的 有詹?雷纳德(Jan Lehnardt)和诺亚?斯莱特(Noah Slater)等。斯莱特推出了JSON,在当时以文本文件来对数据进行结构化的新格式。在Sun休陪产假时,卡茨最后替换了整个CouchDB存储引 擎,用XML取代了JSON。在那时,卡茨认识到与使用Formula式的引擎相比,使用网络应用标准语言JavaScript可能是一种更好的想法。 “一旦我们推出JavaScript以后,”他说道,“这个项目就真正腾飞了起来。”

Couch的商业化

在 2007年,“复活”后的CouchDB受到了IBM的关注。不久以后,卡茨的名字回到了这家公司的工资单上,负责全职开发CouchDB。最为关键的 是,IBM同意将这个项目捐给非营利组织Apache基金会(Apache Foundation),这意味着IBM还不得不向开发者和CouchDB用户授权使用该公司的相关专利。这也就是说,IBM将无法起诉CouchDB侵 犯了与Lotus Notes相关的专利。

与此同时,NoSQL运动则全速展开。谷歌和亚马逊的论文令这种模式——此前已经有开源开发者倡导这种模式——变得流行起来,同时也为如何让其在现实世界中运作起来提供了某种深刻的理解。

一 家名为10gen的公司从2007年开始致力于开发一个名为MongoDB的NoSQL文件数据库,用BigTable作为参照模式。“那是完全独立 的,MongoDB、Couch和Lotus Notes两两之间没有太多的平行之处。”10gen创始人德怀特?梅里曼(Dwight Merriman)说道。一年以后,Facebook开放了Cassandra的源码,那是一个NoSQL数据库,整合了来自于Dynamo和 BigTable的概念。到2009年,随着CouchDB、Cassandra、MongoDB及其他NoSQL数据库加速发展,科技博客 ReadWriteWeb提出了一个问题,那就是关系型数据库是否已注定灭亡。

与此同时,当时供职于Last.fm的约翰?奥斯卡森(Johan Oskarsson)主持召开了首次NoSQL会议,无意中给这场原本定义松散的运动起了一个名字。

在 形势一片大好的大肆宣传浪潮中,卡茨、雷纳德和克里斯?安德森(J. Chris Anderson)创立了Couch.io,来对CouchDB进行商业化。到这个时候,一个由麻省理工学院物理学家组成的团队已经开创了一家名为 Cloudant的CouchDB公司,致力于开发自己版本的数据库,这个数据库名为BigCouch。虽然Couch.io(后来更名为 CouchOne)难以在现实世界中找到自己的位置,但很快就通过与另一家NoSQL公司Membase合并的方式找到了自己的立足点。

Membase 需要一名新的首席技术官,而CouchOne则需要一名首席执行官;Couch需要一种更好的方式来将规模扩大至大量的服务器,而这正是Membase所 能提供的;Membase需要一种更好的数据结构,而CouchDB能提供这种结构;很可能最重要的是,Membase拥有被卡茨认为是能够持续运营的商 业模式。在合并以后,新公司和新的数据库都被命名为Couchbase。

但是,此次合 并交易所带来的一个麻烦的结果是与Apache基金会的关系破裂。“我们真的曾付出过很多努力来让这种变化同步发生。”卡茨说道。“但到最后的结果是,与 Apache项目所能达到的前进速度相比,我们需要的速度要快得多。”最终的结局是,卡茨决定放弃他自己创立的项目,全心致力于Couchbase的发 展。在2012年1月份,也就是合并交易完成的一年以后,他在自己的博客上发表了一封措辞强硬的“告别信”,写道:“CouchDB的未来是什么?那就是 Couchbase。”

斯莱特此时已经成为Apache的CouchDB项目负责人,他用一条简短的Twitter消息对此作出了回应:“CouchDB的未来还是CouchDB。”

卡 茨承认,他原本可以处理得更加老练一些,但说到最后,这个故事证明了NoSQL已经变得多么活力四射。开发者仍在顽强地致力于开发CouchDB,哪怕没 有卡茨的参与也还是坚持不懈。Cloudant也仍旧致力于开发CouchDB,承诺将把BigCouch的代码还给这个项目。

Couchbase也正处在发布2.0版本数据库的边缘,此前该公司已经争取到了NTT DoCoMo和AOL等大客户。文件数据库的想法在开发者的脑海中已经生根,这不仅要感谢CouchDB及其诸多分支,同时也要感谢MongoDB所带来的人气。

与此同时,IBM则将放弃Lotus这个品牌名;Notes则将继续生存下去,至少现在是这样。在它的背后可能是最好的年华,但它为未来更多的美好时光搭好了舞台。

附:数据库大事年表

  • 1961年:通用电气着手开发Integrated Data Store(IDS,集成数据存储)。通常来讲,IDS被认为是第一个“完全的”数据库。在今天的NoSQL数据库出现的数十年以前,IDS所做的就是如今NoSQL和大数据的工作。
  • 1967:IBM 开发出Information Control System and Data Language/Interface(ICS/DL/I,信息控制系统与数据语言/界面),这是阿波罗(Apollo)项目的分级数据库。ICS随后变 成了Information Management System(IMS,信息管理系统),与IBM的System360主机整合到一起。
  • 1970年:IBM研究员埃德加?科德(Edgar Codd)发表题为《大型共享数据库的关系模型》(A Relational Model of Data for Large Shared Data Banks)论文,建立了关系型数据库所使用的数学基础。
  • 1973年:大卫?伍利(David R. Woolley)开发出了PLATO Notes,用一个文本文件作为报错系统的数据存储方式。PLATO Notes对随后Lotus Notes的出现形成了影响。
  • 1974 年:IBM着手开发System R,将科德的关系型数据库模型变成了现实,首次使用了SQL(结构化查询语言),随后这个系统演变成了商业化产品IBM DB2。在科德研究的启发下,伯克利大学的学生迈克尔?斯通布雷克(Michael Stonebraker)和尤金?王(Eugene Wong)开始开发INGRES,它随后成为了PostGreSQL、Sybase及其他许多关系型数据库的基础。
  • 1979年:第一个公开可用版本的Oracle数据库发布。
  • 1984年:雷?奥兹(Ray Ozzie)成立Iris Associates,创造了一个受PLATO Notes启发的组合件系统。
  • 1988年:由文件数据库提供支持的Lotus Agenda发布。
  • 1989年:Lotus Notes发布。
  • 1990年:Objectivity发布了期间对象数据库。
  • 1991年:Key-value类型数据库Berkeley DB发布。
  • 2003年:Live Journal开放最初版本Memcached的源码。
  • 2005年:达米安?卡茨(Damien Katz)开放CouchDB源码。
  • 2006年:Google发表BigTable论文。
  • 2007年:亚马逊发表Dynamo论文。10gen开始编制MongoDB代码。Powerset开放BigTable clone克隆版Hbase的源码。
  • 2008年:Facebook开放Cassandra源码。
  • 2009年:科技博客ReadWriteWeb提出一个问题:“关系型数据库是否已注定灭亡?” Redis发布。首次NoSQL会议在旧金山召开。
  • 2010年:Memcached项目的一些负责人与社交游戏公司Zynga开放Membase源码。

非关系型数据库NoSQL的崛起相关推荐

  1. 常见非关系型数据库(NoSQL)推荐介绍

    2019独角兽企业重金招聘Python工程师标准>>> 随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域, 非关系数据库产品的发展非常迅速.而传统的关系 ...

  2. 常见的几个非关系型数据库(NoSQL)、非关系型和关系型的区别

    目录  非关系型数据库的特点 -------------------------------. 1.关系型数据库 ------------------------------------ 2. 关系型 ...

  3. 关系型数据库sql与非关系型数据库nosql

    一.什么是非关系型数据库? 1.非关系型数据库就是区别于关系型数据库的数据库. 2.虽然说起来有点绕嘴,但是非关系型数据库就是因为,关系型数据库处理不了的一些读写问题而产生的数据库 3.我们常用的非关 ...

  4. Java面试题 非关系型数据库nosql

    四:非关系型数据库(nosql) 1:Redis (1)Redis介绍 是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持内存的NoSql数据库之一,数据结构服务器. (2)特点 ...

  5. 非关系型数据库-NoSQL(Redis)

    文章目录 一.什么是 NoSQL? 二.NoSQL 的特性? 三.什么是 Redis? 四.Redis 安装部署 4.1 下载安装包 4.2 编译安装 4.3 修改配置文件 4.4 启动服务 4.5 ...

  6. 关系型数据库MySql与非关系型数据库NoSql

    云计算背后的秘密:NoSQL诞生的原因和优缺点 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoSQL有了非常深入的研究,但是在最近准备YunTable的Chart的时候,发现NoSQL不 ...

  7. mysql同步大师_数据库大师成长日记:您最需要了解的NoSQL非关系型数据库

    朋友们,我们平时使用的数据库,大多都是关系型数据库,包括MySQL.PostgreSQL.SQLServer等.关系型数据库的特点是数据的存储通过二维表格实现,将数据存储在相互独立的表格中. 近年来, ...

  8. 关系型数据库(Relational Database)与非关系型数据库(NoSQL)的区别:(MySQL,Redis,Memcache,MongoDB)

    Table of Contents 关系型数据库(Relational Database) 什么是关系数据库 什么是SQL? 关系数据库的结构 关系模型 关系数据库的好处 数据一致性 隔离性和原子性 ...

  9. MySQL数据库是非关系_MySQL(数据库)基础知识、关系型数据库yu非关系型数据库、连接认证...

    什么是数据库? 数据库(Database):存储数据的仓库 高效地存储和处理数据的介质(介质主要是两种:磁盘和内存) 数据库系统:DBS(Database System):是一种虚拟系统,将多种内容关 ...

最新文章

  1. Android中的各种Adapter
  2. 2022年全球及中国面粉混合物行业发展态势与消费需求前景调查报告
  3. REST WebService与SOAP WebService的比较
  4. 基于jsp+mysql的JSP在线水果销售商城系统设计实现
  5. 如何找到python的安装路径_如何查看python的安装路径
  6. 95-136-040-源码-Operator-Operator简介
  7. windows linux 传文件_2种windows到linux上传文件的方法
  8. 【水题】完美数(打表)
  9. 「MYSQL」MYSQL中的int(11)到底代表什么意思?
  10. 计算机英语知识竞赛题库,大学生计算机基础知识竞赛题库_大学生计算机基础知识竞赛试题附答案...
  11. thinkphp 中英文网站详解
  12. Oracle锁表查看及处理
  13. HDOJ 4944 FSF’s game
  14. 【资源帖】深度学习视觉领域常用数据集汇总
  15. Java保存书店每日交易记录
  16. 如何在matlab中读写segy格式数据
  17. Android 网络图片加载之cude 框架
  18. jquery实现向服务器发送get请求下载excel文件
  19. giflib加载GIF文件
  20. 福大计算机课程表,福州大学课程表(非全日制工程硕士研究生2015年周末班公共....doc...

热门文章

  1. Arm服务器芯片编年史
  2. 百度网盘提速加速方法
  3. 大数据全系技术知识概览
  4. win10在哪找计算机配置,电脑教程:windows10的设置在哪
  5. 4k纸是几厘米乘几厘米_4k纸多大,纸张的大小规格
  6. python使用微信设置-用Python玩微信跳一跳黑科技详细使用教程
  7. 让AI为你制作思维导图 —— ChatMind
  8. 浅谈STM32的三种Boot模式
  9. ESP8266 上电 boot 模式
  10. 这个能力很重要,但大多数人没有