「文档数据库之争」MongoDB和CouchDB的比较

news/2024/4/30 19:50:55/文章来源:https://blog.csdn.net/jiagoushipro/article/details/129117142

MongoDB和CouchDB都是基于文档的NoSQL数据库类型。文档数据库又称mdocument store,通常用于存储半结构化数据的文档格式及其详细描述。它允许创建和更新程序,而不需要引用主模式。移动应用程序中的内容管理和数据处理是可以应用文档存储的两个字段。

MongoDB的概述

MongoDB是10gen的初创公司,它起源于2007年。它来自于文档存储家族,是典型的NoSQL数据库之一,无模式,具有较高的性能、可伸缩性和丰富的数据处理功能。这个开源数据库是用c++编写的,使用了动态模式。MongoDB的体系结构包含了根据文档结构分组为集合的文档。该数据库使用BSON。BSON是JSON的二进制表示,支持文档存储和数据交换。在MongoDB中,业务主题可以存储在最少数量的文档中,这些文档可以主要或次要地建立索引,而不会将它们分割成多个关系文档。

除了MongoDB的上述功能之外,它还提供了一个大型副本集集合,其中每个集合可以包含多个数据副本。在复制集中,所有的主函数(读和写)都在主函数集中执行,而在前一个函数失败时使用辅助函数集。MongoDB合并了sharding,它使用了水平伸缩过程。这个文档存储数据库的负载平衡属性是合理的,因为它运行在多个服务器上,因此提供了数据的重复和负载的平衡。作为回报,它还在硬件故障期间提供备份。它还使用了网格文件系统,该系统将特定的文件划分为不同的部分并分别存储它们。

MongoDB的共同特点:

  • 数据模型设计减少了对连接的需求,并提供了模式的简单演进。

  • 高性能,因为它既不包含连接,也不包含提供快速访问的事务,因此提高了性能。

  • 高可用性是由于合并了副本集,这些副本集能够在故障期间提供备份,而且非常健壮。

  • 在可伸缩性。

  • MongoDB的分片特性使它能够在分布式函数中快速高效地执行。这也是可能的,因为它支持数据的水平扩展。

  • 语言是非常丰富的查询。MongoDB有自己的查询语言Mongo查询语言,可以替代SQL语言。类似地,实用函数和map或reduce可以替代复杂的聚合函数。

aa1671d13e66ce38d845e030ac30ad76.jpeg

图1:MongoDB架构

CouchDB的概述

CouchDB是Apache Software Foundation的一个产品,灵感来自于Lotus Notes,它也是一个基于文档的开源NoSQL数据库,主要关注于易于使用。它是一个单节点数据库,完全像其他数据库一样工作。它通常从单个节点实例开始,但可以无缝地升级到集群。它允许用户在许多服务器或vm上运行单个数据库。与单节点CouchDB相比,CouchDB集群提供了高容量和高可用性。它使用Erlang,一种通用语言。和MongoDB一样,它也使用javascript和map/reduce。它以文档集合的形式而不是表的形式存储数据。更新后的CouchDB是无锁的,这意味着在写操作期间不需要锁定数据库。这个数据库中的文档还使用了HTTP协议和JSON,以及向它们附加非JSON文件的能力。因此,CouchDB与任何支持JSON格式的应用程序或软件兼容。

CouchDB的常见特性

  • CouchDB服务器托管命名数据库,命名数据库存储数据库中唯一命名的文档,CouchDB提供一个RESTful HTTP API,用于读取和更新(添加、编辑、删除)数据库文档

  • CouchDB提供了一个基于浏览器的GUI来处理数据、权限和配置。

  • CouchDB提供了最简单的复制形式。

  • CouchDB促进了身份验证和会话支持:像web应用程序一样通过会话cookie保持身份验证打开。

  • CouchDB提供数据库级安全性,其中每个数据库的权限被划分为读者和管理员。允许读取器对CouchDB数据库进行读写。

  • CouchDB使用身份验证验证插入到数据库中的数据,以验证创建者和登录会话id是否相同。

106dfc045fd5a668dd7e41f941369b7f.jpeg

CouchDB架构

REST API用于编写和查询数据。它还提供文档读取、添加、编辑和删除功能。它通过MVCC实现使用ACID模型而不是BASE。就像MongoDB支持设备离线时的复制一样。它使用一种称为最终一致性的特殊复制模型。CouchDB在数据方面是高度可靠的。单节点数据库使用仅追加的抗崩溃数据结构,而多模式或集群数据库可以冗余地保存数据,以便在用户需要时提供数据。CouchDB可以根据大集群(如全球集群)扩展到小集群(如移动设备)。CouchDB能够在任何Android或iOS设备上运行,这使得它在其他数据库中脱颖而出。

