选择障碍症患者的福音:NoSQL类型知多少

Posted 技术风向标

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择障碍症患者的福音:NoSQL类型知多少相关的知识,希望对你有一定的参考价值。

在已经有超过225种NoSQL数据库的今天,当有数据存储需求时你知道该选哪种数据库吗?谁才能真正满足你的需要?选择障碍症犯了怎么办?


首先,你得知道它们各自的专长都是什么。下面就来探讨一下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数据库共存。对数据库的选择应当是基于数据存储本身的特性,以及所预估的数据量。

另外,看完之后是不是选择障碍症状又加重了?

回复数字浏览风向标近期热门文章
1. Facebook工程师的发展之路
2. 这些常用算法,你知道它们都被用在哪里吗(上)
3. 这些常用算法,你知道它们都被用在哪里吗(下)
4. 产品经理应该懂技术吗?
5. 经典算法排行榜,你用过几个?
6. 到底哪个才是最好的编程语言,谁说了算?



以上是关于选择障碍症患者的福音:NoSQL类型知多少的主要内容,如果未能解决你的问题,请参考以下文章

厌食?暴食?试试这个 VR 新疗法

INT类型知多少

TypeScript Interface vs Type知多少

拖延症重症患者。。的自察

元素类型知多少

TED 你有拖延症吗? Tim Urban