作者:手机用户2602907455 | 来源:互联网 | 2023-08-06 14:04
一、CouchDB 简介
欢迎使用 CouchDB 和 PHP Web 开发初学者指南。在本书中,我们将学习使用 CouchDB 和 PHP 构建一个简单但功能强大的网站的细节。为了让您理解为什么我们要在 CouchDB 中做某些事情,首先要了解 NoSQL 数据库的历史,并了解 CouchDB 在数据库历史中的位置。
在本章中,我们将:
- 回顾一下数据库的历史及其在技术中的地位
- 谈谈数据库是如何演变成 NoSQL 概念的
- 通过理解 NoSQL 数据库的不同分类、CAP 定理及其对 ACID 模型的避免,定义 NoSQL 数据库
- 看看 CouchDB 的历史及其主要贡献者
- 谈谈 CouchDB 的特殊之处
让我们先看看数据库的发展以及 NoSQL 是如何出现的。
NoSQL 数据库的演变
在 20 世纪 60 年代早期,术语数据库作为一个简单的层被引入世界,作为信息系统背后的主干。将应用与数据分离的简单概念是新的和令人兴奋的,它为应用变得更加健壮开辟了可能性。在这一点上,数据库最初是作为基于磁带的设备存在的,但很快作为磁盘上的系统直接访问存储变得更加可用。
1970 年,Edgar Codd 提出了一种更有效的数据存储方法——关系模型。该模型还将使用 SQL 来允许应用查找存储在其表中的数据。这种关系模型与我们今天所知的传统关系数据库几乎相同。虽然这种模式被广泛接受,但直到 20 世纪 80 年代中期,才有真正能够有效利用它的硬件。到 1990 年,硬件终于迎头赶上,关系模型成为存储数据的主要方法。
正如在任何技术领域一样,与关系数据库管理系统(RDBMS)的竞争也在兴起。流行的 RDMBS 系统有 Oracle、Microsoft SQL Server、MySQL 和 PostgreSQL。
随着 2000 年的过去,应用开始通过更复杂的应用生成难以置信的数据量。社交网络也出现了。公司希望了解大量可用的数据。这种转变引发了一些严重的问题,即关系模型似乎无法处理的数据结构、可伸缩性和可用性。随着如何管理大量不断变化的数据的不确定性,术语 NoSQL 应运而生。
术语NoSQL并不是“无 SQL”的简称;它实际上代表“不仅仅是 SQL”。NoSQL 数据库是一组持久性解决方案,它们不遵循关系模型,也不使用 SQL 进行查询。除此之外,NoSQL 并不是用来取代关系数据库的。它的引入是为了补充关系数据库的不足之处。
是什么让 NoSQL 与众不同
除了 NoSQL 数据库不使用 SQL 查询数据这一事实之外,NoSQL 数据库还有一些关键特性。为了理解这些特性,我们需要涵盖很多术语和定义。记住或记住这里的所有内容并不重要,但重要的是要确切知道 NoSQL 数据库的组成部分。
使 NoSQL 数据库与众不同的第一件事是它们的数据结构。NoSQL 数据库有多种不同的分类方式。
NoSQL 数据库的分类
NoSQL 数据库(大部分)可分为四种主要数据结构:
- 键值存储:使用唯一的键和值保存数据。它们的简单性使它们能够以难以置信的速度扩展到巨大的尺寸。
- 列存储:它们类似于关系数据库,但不是存储记录,而是将列的所有值一起存储在一个流中。
- 文档存储:它们在保存数据时,不会将数据结构化到模式中,在一个自包含的对象中包含大量的键值对。这种数据结构让人想起 PHP 中的关联数组。这就是 CouchDB 在运动场上落地的地方。我们将在第 3 章中更深入地探讨这个话题,开始学习 CouchDB 和 Futon。
- 图形数据库:它们将数据存储在灵活的图形模型中,该模型包含每个对象的一个节点。节点具有属性以及与其他节点的关系。
我们不会深入讨论每种类型的数据库的示例,但重要的是要了解存在的不同选项。通过查看这一级别的数据库,我们比较容易(通常)看到数据将如何扩展到大小和复杂度,通过查看以下屏幕截图:
如果你看这个图表,你会发现我放置了一个典型的关系数据库,它的性能线很粗糙。这条性能线为您提供了一个数据库在大小和复杂性方面如何扩展的简单概念。NoSQL 数据库在数据的高大小和复杂度方面如何能表现得更好?
在大多数情况下,NoSQL 数据库是可伸缩的,因为它们依赖于分布式系统,而忽略了 ACID 模型。让我们讨论一下通过分布式系统我们得到了什么和放弃了什么,然后定义 ACID 模型。
当谈到任何分布式系统(不仅仅是存储或数据库)时,有一个概念定义了您所能做的限制。这就是所谓的 CAP 定理。
CAP 定理
Eric Brewer在 2000 年引入了 CAP 定理。它指出,在任何分布式环境中,它都不可能提供三个保证。
- 一致性:系统中的所有服务器将具有相同的数据。因此,任何使用该系统的人都将获得最新的数据,而不管他们在分布式系统中与哪个节点通信。
- 可用性:所有服务器将始终返回数据。
- 分区容差:即使单个服务器出现故障或无法访问,系统仍将作为一个整体继续运行。
通过查看这些选择,您可以看出,保证所有这三件事绝对是理想的,但从理论上讲这是不可能的。在现实世界中,每个 NoSQL 数据库选择三个选项中的两个,并通常开发某种过程来减轻第三个未处理属性的影响。
我们稍后将讨论 CouchDB 采用哪种方法,但 NoSQL 数据库避免的另一个概念:ACID 还有一些需要了解的地方。
酸
ACID是一组应用于数据库事务的属性,它是传统关系数据库的核心。虽然事务功能强大得令人难以置信,但它们也是关系数据库中读写速度较慢的原因之一。
酸由四种主要性质组成:
- 原子性:这是一种处理数据的全有或全无方法。事务中的一切都必须成功发生,否则不会提交任何更改。无论何时在系统中处理货币或货币,这都是一个关键属性,需要一个制衡系统。
- 一致性:数据只有通过数据库上的所有验证(如触发器、数据类型和约束),才会被接受。
- 隔离:事务不会影响正在发生的其他事务,其他用户也不会看到正在进行的事务的部分结果。
- 耐久性:数据保存后,可以安全地防止错误、崩溃和其他软件故障。
同样,当您阅读 ACID 的定义时,您可能会想,“这些都是必须的!”这可能是事实,但请记住,大多数 NoSQL 数据库并没有完全使用 ACID,因为几乎不可能有所有这些限制,并且仍然有极快的数据写入。
这一切意味着什么?
我现在已经给了你很多定义,但是让我们试着把它总结成几个简单的列表。让我们讨论一下 NoSQL 数据库的优缺点、何时使用以及何时避免使用 NoSQL 数据库。
NoSQL 数据库的优势
随着 NoSQL 数据库的引入,有很多优势:
- 使用传统关系数据库的处理和查询能力,您可以做一些根本不可能做到的事情。
- 您的数据具有可扩展性和灵活性,允许它快速地按大小和复杂性进行扩展。
- 有新的数据模型需要考虑。如果数据没有意义,您不必强制将其放入关系模型中。
- 写入数据的速度非常快。
正如你所看到的,NoSQL 数据库有一些明显的优势,但是正如我之前提到的,我们仍然需要考虑一些负面因素。
NoSQL 数据库的负面影响
然而,除了好的一面,也有一些坏的一面:
- 没有共同的标准;每个数据库的工作方式都略有不同
- 查询数据不需要熟悉的 SQL 模型来查找记录
- NoSQL 数据库仍然相对不成熟,并且不断发展
- 有新的数据模型需要考虑;有时,要使数据符合要求可能会令人困惑
- 因为 NoSQL 数据库避免了 ACID 模型,所以不能保证所有数据都能成功写入
除了 NoSQL 避免使用 ACID 模型之外,这些负面因素中的一些可能很容易让你接受。
什么时候应该使用 NoSQL 数据库
现在我们已经很好地了解了这些优点和缺点,让我们来讨论一些使用 NoSQL 数据库的好用例:
- 需要大量编写的应用
- 数据的模式和结构可能发生更改的应用
- 大量非结构化或半结构化数据
- 传统的关系数据库感觉受到限制,您想尝试一些新的东西。
这个列表不是排他性的,但是对于何时可以使用 NoSQL 数据库没有明确的定义。实际上,你几乎可以在每个项目中使用它们。
什么时候应该避免使用 NoSQL 数据库
然而,在 NoSQL 中存储数据时,有一些非常明显的地方应该避免。
- 任何涉及金钱或交易的东西。如果一条记录由于 ACID 模型的 NoSQL 避免而无法正确保存,或者由于分布式系统而导致数据无法 100%可用,会发生什么情况?
- 业务关键型数据或业务线应用,其中缺少一行数据可能意味着巨大的问题。
- 需要关系数据库功能的高度结构化数据。
对于所有这些用例,您应该真正关注使用关系数据库,以确保数据安全可靠。当然,在有意义的地方,您总是可以包括 NoSQL 数据库。
在选择数据库时,重要的是要记住“没有银弹”。这句话在谈论技术时经常使用,它意味着没有一种技术可以解决所有问题而不产生任何副作用或负面后果。所以明智地选择吧!
CouchDB 简介
对于这本书以及我自己的各种项目和创业公司,我选择了 CouchDB。让我们从历史的角度来看 CouCHDB,然后快速地探讨它对 CAP 定理的方法,以及它的优缺点。
CouchDB 的历史
2005 年 4 月,达米恩·卡茨发表了一篇关于他正在开发的新数据库引擎的博客文章,该引擎后来被称为 CouchDB,是不可靠商品硬件集群的首字母缩写。IBM 前 Lotus Notes 开发人员卡茨试图在 C++中创建一个容错文档数据库,但不久之后,转移到了 OLE T4 Erlang OTP PosiT5 平台上。几个月过去了,CouchDB 在 Damien Katz 的自筹资金下开始发展,并于 2008 年 2 月引入 Apache 孵化器项目。最后,在 2008 年 11 月,它作为一个顶级项目毕业。
达米恩的团队CouchOne于 2011 年与 Membase 团队合并,成立了一家名为Couchbase的新公司。成立该公司的目的是将CouchDB和Membase合并为一个新产品,并增加该产品的文档和可见性。
2012 年初,Couchbase 宣布将重点从促进 CouchDB 转移到创建 Couchbase Server 2.0。这个新数据库对数据库采取了不同的方法,这意味着它将不再为 CouchDB 社区做出贡献。这条消息在 CouchDB 社区遭到了一些困扰,直到 Cloudant 介入。
首席 CouchDB 托管公司、为 CouchDB 构建的容错、横向可扩展集群框架 BigCoach 的创建者Cloudant宣布,他们将把变更合并回 CouchDB,并承担 CouchDB 的持续发展角色。
2012 年初,在撰写本文时,CouchDB 最主要的版本是 2011 年 3 月 31 日发布的 1.1.1。但是 CouchDB 1.2 即将发布!
定义 CouchDB
根据http://couchdb.apache.org/ ,CouchDB 可定义为:
- 文档数据库服务器,可通过 RESTful JSON API 访问
- 具有平坦地址空间的临时和无模式
- 分布式,具有强健的增量复制功能,具有双向冲突检测和管理功能
- 可查询和可索引,具有面向表的报告引擎,使用 Javascript 作为查询语言。
您可能能够读懂字里行间的意思,但 CouchDB 从 CAP 定理中选择了可用性和部分容差,并将重点放在使用复制的最终一致性上。
我们可以深入研究每一个要点的含义,因为在我们深入讨论这些要点之前,本书的其余部分都会用到。在每一章中,我们将在 CouchDB 知识的基础上开始构建,直到我们在野外拥有一个完全可操作的应用。
总结
我希望你喜欢这一章,并准备好深入学习 CouchDB 的细节。让我们回顾一下我们在本章学到的一切。
- 我们讨论了数据库的历史和 NoSQL 数据库的出现
- 我们定义了使用 NoSQL 的优点和缺点
- 我们看了 CouchDB 的定义和历史
历史课到此为止。启动你的电脑。在下一章中,我们将设置使用 CouchDB 和 PHP 开发 web 应用的所有内容,并确保所有设置都正确。