NoSQL专题

NoSQL概述介绍(2)

上页

  下面讨论一下NoSQL数据库数据库类型,NoSQL数据库大致可以分为四种类型。

 

键-值数据库

  键值存储是从一个API使用角度来看最简单的NoSQL数据存储。 客户端可以通过Key获得值,或从数据存储中删除一个KEY。 数据存储的值是一个blob存储,不关心或知道里面是什么,这是应用程序的责任。 由于键值存储总是使用主键访问,他们通常有很高的性能且可以很容易地扩展。

  一些流行的键值数据库 Riak 雷迪Redis (通常被称为数据结构服务器),memcached 和它的口味, Berkeley DB HamsterDB (尤其适合嵌入式使用),亚马逊DynamoDB(不开源),伏地魔Voldemort 和项目Couchbase 

  键值数据库之间是不一样的,这些产品之间有重大差异。例如:Memcached数据没有持久,而Riak有,这些特性在实现特定的解决方案是重要的,比如选择缓存时,memcached意味着当节点的所有数据丢失,需要从源系统刷新。如果我们将相同的数据存储在Riak我们可能不需要担心数据的丢失,但我们还必须考虑如何更新陈旧的数据。 根据您的需求来选择一个键-值数据库。

键值NoSQL数据库

 

文档数据库

  文档是文档数据库的主要概念, 数据库存储和检索如XML、JSON、BSON等等文档。 这些文件是自描述的,分层树数据结构可包括Map、Collection和标量值。 文件存储彼此相似,但是并不需要完全一样。 文档数据库存储文档作为键值的值存储;考虑文档数据库的值可参考键值存储。 文档数据库如MongoDB提供丰富的如数据库的查询语言和结构,、索引等,允许从关系数据库更容易转变到MongoDB上来。

  一些流行的文档数据库我们已经看到 mongodb CouchDB terrastore ,OrientDB ravendb ,当然使用的知名而且经常骂Lotus Notes文档存储。

document nosql

 

列存储

  列族数据库存储的数据列家族,有很多列与行相关联的行键。 列的家族组是经常在一起访问的相关数据。 比如我们经常会在同一时间访问客户的个人信息,而不是他们的订单。(列家族内是聚合数据)

  每一列家族可以比作一个容器,在RDBMS表中有的行键标识行,每行包含多个列。 所不同的是,列存储的各种行不需要有相同的列,列可以添加到任何行,也无需将其添加到其他行。

  当一个列包含一个Map,我们就有一个超级列。 一个超级列包含一个名称和一个值,这个值是列的Map。 超级被认为是一个列的容器。

  卡珊德拉Cassandra 是一个流行的列族数据库;其他如 HBase hypertable ,亚马逊DynamoDB。 卡桑德拉可以被描述为快速和容易地分布在集群中进行可伸缩的写操作。 集群没有主节点,所以任何读和写可以由集群中的任何节点进行。

列家族NoSQL

 

图数据库 

  图数据库允许您存储实体和这些实体之间的关系。 实体也被称为节点属性。 可以认为一个节点是应用程序中的一个对象实例。 关系被称为边缘,可以拥有属性。 边缘具有方向性意义:节点之间组织的关系,能让你在节点之间找到有趣的模式。 图库的数据的组织是存储一次,然后以不同的方式解释基于关系。

图数据库NOSQL

  通常,我们在RDBMS存储图的结构,这是一个类型的关系("谁是我的经理"是一个常见的例子)。 添加另一个关系通常意味着大量的模式变化和数据移动,当我们在使用图数据库并非如此。 同样,建立关系数据库模型图是基于遍历方式,如果遍历方式发生变化,我们还必须改变数据。

  在图数据库,遍历连接或关系是非常快的。 节点之间的关系在查询时间几乎是不计算的,实际上是持续的关系。 遍历持久化关系比实时计算查询要快。 

  节点可以有不同类型的关系,让你代表域实体之间的关系,还有其他关系:类别Category,路径Path,time-trees,利用空间索引或链表排序的访问。 由于没有限制数量,一个节点可以有任何类型关系,他们都可以在相同的图数据库中。

  在图数据库中关系是一等公民;大多数图数据库的价值可用于人际关系表达。 关系不只有一个类型(一个开始节点和结束节点),也可以有自己的属性。 使用这些属性的关系,我们可以将智能添加到关系中,比如他们什么时候成为朋友,节点之间的距离或节点之间共享哪些方面。 这些属性都可以被查询。

  因为大多数的图数据库强项来自关系及其属性,因此设计工作模型的关系领域需要大量的思想和设计。 添加新的关系类型很容易,改变现有节点及其关系类似于数据迁移。

  有许多可用的图形数据库,如 neo4j Infinite graph OrientDB ,或 FlockDB (这是一个特例:图数据库,只支持单一深度关系或邻接列表,你不能遍历超过一层关系的层次)。

 

为什么选择NoSQL数据库

  在新世界的NoSQL数据库做出决定有许多需要注意的问题。 这里有一些为什么使用NoSQL数据库的原因。

  • 通过使用数据库提高了程序员的工作效率,更好的匹配应用程序的需求。
  • 通过某种组合来提高数据访问性能,能够处理更大的数据量,减少延迟,提高吞吐量。

  要使用NoSQL技术性能之前需要测试。 因为大多数的NoSQL数据库是开源的,测试是一个简单的工作,下载这些产品和建立一个测试环境即可。

  即使现在不能使用NoSQL,设计系统时使用服务封装以支持不断变化的数据存储技术需求和技术发展。 分离的部分应用到服务中还允许您将NoSQL引入现有的应用程序。

 

如何选择NoSQL数据库

  针对如此多的选择,我们如何选择某个NoSQL数据库? 这在很大程度上取决于系统描述的需求,以下是一些一般准则:

  • 键-值数据库通常用于存储会话信息、用户配置文、,偏好、购物车数据。 查询数据时我们会避免使用键值数据库存储的数据之间的关系或我们需要同时操作多个键。
  • 文档数据库通常用于内容管理系统,博客平台,网络分析,实时分析,电子商务应用ecommerce-applications。 需要复杂的跨多个操作的事务或查询不同的聚合结构时我们会避免使用文档数据库系统。
  • 列族数据库通常用于内容管理系统、博客平台,维护计数器,使用,到期重写日志聚合体容量等。 在早期开发中查询模式的预期会改变下我们会避免使用列族数据库系统。
  • 图数据库是非常适合的问题空间,连接数据,如社交网络、空间数据,对商品和钱路由信息,推荐引擎等

 

非模式化的影响

  所有NoSQL数据库都是非模式化,这意味着没有数据库模式执行。 强大的模式数据库如关系数据库,可以用于固定的数据迁移模式。 非模式化数据库仍然需要小心迁移,由于隐式访问数据的模式存在任何代码中。

  非模式化可以使用相同的数据库迁移,在非模式化数据库我们也可以读取数据的隐式模式方式能够宽容的变化数据,然后使用增量更新数据的方式迁移,可以经受零停机时间部署。因为24 * 7的系统是使他们更受欢迎的原因。

 

结论

  所有提供的选择NoSQL数据库的崛起并不意味着RDBMS数据库灭亡。 我们正在进入一个通晓多种选择的持久性的时代,使用不同的数据存储技术来处理不同的数据存储需求。

 

原文 :NoSQL DataBase Overview

NoSQL数据建模