热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一、CouchDB简介

一、CouchDB简介欢迎使用CouchDB和PHPW

一、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。

  • 图形数据库:它们将数据存储在灵活的图形模型中,该模型包含每个对象的一个节点。节点具有属性以及与其他节点的关系。

我们不会深入讨论每种类型的数据库的示例,但重要的是要了解存在的不同选项。通过查看这一级别的数据库,我们比较容易(通常)看到数据将如何扩展到大小和复杂度,通过查看以下屏幕截图:

Classification of NoSQL databases

如果你看这个图表,你会发现我放置了一个典型的关系数据库,它的性能线很粗糙。这条性能线为您提供了一个数据库在大小和复杂性方面如何扩展的简单概念。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的新公司。成立该公司的目的是将CouchDBMembase合并为一个新产品,并增加该产品的文档和可见性。

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 应用的所有内容,并确保所有设置都正确。


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
author-avatar
手机用户2602907455
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有