现今云计算的从业人员对NoSQL一词并不感到陌生,虽然很多技术人员都长期从事关系数据库的工作,但现在他们对NoSQL技术充满期待。对于企业来说,从关系型数据库到NoSQL数据库转变绝对是个需要深思熟虑的大改变。这涉及的不仅是软件的变化,更多的是对于数据存储上观念性的变化。

CouchDB专家兼作者Bradley Holt认为NoSQL并不是反SQL的运动,为对应的工作选择最恰当的工具才是正确的模式。

大多数非关系数据库都具有快速和可伸缩的特性。通过放弃关系存储模型和架构,关系数据库便可脱离由紧密结合的架构所带来对其施加的限制。应用程序也无需再链接数据库内表中的数据。

MongoDB和CouchDB以及RavenDB(RavenDB是基于Mocrosoft .NET Framework编写的)等文档数据库除了某些特定的转换外,通常都是通过HTTP为其提供数据,然后将数据存储为JSON(JavaScript Object Notation)格式的文档,并提供多种语言的API接口。这三款开源的文档数据库都将简洁、速度和可伸缩性作为其设计的重要指标。RavenDB的创建者Ayende Rahien就表示“RavenDB的设计初衷就旨在快速写入并读取”。

NoSQL——关系数据库的有力补充

现今,NoSQL和文档数据库成为关系数据库的有力补充(而非替代品),同时提供了更多的选择。如果企业准备将数据迁移,那么选择NoSQL的重要标准就是要看CAP(Consistency、Availability和Partition Tolerance),也就是我们所说的一致性、可用性和分区容忍性。但CAP原则要求在分布式系统只能选择一致性、可用性和分区容忍性其中的两项。所以如果企业认为一致性是重要的那么关系数据库理应是优先选择的对象。

例如在银行等应用领域,一致性是非常重要的,这要求必须随时考虑每个数据块。而CAP原则中的可用性也不容忽视,某些领域的数据可用性要比等待所有交易数据收集齐全更为重要。最后在水平缩放时,分区容忍性对于文档数据库显得尤为关键。但MongoDB并不支持复杂的事务,只支持少量的原子操作,所以不适用于“转帐”等对事务和一致性要求很高的场合。这就要求需要一个关系数据库来对交易进行过高级别的控制。

文档数据库的关键特性

RESTful HTTP API

RESTful API设计就是为了消除创建松散耦合服务时的依赖关系,这也正是过去分布式体系结构的缺陷。虽然要映射到一些协议需要依赖于元数据的可用性以及方法等,但REST API的设计目标就是不依赖于任何通信协议。

众多NoSQL数据库都可通过RESTful的方式访问。这样可以通过URI的方式建立数据库连接,而查询和命令则通过HTTP实现。MongoDB和CouchDB都提供了特定语言的API接口,以便编写和执行查询、更新。但MongoDB的默认设置仍然是使用TCP与数据库进行连接。而RavenDB则具备基于.NET的客户端API,可简化与数据库的交互过程。

单个记录中的相关数据

大多数人都错误的认为非关系数据库是一种包含没有相对关系结构的记录的文件。而文档数据库中存储的数据包含形状数据——具有节点的树。数据库中的每个记录都是以文档形式存在的。并具备自我描述的功能,而不依赖于任何其他文档。

示例代码1:文档数据库(MongoDB)中的典型事例

{
"name" : "Jim",
"scores" : [ 75, 99, 87.2 ]
}
示例代码2 CouchDB示例

{
"Subject": "I like Plankton"
"Author": "Rusty"
"PostedDate": "5/23/2006"
"Tags": ["plankton", "baseball", "decisions"]
"Body": "I decided today that I don't like baseball. I like plankton."
}

示例代码3 包含字符串数据、数字和数组的简单结构。还可在对象内嵌入对象,以获得更复杂的文档结构。

{
"BlogPostTitle”: “LINQ Queries and RavenDB”,
"Date":"\/Date(1266953391687+0200)\/",
"Content":”Querying RavenDB is very familiar for .NET developers who are already
using LINQ for other purposes”,
"Comments":[
{
"CommentorName":"Julie",
"Date":"\/Date(1266952919510+0200)\/",
"Text":"Thanks for using something I already know how to
work with!",
"UserId":"users/203907"
},
]
}
唯一键

所有数据库都需要键。如果不提供键系统则会自动在内部创建一个键。键对于数据库的索引功能至关重要。自身域中要求有已知键,在上面的示例代码中存在对“users/203907”的引用。这正式RavenDB利用键值并允许用户定义文档间关系的方式。

以JSON格式存储数据

共同点都是使用JSON存储器数据。事实上,CouchDB和RavenDB(以及其他许多数据库)均采用JSON格式存储数据。MongoDB对JSON使用称之为“二进制JSON”(BSON)的转换,以便能够执行二进制序列化。BSON是数据的内部表现形式,从编程的角度看开发者不会发现有任何区别。托福答案

JSON的简洁性使其很容易将几乎所有语言的对象结构转换为JSON。 因此,开发者可在应用程序中定义对象,然后将其直接存储在数据库中。这使得开发人员不需要使用对象关系映射程序 (ORM) 不断在数据库架构和类/对象架构之间进行转换。托福答案

MongoDB BSON API的数据类型和约定列表添加了一种数据类型及其他一些数据类型,以便充实JSON中的可用内容。而在一个单元中存储和检索相关数据可提供显著的性能和可伸缩性的优势。数据库不必四处查找常用的相关的数据,因为数据都存储在相同的位置。

类型的集合

与数据库交互时,应用程序如何知道哪一项代表学生,哪一项代表书,以及哪一项代表博客文章? 数据库使用集合这一概念解决了这一问题。 对于与特定集合(如学生集合)关联的任何文档(无论其架构如何)都可在从该集合请求数据时对其进行检索。使用字段来指示类型也十分常见。这只是使搜索过程更加轻松,但哪些内容应进入集合,哪些不应进入集合,由开发者的应用程序决定。

架构灵活的数据库

前面介绍的“示例代码1”包含自己的架构。 每个记录负责自己的架构,甚至负责单个数据库或集合中包含的架构。并且一个学生记录并不需要与另一学生记录相匹配。开发者只需利用此灵活性来提高效率。例如,为什么存储 null 值? 您可以在属性(如“most_repeated class”)不具有值时执行以下操作:

"name" : "Jim",
"scores" : [ 75, 99, 87.2 ]
"name" : "Julie",
"scores" : [ 50, 40, 65 ],
"most_repeated_class" : "Time Management 101"
文档数据库和领域驱动开发

规划域类(可能成为数据库中的文档)时,开发者可查找通常最为独立的数据(例如具有其明细项的订单),并将其作为单个数据结构加以关注。在订购系统中,可能还有客户和产品。但或许会在不需要订单的客户信息的情况下访问该订单,并且可能会在不需要访问使用产品的订单的情况下使用该产品。这意味着,尽管会发现许多机会来包含独立数据结构(如具有其明细项的订单),但这并不表示在某些情形下可以不必或者不通过外键联接数据。

每个数据库都提供各种可用模式的指南,并为用户指明使用哪些模式可以获得最大成功。 例如MongoDB文档讨论称为“上级数组”的模式,它可加快在联接文档时对相关数据的访问速度。

在关系数据库中,重复数据是个错误。 对数据库进行标准化可确保不出现此情况。 使用NoSQL数据库(尤其是分发数据库)时,对数据进行逆规范化是必要且可接受的。

查询和更新

每个数据库都附带用于查询和更新的API。尽管它们可能不是核心API的一部分,但多语言API是通过加载项提供的。其他查询依赖预定义的视图和称为Map/Reduce的模式。此过程的映射阶段使用这些视图,并且各个数据库的映射职责是不同的。映射还使数据库能够跨多个处理器分发查询处理。化简阶段可获取映射查询(如果已分发,则为多个查询)的结果,并将数据聚合到要返回到客户端的结果中。

尽管CouchDB要求开发者通过预定义的Map/Reduce视图进行查询,但MongoDB(也使用视图和Map/Reduce)另外提供执行临时查询的功能。RavenDB允许使用预定义索引进行查询,但也支持临时查询,并将根据开发者的实际运行时查询自动为其创建索引。但在大多数时候,当不采用SQL数据库的已知架构和关系本质时,开发者会丢失的一个功能是执行临时查询的功能。通过严格控制查询,文档数据库能够实现其快速性能。

数据库变革

有许多非关系数据库都不属于NoSQL范畴。但既然这扇门已经敞开,就会鼓舞更多人去探索其可用的功能,并考虑如何改进它。

