拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 MongoDB 与Couchbase有何异同点

MongoDB 与Couchbase有何异同点

白鹭 - 2022-12-13 2226 0 2

一、概述

在本教程中,我们将比较两个最流行的NoSQL 数据库——MongoDB 和Couchbase。我们将了解体系结构、功能列表、数据模型、查询,以及它们如何处理分区。

2. NoSQL 数据库介绍

SQL 数据库自1970 年以来一直存在,并且在很长一段时间内一直是事实上的数据库。他们的目的之一是减少数据重复,因为当时存储并不便宜。水平扩展意味着SQL 数据库的大量维护工作,但可以通过购买功能更强大的服务器来垂直扩展。

NoSQL(不仅是SQL)数据库出现在2000 年代后期,允许更容易的横向扩展。随着计算能力变得越来越便宜,我们现在可以将数据分发到许多功能不那么强大的机器上。这里的数据不是存储在表中,而是存储在文档中(通常是JSON 格式),并且模式不像SQL 数据库那样严格。

最早的NoSQL 数据库之一是MongoDB。其简单的设置和易用性使其在很长一段时间内一直保持领先地位。然而,有像Couchbase 这样的新竞争者,它具有易于扩展和高性能的特点。

3.建筑

让我们看一下MongoDB 部署的架构:

mongodb-vs-couchbase.png

在这里,每个节点都包含一个副本集,其中包含一个主副本和两个辅助副本。

每个副本都有自己的MongoD 服务,用于管理数据、索引和查询MongoS 组件充当分布式查询路由器和处理器。

现在让我们看一下Couchbase 的部署架构:

mongodb-vs-couchbase-1.png

Couchbase 部署中的每个节点都有一个强制性的集群管理器。其他服务组件,即数据、索引、查询和搜索,可以存在也可以不存在。

对于Couchbase,数据存储在使用自动哈希在节点之间分区的Buckets 中

不需要配置服务器,因为元数据管理已按设计内置到数据库中。向外扩展只是添加更多节点的问题。

4. 特征比较

让我们看一下这两个NoSQL 数据库的主要特性比较:

特征

数据库

沙发底座




贮存

将文档存储为二进制JSON (BSON)

将文档存储为JSON

查询

专有查询语言

N1QL – 支持SQL 查询

分区

通过分片手动处理分区

使用哈希机制自动分区

交易

从4.2 版本开始支持分布式事务

从6.6 版本开始支持分布式事务

搜索

从4.0 版本开始支持文本搜索

从6.0 版本开始支持全文搜索

5. 数据模型

与SQL 数据库不同,在NoSQL 的情况下,不强制执行数据模型。文档不需要具有相同的架构。我们可以自由地为每个关系建模,但我们认为合适。

我们来看看实体之间关系的建模:

  • 一对一(1-1):NoSQL 数据库处理此问题的默认方式是将一个实体嵌入另一个实体。这也是MongoDB 和Couchbase 的行为。我们还可以嵌入另一个实体的实体ID。这两个数据库都支持这一点。

  • 一对多(1-N):我们通过在第一个实体中嵌入N 个实体数组或N 个实体ID 数组来解决此问题。MongoDB 和Couchbase 支持这一点。

  • 多对多(MN):我们通过在M 个实体中的每个实体中嵌入N 个实体数组或在M 个实体中的每个实体中嵌入N 个实体ID 数组来解决此问题。MongoDB 和Couchbase 也支持这一点。

决定将哪个实体嵌入另一个实体以及选择嵌入实体还是嵌入id 是一个关键的设计决策。我们在仔细考虑应用程序将如何使用我们的数据库后做出此决定。

六、数据查询

对于查询,MongoDB 有其专有的查询语言,而Couchbase 使用N1QL,一种类似于SQL 的语言。让我们以一个STUDENT集合为例,看看每个数据库如何处理通常的命令查询操作。

6.1.SELECT

下面是SQL 语言、MongoDB 查询语言和Couchbase N1QL 中的SELECT操作:

-- SQL
SELECT * FROM STUDENT WHERE name = 'Ryan';
-- MongoDB query language
db.STUDENT.find({name:"Ryan"})
-- Couchbase N1QL
SELECT * FROM STUDENT WHERE name = 'Ryan';

6.2.INSERT

现在,让我们看看INSERT操作在SQL、MongoDB 查询语言和Couchbase N1QL 中的样子:

-- SQL
INSERT INTO STUDENT(id, name) VALUES (123, 'Ryan');
-- MongoDB query language
db.STUDENT.save({_id: "123", {"id": "123", "name": "Ryan"})
-- Couchbase N1QL
INSERT INTO STUDENT(KEY, VALUE) VALUES ('123', {"id": "123", "name": "Ryan"})

6.3.UPDATE

接下来是SQL、MongoDB 查询语言和Couchbase N1QL 中的UPDATE操作:

-- SQL
UPDATE STUDENT SET name='John' WHERE id = 123;
-- MongoDB query language
db.STUDENT.update({_id: "123"}, {"name": "John"})
-- Couchbase N1QL
UPDATE STUDENT SET name = "John" WHERE id = "123"

6.4.DELETE

这是最后一个基本操作—— DELETE。让我们在SQL、MongoDB 查询语言和Couchbase N1QL 中看看它:

-- SQL
DELETE FROM STUDENT WHERE id = 123;
-- MongoDB query language
db.STUDENT.remove({_id: "123"})
-- Couchbase N1QL
DELETE FROM CUSTOMER WHERE id = "123";

我们可以在我们的Spring Data MongoDB 教程中深入了解使用Spring Data 的MongoDB 查询。

此外,我们可以在我们的Spring Data Couchbase 教程中了解如何使用Spring Data 持久化Couchbase 文档。

7.分区

分区是任何NoSQL 数据库的关键特性,这两个也不例外。

默认情况下,MongoDB 不会对其数据进行分区。相反,它将所有数据保存在单个节点上。MongoDB 通过将数据拆分为子集(分片)来进行水平扩展,我们可以将每个子集分布在不同的节点上。配置服务器管理部署集群的配置。

Couchbase 中没有配置服务器。相反,每个节点都有自己的集群管理器服务,并且可以运行任何数据、索引、查询和搜索服务这样,我们可以通过在需要的地方分配计算能力来实现极大的灵活性。

八、结论

在本文中,我们探讨了MongoDB 和Couchbase 之间的相同点和不同点。

总而言之,MongoDB 是开启我们进入NoSQL 世界之旅的绝佳方式它周围有一个很棒的社区,MongoDB 大学为开发人员提供了大量培训。

另一方面,Couchbase 支持SQL 查询并承诺出色的性能和易于扩展


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *