立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

NoSQL 数据库面面观

  • 2013-11-16
  • 本文字数:2673 字

    阅读完需:约 9 分钟

Alexey Vasiliev 是一位知名的 Web 开发者与 Linux 系统管理员,曾参与开发过多个项目,如 falcon mongodb_logger sht_rails piro 等项目。近日,Vasiliev 就当前各种 NoSQL 数据库的优势与劣势撰文进行了详尽的分析。这些分析与比较将会对广大开发者项目的NoSQL 数据库选型提供一定的帮助与指导作用。

NoSQL 数据库现在已经变得非常流行了,在 NoSQL 这个大概念下实际上包含了大量的方式与项目,旨在实现各种数据库模型,他们与传统的关系型数据库管理系统存在着非常大的差别,而传统的关系型数据库系统是通过 SQL 的方式来访问数据的。在 NoSQL 领域中,传统观念中的模式可以通过不同的数据结构来实现,如散列表、数组、树、图等等。

术语“NoSQL”最早出现在上个世纪 90 年代末期,然而真正为大家所熟知则是在 2009 年中期。起初,它只是由 Carlo Strozzi 创建的一个小型开源数据库,将所有数据以 ASCII 文件的形式存储,并使用 shell 脚本而非 SQL 来访问这些数据。这个数据库与当前的“NoSQL”概念并没有任何相似之处。

Johan Oskarsson 在 2009 年 6 月于旧金山组织了一场会议,讨论 IT 市场的新技术、数据存储与处理等主题。之所以会举办这场会议的主要原因在于 BigTable 和 Dynamo 等新产品的出现。“NoSQL”这个术语则是由来自 RackSpace 的 Eric vans 提出的。这个术语原本就是用在这场会议当中的,也没有什么更深层次的含义。不过最后的结果却是它迅速在互联网上蔓延开来,成为 IT 领域的一个新趋势。随后,Pramod J.Sadalage 与 Martin Fowler 编写了“ NoSQL Distilled ”一书,旨在对日益庞大的 NoSQL 世界进行组织。

现在大约有 150 多种 NoSQL 数据库( nosql-database.org ),下面就来探讨一下 NoSQL 的主要发展方向。

列簇存储

面向列的 DBMS 是这样一种数据库管理系统,它将数据表存储为数据列而非行的形式。从物理上来说,表是列的集合,每一列从本质上来说都是只有一个字段的表。这些数据库通常用于分析系统、商业智能与分析型数据存储。

优点:

  • 可以比较数据,因为在表的一列中,数据通常都是同种类型的。
  • 可以通过便宜、性能一般的硬件实现高速的查询性能;由于压缩的原因,相对于关系型数据库来说,这种方式磁盘上的数据所占据的空间要少 5 到 10 倍。

缺点:

  • 通常没有事务。
  • 对于熟悉传统 RDBMS 的开发者来说存在不少限制。

典型代表:

  • HBase
  • Cassandra
  • Accumulo
  • Amazon SimpleDB

键值存储

你可以通过这种数据库将键值对存储到持久化存储中,随后使用键来读取值。那么对于这种初看起来用途非常有限的解决方案来说有哪些好处呢?在根据键来保存 / 读取值时,系统是非常高效的,因为它没有 SQL 处理器、索引系统以及分析系统等诸多限制。这种解决方案提供了最高效的性能,代价最低的实现以及可伸缩性。

优点:

  • RDBMS 太慢了,SQL 游标的负担过于沉重。
  • 采用 RDBMS 的解决方案来存储少量数据的代价有些大。
  • 没必要使用 SQL 查询、索引、触发器、存储过程、临时表、表单以及视图等等。
  • 由于其轻量级的设计,键值数据库可以很容易实现可伸缩性以及高性能。

缺点:

  • 关系型数据库的限制可以从底层就确保数据的完整性,而键值存储就没有这些限制,数据的完整性是由应用来控制的。在这种情况下,数据的完整性可能会由于应用代码的错误而做一些妥协。
  • 在 RDBMS 中,如果模型设计良好,那么数据库的逻辑结构就能完全反映出存储数据的结构,并且与应用的结构有所不同(数据是独立于应用的)。对于键值存储来说,要想取得这种效果是非常困难的事情。