NoSQL数据库技术特性解析之文档数据库的更多相关文章

  1. CouchBase数据库-一个较新的、发展迅速的nosql数据库技术

    couchbase是一个较新的.发展迅速的nosql数据库技术.2014年,viber宣布使用couchbase替换mongodb,以适应10亿级的用户量,目前,couchbase已大量运用于生产环境 ...

  2. 行业顶级NoSQL成员坐阵,NoSQL数据库专场重点解析!

    NoSQL数据库作为数据库市场最重要的组成之一,它的一举一动都影响着成千上万的企业.本专场邀请了行业顶级的NoSQL核心成员与大家共同展望NoSQL数据库的未来,阿里巴巴.MongoDB.Rediss ...

  3. Redis - NoSQL数据库技术(一)

    NoSQL入门概述(一) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是NoSQL NoSQL(NoSQL - Not Only SQL),意“不仅仅是SQL”: 泛指非关系 ...

  4. 转 开启“大数据”时代--大数据挑战与NoSQL数据库技术 iteye

    一直觉得“大数据”这个名词离我很近,却又很遥远.最近不管是微博上,还是各种技术博客.论坛,碎碎念大数据概念的不胜枚举. 在我的理解里,从概念理解上来讲,大数据的目的在于更好的数据分析,否则如此大数据的 ...

  5. NoSQL数据库技术实战-第1章 NoSQL的数据一致性 传统关系型数据库的ACID

    在看着章节的时候,我简单的回顾了一下关系型数据库的事务处理的ACID原则,其中原子性和持久性比较好理解.由于以前没有深入去研究.关于一致性和隔离性上我产生了疑问,在整理后分析如下:   一致性:书中所 ...

  6. NoSQL数据库技术实战-第1章 NoSQL与大数据简介 NoSQL产生的原因

    NoSQL产生的原因: 关系型数据库不擅长的操作,是NoSQL应运而生的原因: 大量的数据写入操作书上写的是“大量数据的写入操作“,我理解的应该是“大量的数据写入操作”,因为大量的数据写入操作才会引起 ...

  7. NoSQL数据库技术实战-第1章 NoSQL与大数据简介 NoSQL数据库的类型

    键值存储数据库临时性:如Memcached.临时性的键值数据库把数据存储在内存中,在两种情况下会造成上数据的丢失,一是断电,而是数据内容超出内存大小.这种处理的好处是非常快.永久型:如Tokyo Ty ...

  8. 译:为什么使用 NoSQL 数据库

    原文链接:Why NoSQL Database? 向数据时代的转变正在推动 NoSQL 随着各行各业朝着数据时代转变,商业世界正在经历巨大的变革.这是由互联网以及其他二十一世纪新技术--云计算.移动应 ...

  9. 【DB宝46】NoSQL数据库之CouchBase简介、集群搭建、XDCR同步及备份恢复

    目录 一. CouchBase概述 1.1.简述 1.2.CouchDB和CouchBase比对 1.2.1.CouchDB和CouchBase的相同之处 1.2.2.CouchDB和CouchBas ...

随机推荐

  1. COJ 2108 Day7-例1

    Day7-例1 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述   在计算机中,CPU只能和高速缓存Cache直接交换数据.当 ...

  2. weblogic启动报错之未修改hosts产生错误

    报错如下: Enter username to boot WebLogic server:weblogic Enter password to boot WebLogic server: <Ju ...

  3. 5451 HDU Best Solver

    链接: Best Solver 题目分析: 这个题目的关键点是需知道“共轭”. 如 :(A√B + C√D)  和 (A√B - C√D) 是共轭的 这个有一个规律 (A√B + C√D)^n + ( ...

  4. i++和++i的老问题

    对于++j,该式是指先将j的值自加1,然后再取j的值.自增过后参与计算 i的值也为10:对于i++,该表达式是指先取i的值做运算,再将i加1.参见过计算后再自增

  5. baidu面试题

    百度:http://blog.chinaunix.net/uid-26602509-id-3306451.html http://lvwenwen.iteye.com/blog/1504379

  6. hdu 3062 2-sat入门题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3062 #include <cstdio> #include <cmath> # ...

  7. Cookie介绍及JavaScript操作Cookie方法详解

    本文主要为大家简单介绍了以下Cookie的用途.运行机制,以及JavaScript操作Cookie的各种方法,总结的比较全面,希望能给大家带来帮助. 什么是 Cookie “cookie 是存储于访问 ...

  8. JavaScript 操作 DOM 常用 API 总结

    文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前, ...

  9. 在eclipse下编译hadoop2.0源码

    Hadoop是一个分布式系统基础架构,由apache基金会维护并更新.官网地址: http://hadoop.apache.org/ Hadoop项目主要包括以下4个模块: Hadoop Common ...

  10. oracle参数优化

    关闭OEM,使用oracle用户登录,执行命令: emctl status dbconsole emctl stop dbconsole 以下命令推荐用sys用户登录PLSQL Developer,使 ...