CouchDB体系结构是分布式的,支持双向同步。由于使用唯一id,它不需要任何模式。尽管CouchDB遵循CAP模型的AP(可用性和分区容错)特性,但为了克服交易一致性,它在实际基础上遵循ACID模型。

CouchDB和MongoDB的比较

特性CouchDBMongoDB
数据模型它遵循面向文档的模型,数据以JSON格式表示。它遵循面向文档的模型,但数据以BSON格式表示
接口CouchDB使用基于HTTP/ REST的接口。它非常直观,设计非常好。MongoDB在TCP/IP上使用二进制协议和自定义协议。
对象存储在CouchDB中,数据库包含文档。在MongoDB中,数据库包含集合,而集合包含文档。
速度它的读取速度是关键的数据库,MongoDB比CouchDB快MongoDB提供了更快的读取速度。
手机支持CouchDB可以运行在苹果iOS和Android设备上,为移动设备提供支持。没有提供移动支援
大小数据库可以随着CouchDB而增长;当结构从一开始就没有明确定义时,MongoDB更适合快速增长。如果我们有一个快速增长的数据库,MongoDB是更好的选择。
查询方法查询使用map-reduce函数。虽然它可能是一种优雅的解决方案,但对于具有传统SQL经验的人来说,学习它可能更加困难。MongoDB采用Map/Reduce (JavaScript)创建基于集合+对象的查询语言。对于有SQL知识的用户,MongoDB更容易学习,因为它更接近语法。
复制CouchDB支持使用自定义冲突解决功能的主-主复制。MongoDB支持主从复制。
并发性它遵循MVCC(多版本并发控制)。就地更新。
首选项CouchDB支持可用性。MongoDB支持一致性
性能的一致性CouchDB比MongoDB更安全
一致性CouchDB最终是一致的。MongoDB是强一致性的。
编写语言ErlangC++.
分析如果我们需要一个在移动设备上运行的数据库,需要主-主复制或单服务器持久性,那么CouchDB是一个很好的选择。如果我们正在寻找最大的吞吐量,或者有一个快速增长的数据库,MongoDB是最好的选择。


CouchDB和MongoDB:截然不同的查询

CouchDB和MongDB都是面向文档的数据存储,它们使用JSON文档,但是当涉及到查询时,这两个数据库就完全不同了。CouchDB需要预定义的视图(本质上是JavaScript的MapReduce函数),MongoDB支持动态查询(基本上是我们习惯的常规RDBMS特别SQL查询)。

例如,为了使用Groovy的RESTClient在CouchDB中插入一些数据,并发出一个RESTful post,如下所示:

import static groovyx.net.http.ContentType.JSON
import groovyx.net.http.RESTClient
def client = new RESTClient("http://localhost:5498/")
response = client.put(path: "parking_tickets/1280002020",
contentType: JSON,
requestContentType: JSON,
body: [officer: "Micheal Jordan",
location: "189 Berkely Road",
vehicle_plate: "KL5800",
offense: "Parked in no parking zone",
date: "2020/02/01"])

示例代码查询任何官员财产为“Micheal Jordan”的文件的函数:

function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}

当我们发出一个HTTP GET请求到那个视图的名字,我们可以期望至少一个文档如下:

response = client.get(path: "parking_tickets/_view/by_name/officer_grey",
contentType: JSON, requestContentType: JSON)
assert response.data.total_rows == 1
response.data.rows.each{
assert it.value.officer == "Micheal Jordan"
}

MongoDB的工作方式很像我们习惯使用的普通数据库:我们可以在运行时查询我们内心想要的任何东西。

使用MongoDB的本地Java驱动程序插入停车罚单的相同实例:

DBCollection coll = db.getCollection("parking_tickets");
BasicDBObject doc = new BasicDBObject();
doc.put("officer", "Micheal Jordan");
doc.put("location", "189 Berkely Road ");
doc.put("vehicle_plate", "KL5800");
//...
coll.insert(doc);

只需对警官的财产进行查询,即可查询警官Micheal Jordan从MongoDB发出的任何罚单:

BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}

结论

在这个博客中,我们比较了两种基于文档的NoSQL数据库——MongoDB和CouchDB。该表概述了这两个数据库之间的主要参数比较。正如我们所看到的,项目的优先级将决定系统的选择。主要区别包括复制方法和平台支持。而且,从比较中可以清楚地看出,如果应用程序需要更高的效率和速度,那么MongoDB是比CouchDB更好的选择。如果用户需要在移动设备上运行数据库,并且还需要多主机复制,那么CouchDB是一个明显的选择。此外,如果数据库快速增长,MongoDB比CouchDB更适合。使用CouchDB的主要优势是它在移动设备(Android和iOS)上得到支持,而不是在MongoDB上。因此,基本上,不同的应用程序需求会根据场景需要不同的数据库。

我们观察到MongoDB比CouchDB稍微好一点,因为它使用类似sql的查询结构,而且前者更容易实现。另外,对于使用动态查询,MongoDB是一个更好的选择。关于这两个数据库的安全性,研究仍在进行中,很难说哪一个提供了更好的和安全的环境。

本文 :https://architect.pub/battle-nosql-databases-comparing-mongodb-and-couchdb
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
e5039bf00928a9f6d029754bf136b3d7.jpeg
微信小号

【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

89c3761a09009cfd6803e90faf977849.jpeg

QQ群

【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

96ca9b5e5ccef1e91c9dc0782d1d0d7b.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

58d56a25f49dd8cdb0edb710ee2e5099.jpeg

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。

5c17466a9b9cb5ec3bbd94684b0e70e2.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
微博【超级架构师】智能时刻
哔哩哔哩【超级架构师】

516aadee98d85d6449979581631c45db.jpeg

抖音【cea_cio】超级架构师

fdeb64317e9bad0bb3843d08d837e64c.jpeg

快手【cea_cio_cto】超级架构师

d7a4b133f8fcd6627a319b363a1d527f.jpeg

小红书【cea_csa_cto】超级架构师

46d59053522f58ed00aa699327ba1848.jpeg

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站应用开发和开发平台https://apaas.dev
网站开发信息网https://xinxi.dev
网站首席架构师社区https://jiagoushi.pro
网站超级架构师https://jiagou.dev
网站企业技术培训https://peixun.dev
网站程序员宝典https://pgmr.pub    
网站程序员云开发分享https://pgmr.cloud
网站开发者闲谈https://blog.developer.chat
网站CPO宝典https://cpo.work
网站架构师实战分享https://architect.pub    ‍
网站首席安全官https://cso.pub    ‍
网站CIO酷https://cio.cool
网站CDO信息https://cdo.fyi
网站CXO信息https://cxo.pub

谢谢大家关注,转发,点赞和点在看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_71545.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSH 服务支持弱加密算法

漏洞扫描有SSH 服务支持弱加密算法,解决方案有两个: 方案一:修改 SSH 配置文件,添加加密算法: vi /etc/ssh/sshd_config 最后添加一下内容(去掉 arcfour、arcfour128、arcfour256 等弱加密算法)…

游戏服务器算法-AOI基本介绍

一、直接比较所有对象 最直观也是最效率最低的一种方法。当一个事件发生,我们需要获得AOI范围以内的物体时,直接遍历游戏中所有的对象,并且进行坐标判断,如果小于或者等于AOI的范围,则为需要的游戏对象。 这种方法实…

智慧校园信息化管理平台技术方案

1.2总体架构设计 智慧校园平台是以学校现有网络为基础,以服务于全校师生的教学、科研、生活为目的,建立在学校数据中心平台之上,涵盖了学校的学校管理、学生管理、教学管理、班级管理、家校共育、教务管理等全方位的管理信息平台与信息服务平…

积分球原理及积分球类型介绍

标题积分球标准型积分球LED积分球均匀光源便携式高亮度积分球均匀光源微光积分球均匀光源积分球均匀光源iSphere高光谱响应光学积分球其他分类积分球 积分球原理:由于球体内整涂有白色漫反射材料的空腔球体,球壁上开有采样口,当待测样品光源进入积分球的…

公司缺人面了8个测试员,他们都有一个相同的缺点.....

年后公司缺人,面了不少测试,结果竟然没有一个合适的。 一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。 看简历很多都是3年工作经验,但面…

约束优化:约束优化的三种序列无约束优化方法(罚函数法)

文章目录约束优化:约束优化的三种序列无约束优化方法(罚函数法)外点罚函数法L2-罚函数法:非精确算法对于等式约束对于不等式约束L1-罚函数法:精确算法内点罚函数法:障碍函数法参考文献约束优化:…

Docker实用命令手册

