常用 NoSQL 比较

news/2024/10/9 1:07:48/文章来源:https://www.cnblogs.com/inshua/p/18453341

Q: 请根据 CAP 实现程度,分布式实现方式,数据结构,查询方式,存储引擎等比较 mongodb, redis, cassandra, scylladb, dragonflydb, TiKV, couchbase 等 nosql 数据库

A: 对比 NoSQL 数据库时,可以根据以下几个关键维度来分析:CAP 理论实现分布式架构数据结构查询方式存储引擎等。下面将对 MongoDBRedisCassandraScyllaDBDragonflyDBTiKV、和 Couchbase 进行逐项比较。

1. CAP 理论实现(Consistency, Availability, Partition Tolerance)

  • MongoDB: 作为 CP 系统(优先一致性和分区容忍性),默认配置下提供强一致性。通过副本集实现高可用性,牺牲部分可用性来实现一致性,但可以通过读写策略配置接近 AP 模型(通过允许从次要节点读取以提高可用性)。
  • Redis: 在主从模式下更偏向于 AP 模型(优先可用性和分区容忍性),但在主从切换期间可能会导致一致性问题。如果配置为使用 Redis Sentinel 或 Redis Cluster,它可以在一定程度上实现可用性和容忍分区,但一致性较弱。
  • Cassandra: 作为 AP 系统,强调可用性和分区容忍性。它使用可调一致性级别(如 Quorum、One 等)来在可用性和一致性之间做权衡。
  • ScyllaDB: 也遵循 AP 模型,是 Cassandra 的高性能实现,因此在 CAP 特性上与 Cassandra 类似,强调高可用性和可扩展性。
  • DragonflyDB: 类似 Redis,偏向 AP 模型,注重高性能和可用性。主要用于缓存和实时处理,不保证强一致性。
  • TiKV: 作为 CP 系统,TiKV 保证强一致性和分区容忍性,通过 Raft 协议实现分布式一致性。可用性可能会在网络分区时受到影响。
  • Couchbase: 提供灵活的 CAP 选择,允许根据使用场景选择 CP 或 AP 模型。通常,Couchbase 通过副本与分片来实现分区容忍性,同时提供可调的强一致性或最终一致性。

2. 分布式实现方式

  • MongoDB: 采用副本集(Replica Set)和分片(Sharding)机制进行数据分布。副本集用于实现高可用性,分片用于横向扩展和大规模数据的分布式存储。
  • Redis: Redis 支持主从复制(Replication)和Redis Cluster(分布式模式)。Redis Cluster 通过分片机制在多个节点之间分布数据。
  • Cassandra: Cassandra 使用对等节点架构(Peer-to-Peer),每个节点都相同,无主节点。数据通过一致性哈希进行分布和复制。
  • ScyllaDB: 继承了 Cassandra 的对等架构,同时通过改进 I/O 并行性,基于 C++ 实现,专注于更高性能和更低的延迟。
  • DragonflyDB: 基于类似 Redis 的设计,支持主从模式,但目前还没有成熟的多节点分布式架构。主要用于缓存场景。
  • TiKV: 基于Raft 协议的分布式事务系统,支持强一致性。TiKV 是 TiDB 的底层存储,通过Region(分片)进行数据分布,并使用多副本来保证高可用性。
  • Couchbase: 采用分布式架构,通过分片和副本来实现扩展性和高可用性。它的一致性协议基于 DCP(Database Change Protocol),用于分布式同步。

3. 数据结构

  • MongoDB: 使用文档模型存储数据,基于 JSON/BSON 格式。每条记录是一个文档,支持嵌套文档和数组,灵活的结构化和非结构化数据。
  • Redis: Redis 是基于内存的数据存储,支持多种数据类型,包括字符串哈希列表集合有序集合等,非常适合缓存和实时数据处理。
  • Cassandra: 基于列族存储模型(类似于键值对),适合处理大规模、稀疏数据。数据存储为列族和行,适合写多读少的应用场景。
  • ScyllaDB: 与 Cassandra 相同的列族模型,但使用更加高效的底层实现。
  • DragonflyDB: 类似 Redis,支持多种数据结构,如字符串、哈希、列表、集合和有序集合等,专注于内存中处理高效缓存。
  • TiKV: 使用键值对存储模型,支持多种复杂的数据结构,通过与 TiDB 配合使用,支持 SQL 和事务模型。
  • Couchbase: 使用文档存储模型,类似于 MongoDB,基于 JSON 文档,支持嵌套结构和数组。

4. 查询方式

  • MongoDB: 提供强大的查询语言,支持基于字段的条件查询、索引查询、聚合查询等。支持丰富的操作符和管道操作。
  • Redis: 通过命令行接口(CLI)或编程接口对其数据结构进行直接操作,查询能力较为简单,适合键值对操作和简单的集合、哈希等查询。
  • Cassandra: 支持 CQL(Cassandra Query Language),类似于 SQL 的查询语言,但查询能力相对受限,主要适合范围查询和批量数据写入。
  • ScyllaDB: 完全兼容 Cassandra 的 CQL 查询语言,但由于底层改进,查询性能更高。
  • DragonflyDB: 类似于 Redis,通过命令行接口进行数据查询和操作,支持多种数据结构的操作,主要用于缓存场景。
  • TiKV: 本身不提供直接查询接口,通常与 TiDB 配合使用,TiDB 提供 SQL 查询能力。TiKV 通过键值接口操作数据。
  • Couchbase: 支持 N1QL(一种基于 SQL 的查询语言),适用于 JSON 文档的查询,支持索引、聚合和全文检索。

5. 存储引擎

  • MongoDB: 使用WiredTiger 作为默认的存储引擎,支持压缩和加密,能够高效地处理读写操作。MongoDB 也可以使用其他存储引擎,如 MMAPv1(已弃用)。
  • Redis: Redis 是基于内存的数据库,数据主要存储在内存中,并通过快照(RDB)或追加文件(AOF)来持久化到磁盘。
  • Cassandra: 使用基于磁盘的存储引擎,采用SSTableLSM Tree(Log-Structured Merge Tree)来优化写性能和磁盘 I/O。
  • ScyllaDB: 同样使用 LSM Tree 存储引擎,但通过对现代硬件的优化(如直接 I/O 和异步线程管理),提升了性能和延迟。
  • DragonflyDB: 类似 Redis,基于内存,但专注于高效的多线程设计和缓存场景。
  • TiKV: 使用基于 RocksDB 的存储引擎,适合高并发的写入场景,支持事务处理。
  • Couchbase: Couchbase 采用了基于内存和磁盘的混合存储引擎,支持对内存数据进行高效的查询,并定期将数据持久化到磁盘。

总结对比表:

数据库 CAP 实现 分布式架构 数据结构 查询方式 存储引擎
MongoDB CP(默认) 副本集+分片 文档模型 强大的查询语言 WiredTiger
Redis AP 主从复制+集群 多种数据结构 命令行接口 内存存储,RDB/AOF
Cassandra AP 对等架构 列族模型 CQL LSM Tree/SSTable
ScyllaDB AP 对等架构 列族模型 CQL LSM Tree(高性能)
DragonflyDB AP 主从复制 多种数据结构 命令行接口 内存存储
TiKV CP Raft 分布式架构 键值对 与 TiDB 配合 RocksDB

Q: 请在上表继续添加 cockroachdb,garnet,apache ignite, apache kvrocks

A: 以下是包含 CockroachDBGarnetApache IgniteApache Kvrocks 的更新对比表,继续沿用 CAP 实现分布式架构数据结构查询方式存储引擎 维度。