典型代表:

  • Amazon DynamoDB
  • Riak
  • Redis
  • LevelDB
  • Scalaris
  • MemcacheDB
  • Kyoto Cabinet

文档存储

文档存储指的是用于存储、搜索与管理面向文档的信息(半结构化数据)的程序,其中心概念就是文档。具体的面向文档数据库的实现是不同的,不过总的来说,他们都会以各种标准化格式对数据(文档)进行封装与加密,主要格式有 XML、YAML、JSON、BSON、PDF 等等。

优点:

  • 足够灵活的查询语言。
  • 易于水平扩展。

缺点:

在很多时候原子性是得不到保障的。

典型代表:

  • MongoDB
  • Couchbase
  • CouchDB
  • RethinkDB

图型数据库

图型数据库指的是使用图结构的数据库,通过结点、边与属性来表示和存储数据。根据定义,图型数据库是一种提供了无需索引而彼此邻接的存储系统。这意味着每个元素都包含了直接指向邻接元素的指针,因此没必要再通过索引进行查找了。

优点:

  • 对于关联数据集的查找速度更快。
  • 可以很自然地扩展为更大的数据集,因为他们无需使用代价高昂的连接运算符。

缺点:

  • RDBMS 可以用在更为通用的场景下,图型数据库只适合类似于图的数据。

典型代表:

  • Neo4j
  • FlockDB
  • InfoGrid
  • OrientDB

多模数据库

这些数据库包含了多种数据库的特性。

有两种不同的产品分组可以认为是多模的:

  • 支持多种数据模型和用例的多模数据库。 比如说,ArangoDB 宣称它拥有键值存储的好处,同时还提供了面向文档以及图型数据库的支持。
  • 支持多种模式的通用目的的数据库。 比如说,Oracle 的 MySQL 5.6 支持 SQL 方式的访问,也可以通过 Memcached API 实现键值访问。

典型代表:

  • ArangoDB
  • Aerospike
  • Datomic

对象数据库

数据库中的数据都建模为对象、属性、方法以及类。面向对象的数据库通常适合于需要高性能数据处理的应用,这种应用一般都有非常复杂的结构。

优点:

  • 相比于关系元组来说,对象模型最适合于展现现实世界,对于复杂、多方位的对象来说尤为如此。
  • 使用层次特性来组织数据。
  • 访问数据时并不需要专门的查询语言,因为访问是直接面向对象的。然而,有时也是需要使用查询的。

缺点

  • 在 RDBMS 中,由于表的创建、修改或是删除而导致的模式修改通常并不依赖于应用。在使用对象数据库的应用中,模式修改类通常意味着还要对与当前类关联的其他应用类进行修改。这会导致对整个系统进行修改。
  • 对象数据库通常会通过单独的 API 与特定的语言绑定,只有通过该 API 才能查询数据。在这方面,RDBMS 就做得很好,这要归功于它所使用的通用查询语言。

典型代表:

  • VelocityDB
  • Objectivity
  • ZODB
  • Siaqodb
  • EyeDB

多维数据库

这是针对在线分析处理的一种数据库,它可以从各种关系型数据库中检索数据,并且以某种方式将信息组织为类别和段当中。

典型代表:

  • GlobalsDB
  • Intersystems Cache
  • SciDB
  • Rasdaman

多值数据库

多维数据库的变种。主要的特性是支持使用属性来存储值的列表。

典型代表:

  • Rocket U2
  • OpenInsight
  • Reality

总结

NoSQL 的发展速度异常迅猛,不过这并不意味着关系型数据库就没落了。他们还会在很多场景下发挥着巨大的作用,并且与 NoSQL 数据库共存。我们现在处在多种持久化存储共存的时代,并不存在处于垄断地位的关系型数据库与 NoSQL 数据库。架构师们对数据库的选择将会基于数据存储本身的特性,以及所预估的数据量。

2013-11-16 12:006689
用户头像