Docker实用命令手册 大家好,我是比特桃。本文汇总了超实用的Docker命令手册,本文适用于有一定Docker基础的同学。如果你对Docker不了解,可能无法直接使用这些命令。但别担心,Docker本身是一个工具,如果只是用起来其实…

算法专题训练营

动归算法专题 1.拆分词句 是不是,在不在都是可以用动归解决的 状态转义方程不一定都是等式,也有可能是条件 2.三角形 动归算法也不是一定要借助新开空间,也是可以用自己原来的空间 3.背包问题 4.分割回文串-ii 5.不同的子序列 贪心算法专题 只管一步的最优结果, 1.分割平衡…

高并发系统设计之负载均衡

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录DNS负载均衡Nginx负载均衡负载均衡算法负载均衡配置超时配置被动健康检查与主动健康检查LVS/F5Nginx当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到…

Navicat Premium 安装 注册

Navicat Premium 一.Navicat Premium的安装 1.暂时关闭windows的病毒与威胁防护弄完再开,之后安装打开过程中弹窗所有警告全部允许,不然会被拦住 2.下载安装包,解压 链接:https://pan.baidu.com/s/1X24VPC4xq586YdsnasE5JA?pwdu4vi 提取码…

论文阅读 | Real-Time Intermediate Flow Estimation for Video Frame Interpolation

前言:ECCV2022 快速插帧方法 Real-Time Intermediate Flow Estimation for Video Frame Interpolation 引言 进行视频插帧目前比较常见的方法是基于光流法,分为两个步骤:1.通过光流对齐输入帧,融合对齐的帧 光流并不能直接同于…

epoll 笔记

maxevents 参数大小一般不超过64必须够了 maxevents 个事件,才会传到用户空间吗?可见,只要有事件就可以传到用户空间。一台服务器可以支撑多少个链接https://blog.csdn.net/mijichui2153/article/details/81331345 0、两台虚拟机的初始状态如…

亮个相吧小宝贝儿,五款压箱底的软件

今天要给大家推荐5款压箱底的宝贝软件了,百度搜索一下就能找到下载链接了。 1.开源浏览器——Firefox Firefox是一个自由的,开放源码的浏览器,适用于 Windows, Linux 和 MacOS X平台,Mozilla Firefox官方版体积小速度快&#xf…

rocketmq延时消息自定义配置

概述 使用的是开源版本的rocketmq4.9.4 rocketmq也是支持延时消息的。 rocketmq一般是4个部分: nameserver:保存路由信息broker:保存消息生产者:生产消息消费者:消费消息 延时消息的处理是在其中的broker中。 但是…

堆球问题,开普勒猜想(格密码相关)

目录 一. 介绍 二. 历史进展分析 三.2维下的堆球问题 四. 3维下的堆球问题 五. 8维与24维下的堆球问题 总结 一. 介绍 堆球问题又叫堆球理论、最密堆积、球填充,英文为The Theory Of Sphere Packings。 堆球问题的本质就是填充一堆大小相同的球。要求这些球…

公会发展计划(GAP)第三季

继前两季发布的公会发展计划取得成功之后,Yield Guild Games 现在推出了第三季的公会发展计划(GAP)。GAP 在第二季有了显著的增长,有超过 3000 个成就 NFT 被铸造。GAP 是以成就为导向的社区代币分配协议,下一次迭代将…

pmp考试是什么?适合哪些人学?含金量?(含pmp资料)

先说一下我这个人的理解,PMP就是提高项目管理理论基础和实践能力的考试。 再说说PMP官方一点的说明: PMP证书全称为Project Management Professional,也叫项目管理专业人士资格认证。PMP证书由美国项目管理协会(PMI)发起,是严格…

美国原装二手keysight E4980A(安捷伦)2MHZ LCR表

Agilent E4980A、Keysight E4980A、LCR 表,20 Hz - 2 MHz E4980A 是 Agilent 的 2 MHz LCR 表。LCR表是一种电子测试设备,用于测量电子元件的电感(L)、电容(C)和电阻(R)。LCR 表可…

关于在VM上的windows server 2022系统安装

目录 1、windows serer 2022安装的准备工作 1)下载系统 2)寻找对应系统密钥 3)配置server系统开机配置项(可能会出现sconfig配置界面) 2、开始安装server系统 1、windows serer 2022安装的准备工作 1)…

【离散数学】1. 数理逻辑

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 离散数学:研究离散量结构及相互关系的学科 数理逻辑集合论代数系统图论 逻辑:研究推理的科学 数学方法:引进一套符号系统的方法 数理逻辑是用数学方法研究形式逻辑的科学,即使用符号化…