数据库 CAP 实现 分布式架构 数据结构 查询方式 存储引擎
MongoDB CP(默认) 副本集+分片 文档模型 强大的查询语言 WiredTiger
Redis AP 主从复制+集群 多种数据结构 命令行接口 内存存储,RDB/AOF
Cassandra AP 对等架构 列族模型 CQL LSM Tree/SSTable
ScyllaDB AP 对等架构 列族模型 CQL LSM Tree(高性能)
DragonflyDB AP 主从复制 多种数据结构 命令行接口 内存存储
TiKV CP Raft 分布式架构 键值对 与 TiDB 配合 RocksDB
Couchbase CP/AP 可选 分片+副本 文档模型 N1QL,支持 SQL 基于内存和磁盘
CockroachDB CP 基于 Raft 的对等架构 行存储模型 类 SQL 查询(SQL 兼容) Pebble 存储引擎(基于 RocksDB)
Garnet CP/AP 可选 分布式架构 多种数据结构 命令行接口 内存+持久化存储
Apache Ignite CP/AP 可选 分布式+内存计算 键值对/SQL 支持 SQL、Cassandra 风格查询 内存优先,持久化到磁盘
Apache Kvrocks AP 主从复制+集群 多种数据结构 Redis 风格命令 基于 RocksDB

6. CockroachDB

  • CAP 实现: 强调一致性和分区容忍性(CP),通过 Raft 协议实现分布式一致性和事务性。
  • 分布式架构: 使用对等架构,基于 Raft 的复制来保证强一致性和高可用性。各节点对等,通过自动分片和副本管理进行横向扩展。
  • 数据结构: 类似于关系型数据库,采用行存储模型,支持 ACID 事务。
  • 查询方式: 完全支持 SQL,兼容 PostgreSQL 查询语法,适合关系型查询和复杂事务操作。
  • 存储引擎: 使用 CockroachDB 自己的Pebble 存储引擎,基于 RocksDB,专为高性能的分布式事务设计。

7. Garnet

  • CAP 实现: 提供 CP 和 AP 模型之间的灵活选择,可以根据应用场景调整一致性和可用性。
  • 分布式架构: 通过副本和分片机制实现分布式存储,支持自动扩展和高可用性。
  • 数据结构: 支持多种数据结构(如键值对、哈希、列表等),类似于 Redis 和 DragonflyDB。
  • 查询方式: 通过命令行接口进行数据操作,适合缓存和实时数据处理场景。
  • 存储引擎: 结合内存和持久化存储,适合高并发场景下的数据存储与查询。

8. Apache Ignite

  • CAP 实现: 提供可配置的 CAP 实现,允许用户选择强一致性(CP)或高可用性(AP),视需求而定。
  • 分布式架构: 基于内存的分布式架构,支持横向扩展和高性能计算,通过复制和分片实现数据分布和高可用性。
  • 数据结构: 支持键值对SQL 结构化数据,支持复杂的内存计算和大数据处理,兼容 HDFS、Cassandra 风格的存储。
  • 查询方式: 提供 SQL 支持,也支持类似 Cassandra 风格的查询,适合大规模数据计算和实时分析。
  • 存储引擎: 以内存优先(In-Memory Computing),但支持将数据持久化到磁盘以确保数据安全性。

9. Apache Kvrocks

  • CAP 实现: 偏向 AP 模型,专注于高可用性和分区容忍性。
  • 分布式架构: 支持主从复制集群模式,类似 Redis 的分片机制。
  • 数据结构: 支持多种数据结构,类似于 Redis,包括字符串哈希列表集合等。
  • 查询方式: 使用与 Redis 类似的命令行接口,支持 Redis 风格的查询和数据操作。
  • 存储引擎: 基于 RocksDB 存储引擎,提供持久化支持,与 Redis 相比更注重数据的持久化和高并发写入性能。

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

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

相关文章

KeyShot基础操作2 - 材质篇

介绍了KeyShot的材质相关的内容:上材质、材质参数、贴图类型、映射类型、材质节点图等。​这部分基础操作,只是介绍KeyShot的操作方法,望知晓。 后续也会再更新材质、打光的案例,同时也会提供对应的工程文件。上材质基础操作 材质的通用参数 材质类型 纹理类型 多层材质 贴…

创建进程,设计信号量同步机制,实现多线程同步 - C语言版

环境:Windows11 编译器:Visual Studio 2019相关头文件: #include <windows.h> #include <stdio.h>相关函数:睡眠等待函数:Sleep(int millisecond); 睡眠等待一定时间,会造成OS重新调度其它的线程运行Sleep(10); //当前线程睡眠10毫秒后重新执行创建进程Cre…

古典+ezRSA

​ 古典密码在线工具:https://ctf.bugku.com/tools.html 一键解码工具库:随波逐流,在github上下载即可 注:古典密码只需做个了解,因为很多都是靠工具实现的,多刷题有个印象,遇到题能看出像什么密码就好。 Base家族 在密码学领域,"base" 通常指的是一种编码方…

【专题】2024年母婴行业发展趋势洞察报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37818 在当今消费市场中,母婴领域正经历着深刻的变革。随着需求日益多元化,母婴用户的消费习惯和选购考量因素发生了显著变化。 分龄分层产品逐渐成为主流,这背后是用户对个性化解决方案的追求以及对孩子成长各方面的细致关注。同时,母婴…

Serilog文档翻译系列(七) - 应用设置、调试和诊断、开发接收器

Serilog支持通过App.config和Web.config中的01、应用设置 Serilog 支持在 App.config 和 Web.config 文件中使用简单的 配置语法,以设置最低日志级别、为事件添加额外属性以及控制日志输出。 Serilog 主要通过代码进行配置,设置支持旨在作为补充功能。虽然不是全面的,但大多…

【视频讲解】Python量子计算聚类Q-means:量子k-means算法分析电路数据实现可视化

全文链接:https://tecdat.cn/?p=37821 原文出处:拓端数据部落公众号 分析师:Yifan Zhang 量子计算在近期已然成为一个频繁出现的热门概念。尽管它在大众认知以及互联网社区中备受瞩目,热度极高,然而就其实际能力而言,当前仍然存在诸多局限。 量子计算作为一个全新的领域…

每日打卡

今天连接phoenix,版本是5.1.3-hbase-2.5,主要连接dbeaver,idea老是报错。

20222417 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 (1).掌握反汇编与十六进制编程器 (2).能正确修改机器指令改变程序执行流程 (3).能正确构造payload进行bof攻击 2.实验过程 (1).直接修改程序机器指令,改变程序执行流程 将pwn1文件放入共享文件夹,后续在kali中使用,再将文件复制到实验文件夹share路径…

第一课 php基础语法 变量 函数

php语法<?php// 代码段   ?> php输出方法:echo 和 print不同点:echo-能够输出一个以上的字符串,英文逗号隔开print-只能输出一个字符串,并始终返回1echo 比 print 稍快,并且开销低 注释注释不会被作为程序来读取和执行。它唯一的作用是供代码编辑者阅读(让别人…

CentOS 8 停止维护后通过 rpm 包手动安装 docker

根据 Docker官方文档 的指引,进入 Docker rpm 包下载的地址,根据自己系统的架构和具体版本选择对应的路径这里我使用 https://download.docker.com/linux/centos/7/x86_64/stable 版本,根据 docker 官方的给出的安装命令选择性的下载对应的 rpm 包最终使用 yum 命令安装下载…

02 Vue默认项目说明

1. node_modules pnpm 安装的第三方依赖 2. public 公共资源,存放网页图标等 3. src 开发代码存放位置 3.1 项目入口文件 main.ts import { createApp } from vue // 引入vue import ./style.css // 引入默认样式 import App from ./App.vue // 引入页面 App.VuecreateApp(App…

解构UI设计

解构UI设计 第一章 界面类型 1.1 闪屏页 又称为启动页,就是APP启动在进入功能主界面前用户看到的页面。 闪屏页决定了用户对App的第一印象。 闪屏页显示的时间很短,通常只有1秒。 闪屏页分为品牌宣传型、节日关怀型和活动推广型3种类型。 1.1.1 品牌宣传型 App的闪屏页是为体…