65.9K
CodeProject 正在变化。 阅读更多。
Home

初学者指南:NoSQL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (6投票s)

2013年8月1日

CPOL

8分钟阅读

viewsIcon

85492

本文旨在探讨 NoSQL 数据库的基本思想和原则。NoSQL 适用于数据库管理员、程序员、编码员、Web 开发人员等。

本文由 Sufyan bin Uzayr 撰写,最初发表于《软件开发者杂志》2013年6月刊。您可以在 SDJ 网站找到更多文章。 

介绍 

本文旨在探讨 NoSQL 数据库的基本思想和原则。NoSQL 适用于数据库管理员、程序员、编码员、Web 开发人员等。

  

假设您决定建立一个网站或应用程序。您显然需要一些东西来管理数据。是的,没错,一个数据库。那么,它会是什么呢?MySQL、MS-SQL、Oracle 还是 PostgreSQL?毕竟,没有什么能比得上一个使用 SQL 管理数据的好旧 RDBMS 更棒了。

好吧,请允许我向您介绍一个完全独特且非传统的数据库模型——NoSQL。就像其他所有优秀的文章一样,我们也将从……嗯……免责声明开始!

NoSQL 代表不仅仅是 SQL。这里的想法不是反对 SQL,而是提供一种替代方案来存储数据。然而,由于大多数用户都精通 SQL,许多 NoSQL 数据库都努力提供类似 SQL 的查询界面。

为什么选择 NoSQL?   

这确实是一个有效的问题。原因如下:

  • 管理大量数据:NoSQL 数据库可以轻松处理大量的读/写周期、多个用户以及 PB 级别的数据。 
  • 模式?不,不需要:大多数 NoSQL 数据库都没有 模式 ,因此 非常 灵活。它们 在构建模式时提供了很好的选择,并促进了对象到模式的轻松映射。诸如规范化和复杂连接之类的术语,嗯, 不需要!
  • 程序员友好:NoSQL 数据库为每种主要编程语言提供了简单的 API,因此不需要复杂的ORM 框架。而且,如果某个编程语言没有可用的 API,仍然可以通过简单的 RESTful API,使用 XML 和/或 JSON 通过 HTTP 访问数据。
  • 可用性:大多数分布式 NoSQL 数据库提供简单的数据复制,一个节点的故障不会严重影响数据的可用性。 
  • 可伸缩性:NoSQL 数据库不需要专用的高性能服务器。实际上,它们可以轻松地运行在商用硬件集群上,并且扩展就像添加新节点一样简单。 
  • 低延迟:除非您运行的是万亿个数据服务器的集群(或类似的东西,上下浮动几百万),否则 NoSQL 可以帮助您实现极低的延迟。当然,延迟本身取决于可以成功加载到内存中的数据量。
三元组存储以主语-谓语-宾语的形式保存数据,其中谓语是主语和宾语之间的连接因素。因此,三元组存储也是网络数据库的变体。例如,假设“Jonny Nitro 阅读数据中心杂志。”在这种情况下,Jonny Nitro 是主语,数据中心杂志是宾语,而“阅读”一词充当连接主语和宾语的谓语。很明显,将这种语义查询映射到 SQL 将会很困难,因此 NoSQL 提供了一个可行的替代方案。三元组存储的一些主要实现包括 Sesame、Jena、Virtuoso、AllegroGraph 等。 

SQL 理念

NoSQL 基本上放弃了传统的 SQL 理念,转而支持 CAP 定理或 Brewer 定理,该定理由 Eric Brewer 于 2000 年提出。该定理讨论了 Consistency(一致性)、Availability(可用性)和 Partition Tolerance(分区容错性)三个基本原则(缩写为 CAP),并指出分布式数据库最多只能满足其中两个。NoSQL 数据库通过采用 Eventual Consistency(最终一致性)来实现该定理,这是一种更宽松的一致性形式,它在足够长的时间内执行任务。这反过来又大大提高了可用性和可伸缩性。这种 范式 通常 被称为 BASE 意味着 Basically Available(基本可用)、Soft state(软状态)、Eventual Consistency(最终一致性)。

NoSQL 数据模型

NoSQL 数据库的一些主要和最突出的区别如下:

1. 文档存储

2. 层次型

3. 网络型

4. 列式

5. 面向对象型

6. 键值存储

7. 三元组存储

文档存储

数据组织仅限于简单的行和列的日子已经一去不复返了。今天,数据通常以 XML 或 JSON 的形式表示(我们主要讨论的是 Web)。偏爱 XML 或 JSON 的原因是 因为 它们都 非常 便携、 紧凑和标准化。直言不讳地说,将 XML 或 JSON 文档映射到关系模型意义不大。相反,更明智的决定是利用现有的文档存储。为什么?同样,仅仅因为 NoSQL 数据库 无模式的 ,因此 不存在 用于 XML 或 JSON 文档的预定义模式,因此每个文档都是独立的。该数据库可用于 CRM、Web 相关数据、实时数据等。一些最著名的实现模型是 MongoDB、CouchDB 和 RavenDB。事实上,MongoDB 已被 bit.ly 和 Sourceforge 等网站使用。