发布了 88 篇内容, 共 262.2 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

【微信小程序】——Mobx全局数据共享和分包

海底烧烤店ai

微信小程序 前端 JavaScrip 9月月更

[SSM]前后台协议联调①

十八岁讨厌编程

Java 后端开发 9月月更

轻量化的灰度发布实践技术方案

Speedoooo

灰度发布 ab测试 轻量化

uni-app黑马优购项目学习记录(二)

海底烧烤店ai

JavaScript 小程序 前端 9月月更

FinOps能力成熟度模型启动,灵雀云助力云原生降本增效标准制定

York

云计算 云原生 能力成熟度模型 降本增效 FinOps

讲讲 SaaS 平台的多租户怎么设计

产品海豚湾

产品经理 多租户 产品设计与思考 SaaS平台 9月月更

测试人生 | 二线城市涨薪近10万 ,还能955,这样的机会你想不想要?

霍格沃兹测试开发学社

测试人生 | 毕业2年未满,0经验拿下知名互联网企业30W 年薪,他是怎么做到的?

霍格沃兹测试开发学社

【JavaScript】巩固JS开发中十个常用功能/案例(1-10)

海底烧烤店ai

算法 前端 JavaScrip 9月月更

OceanBase本周活动|从0到1数据库内核实战教程;对话ACE第五期;Meetup广州站

OceanBase 数据库

JS-内置对象API-Array(数组)-(一)-改变原数组的API-篇

Sam9029

JavaScript 前端 9月月更

构建开放、智能的企业数字化转型2.0平台,加速运营商创新升级

鲸品堂

IT 运营商

云渲染和传统渲染农场有什么区别?

Renderbus瑞云渲染农场

云渲染 云渲染农场 渲染农场 Renderbus瑞云渲染

Drug X跨越鸿沟:一个生物科学家的新药研发跋涉记

脑极体

[SSM]前后台协议联调②

十八岁讨厌编程

Java 后端开发 9月月更

ShareSDK 开发过程中常见问题

MobTech袤博科技

ios android sdk

前端食堂技术周刊第 53 期:React Router 6.4、VS Code August 2022、2022 Google 谷歌开发者大会、Meta 开源 MemLab、Vue.js 技术内幕

童欧巴

Vue vscode React

英特尔与 AMD 谁更强?

雨果

英特尔 AMD

安全419《高级威胁检测与响应解决方案》系列访谈——未来智安(XDR SEC)篇

未来智安XDR SEC

网络安全 威胁检测 XDR扩展威胁检测响应

PC端小程序引擎,或许不就未来能解决桌面应用兼容性

Speedoooo

小程序 桌面开发 桌面端 桌面应用

ESP32-C3入门教程 基础篇(一、ADC采样)

矜辰所致

ESP32-C3 9月月更 ADC采样

Flink Collector Output 接口源码解析

JasonLee实时计算

flink 源码

上海交通大学OpenHarmony技术俱乐部正式揭牌成立

Geek_2d6073

[Javaweb]JSON

十八岁讨厌编程

javaWeb 后端开发 9月月更

每日算法刷题Day13-在O(1)时间删除链表结点、合并两个排序的链表、把字符串转换成整数

timerring

算法题 9月月更

ESP32-C3入门教程 基础篇(二、GPIO中断、按键驱动测试)

矜辰所致

GPIO ESP32-C3 按键驱动 9月月更

教你如何一分钟内玩过《羊了个羊》| 傻瓜式操作,包教包会

bug菌

9月月更 羊了个羊 微信小程序-游戏

把收藏力拉满,前端 50 个优质 Web 在线资源~

掘金安东尼

前端 9月月更

在线帮助中心-帮助客户更快上手使用你的产品

Baklib

帮助文档

跟着卷卷龙一起学Camera--Demosaic

卷卷龙

ISP 9月月更

OceanBase 数据库内核实战赛「推荐官」招募令发布,让身边的优秀选手C位出道!

OceanBase 数据库

NoSQL数据库面面观_DevOps & 平台工程_张龙_InfoQ精选文章