层次型数据库 

这些数据库以层次相关性(即树或父子关系)的形式存储数据。在关系模型中,这可以称为 1:N 关系。基本上,地理空间数据库可以以层次结构形式存储本质上是层次结构的位置信息,尽管算法可能有所不同。地理标记和地理定位最近很流行。在这种用途中,地理空间数据库变得非常相关,并且可以 用于 地理信息系统。 主要例子包括 PostGIS、Oracle Spatial 等。此外,一些最著名的层次型数据库实现是 Microsoft 的 Windows 注册表和 IBM 的 IMS 数据库。

图网络数据库

图数据库是网络数据库最流行的形式,用于存储可以以图的形式表示的数据。基本上,图数据库存储的数据可以呈指数级增长 ,因此, 图数据库 非常适合 存储频繁变化的数据。抛开理论部分,图数据库 Twitter 开发的 FlockDB 中 或许有最棒的 例子,FlockDB 用于实现谁关注谁的图。FlockDB 使用 Gizzard 框架每秒查询数据库多达 10,000 次。查询图的一种通用技术是从任意或指定的起始节点开始,然后根据给定的条件遍历图,以深度优先或广度优先的方式遍历图。大多数图数据库允许开发人员使用简单的 API 来完成任务。例如,您可以进行以下查询:“Jonny Nitro 阅读数据中心杂志吗?”除了 FlockDB,一些最流行的图数据库还包括 HyperGraphDB 和 Neo4j。

列式数据库

列式 数据库 在 Google 关于其 BigTable 分布式存储系统(与 Google 文件系统一起在内部使用)的研究论文发表后出现。一些流行的实现包括 Hadoop Hbase、Apache Cassandra、HyperTable 等。

这种数据库的实现更像三维数组,第一维是行标识符,第二维是列族加列标识符的组合,第三维是时间戳。列式数据库被 Facebook、Reddit、Digg 等网站采用。

面向对象数据库

面向对象数据库是否纯粹是 NoSQL 数据库尚有争议,但它们通常被认为是 NoSQL 数据库,因为这类数据库也偏离了传统的基于 RDBMS 的数据模型。这类数据库允许以对象的形式存储数据,从而使其具有高度透明性。其中最流行的一些包括 db4o、NEO、Versant 等。面向对象数据库通常用于研究目的或 Web 规模的生产。

键值存储

键值存储(可以说)基于 Amazon 的 Dynamo 研究论文和分布式哈希表。这种数据模型 极其 简化 ,并且 通常 只包含 一组全局键值对,每个值都有一个与之关联的唯一键。因此,该数据库具有高度可伸缩性,并且 不以关系方式存储数据。一些流行的实现包括 Project Voldemort(由 LinkedIn 开源)、Redis、Tokyo Cabinet 等。

三元组存储

三元组存储以主语-谓语-宾语的形式保存数据,其中谓语是主语和宾语之间的连接因素。因此,三元组存储也是网络数据库的变体。例如,假设“Jonny Nitro 阅读数据中心杂志。”在这种情况下,Jonny Nitro 是主语,数据中心杂志是宾语,而“阅读”一词充当连接主语和宾语的谓语。很明显,将这种语义查询映射到 SQL 将会很困难,因此 NoSQL 提供了一个可行的替代方案。三元组存储的一些主要实现包括 Sesame、Jena、Virtuoso、AllegroGraph 等。

总结

那么,现在怎么办?好吧,您刚刚接触了 NoSQL。然而,这是否意味着您应该从 SQL 转向 NoSQL 呢?也许吧。也许不是。答案因情况而异。如果您觉得 SQL 查询太难应对,那么您很可能会发现 NoSQL 同样困难。但是,如果您正在寻找一种更灵活的替代方案,并且不介意亲自动手,那么您绝对应该尝试一下 NoSQL!当然,选择权在您! 祝您数据管理愉快!

 

关于作者

Sufyan bin Uzayr 是一位 20 岁的自由撰稿人、平面设计师和摄影师,常驻印度。Sufyan 广泛涉足平面设计和 Web 开发领域,他还为移动平台开发了应用程序。目前为两本印刷杂志和六个博客撰稿,Sufyan 还是 Brave New World 这一当代电子期刊的主编。请访问 Sufyan 的网站 www.sufyan.co.nr 或他的电子期刊 www.bravenewworld.in 您也可以通过 sufyan@live.in 给��发邮件。

历史

末尾添加一些遗漏的文本(2013年2月8日)。

即将发布的内容

如果您对即将发布的内容感兴趣,请查看我们的网站。例如,您可以看到我们全新的二合一 Python 包的目录。 《Python 几行代码》《Python 入门套件》 

© . All rights reserved.