关系型数据库(mysql等)和非关系型数据库(Redis、ElasticSearch、HBase等)对比

2023-11-03

目录

一、关系型数据库

二、非关系型数据库

1. 缓存型数据库

(1)Redis

(2)Memcached

2. 文档型数据库

(1)ElasticSearc

(2)mongoDB

3. 列式型数据库

(1)HBase

(2)Cassandra


一、关系型数据库

主流的有3个,mysql、sqlServer、Oracle

以sql为例,关系型数据库存储结构是二维表结构,类似依据x,y可以定位一个数据;

Relational DB  ⇒ Databases ⇒ Tables ⇒ Rows  ⇒ Columns
关系型数据库       数据库           表             行           列(字段)  

基于行式存储,存储结构化数据,一行代表一条完整的信息。

关系型数据库遵循ACID特性(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),支持事务处理能力。

但容量扩展性有限。

数据库的ACID & 3种隔离级别 脏读、不可重复读、幻读

适用场景:

需要事务支持;

基于sql的结构化查询存储,处理复杂的关系。

 

二、非关系型数据库

即NoSQL数据库(not only sql),一般以简单的key-value模式存储,因此大大增加了数据库的扩展能力,不支持ACID,远超于SQL的性能。

一般用不着sql和用了sql也不行的情况,可以考虑使用Nosql。

适用场景:

对数据高并发的读写(mysql数据库存储在磁盘上,高并发会产生大量IO)

对海量数据的读写(mysql数据库不支持海量数据)

对数据高可扩展性的(例如key-value,redis中支持5种类型的value)

1. 缓存型数据库

(1)Redis

key -> value(String、list、set、hash(field-value)、zset(score-value))

内存中数据有时间限制,也提供RDB和AOF两种持久化方式。

(2)Memcached

区别是不会持久化,完全基于内存,基本被Redis替代了。

 

2. 文档型数据库

(1)ElasticSearc

ElasticSearch是一款分布式全文检索框架,底层基于Lucene实现。

ElasticSearch 使用 JSON 格式存储数据,属于文档存储。

Elasticsearch  ⇒ Indices       ⇒ Types  ⇒ Documents   ⇒   Fields
Els                        索引               类型        文档                 域(字段)

谈谈Elasticsearch 和 传统关系型数据库的对比

相比mysql交互性好但扩展性不足,HBase支持海量数据但查询灵活性不足,ES可以在容量和交互性上达到一个很好的平衡,而且支持全文检索。

(2)mongoDB

数据都存在内存中,如果内存不足,把不常用的数据保存到硬盘;

key-value模式,但对value(尤其是json)提供了丰富的查询功能,

可替代RDBMS,成立独立数据库,也可以配合RDBMS存储特定数据。

 

3. 列式型数据库

ps:行式存储和列式存储

行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性;

缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。

列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。

列式存储的主要优点之一就是可以大幅降低系统的I/O,尤其是在海量数据查询时,而I/O向来是系统的主要瓶颈之一。

(1)HBase

Hadoop项目中的数据库,基于HDFS,依赖于Zookeeper,用于需要对大量数据进行随机、实时的读写操作的场景;

适用于处理数据量非常大的表,可以处理超过10亿行数据,还可以处理数百万列元素的数据表。

key(rowkey、列族、列、时间戳) - value(具体的数据)

每一个key/value定义为一个cell,在HBase中,行是key-value映射的集合,这个映射通过rowkey唯一标识。

HBase的架构原理(7大组件)图文详解及其与Hive的区别

ps:Hive一般基于mysql,适用于离线大数据的查询,本质是将hiveSQL转化成MR然后提交到集群中执行,省去了大量写MR程序的操作,其操作的是结构化数据,本身是一个数据仓库工具,并不属于数据库之列。

(2)Cassandra

Appache Cassandra是一款免费的开源NoSQL数据库,其设计目的在于管理由大量商用服务器构建起来的庞大集群上的海量数据集(数据量通常达到PB级别)。在众多显著特性当中,Cassandra最为卓越的长处是对写入及读取操作进行规模调整,而且其不强调主集群的设计思路能够以相对直观的方式简化各集群的创建与扩展流程。

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关系型数据库(mysql等)和非关系型数据库(Redis、ElasticSearch、HBase等)对比 的相关文章

  • 如何让客户端下载动态生成的非常大的文件

    我有一个导出功能 可以读取整个数据库并创建一个包含所有记录的 xls 文件 然后文件被发送到客户端 当然 导出完整数据库的时间需要大量时间 并且请求很快就会以超时错误结束 处理这种情况的最佳解决方案是什么 例如 我听说过使用 Redis 创
  • 如何使用Spring Cache处理redis异常?

    我目前正在开发一个包含 Spring Data Redis 和 Spring Cache 的项目 在spring data redis中 我使用redis模板调用redis 我在 try catch 块中处理 redis 模板抛出的所有异常
  • Redis键空间事件不触发

    我有两个 Redis 客户端 在一个文件中我有一个简单的脚本设置并删除了 Redis 键 var redis require redis var client redis createClient 6379 127 0 0 1 client
  • WSL Redis 遇到系统尚未使用 systemd 作为 init 系统(PID 1)启动。无法操作[已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试遵循本文中讨论的 Redis 安装过程article https www digitalocean com community
  • 如何批量删除Redis中数十万个带有特殊字符的key

    我们有一个包含数十万个 Redis 键的列表 其中包含各种特殊字符 我们希望批量删除它们 对于这个问题上的类似问题 有一些很好的答案 如何使用 Redis 自动删除与模式匹配的键 https stackoverflow com questi
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • 如何测试我的 Redis 缓存是否正常工作?

    我已经安装了 django redis cache 和 redis py 我遵循了 Django 的缓存文档 据我所知 以下设置就是我所需要的 但我如何判断它是否正常工作 设置 py CACHES default BACKEND redis
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • Redis Cluster 与 Pub/Sub 中的 ZeroMQ,用于水平扩展的分布式系统

    如果我要设计一个巨大的分布式系统 其吞吐量应随系统中的订阅者数量和通道数量线性扩展 哪个会更好 1 Redis集群 仅适用于Redis 3 0 alpha 如果是集群模式 您可以在一个节点上发布并在另一个完全不同的节点上订阅 消息将传播并到
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 使用 Celery 通过 Gevent 进行实时、同步的外部 API 查询

    我正在开发一个 Web 应用程序 该应用程序将接收用户的请求 并且必须调用许多外部 API 来编写对该请求的答案 这可以直接从主 Web 线程使用 gevent 之类的东西来扇出请求来完成 或者 我在想 我可以将传入的请求放入队列中 并使用
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker
  • 如何将“.csv”数据文件导入Redis数据库

    如何将 csv 数据文件导入 Redis 数据库 csv 文件中包含 id 时间 纬度 经度 列 您能否向我建议导入 CSV 文件并能够执行空间查询的最佳方法 这是一个非常广泛的问题 因为我们不知道您想要什么数据结构 您期望什么查询等等 为
  • Laravel 异常队列最大尝试次数超出

    我创建了一个应用程序来向多个用户发送电子邮件 但在处理大量收件人时遇到问题 该错误出现在failed jobs table Illuminate Queue MaxAttemptsExceededException App Jobs ESe
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m

随机推荐

  • SpringCloud-Hystrix服务降级与熔断简介与简单配置

    1 前言 作者最近在学习springcloud 本篇文章仅作为学习笔记 如有错误 敬请指正 2 Hystrix是什么 Hystrix是一个用于处理分布式系统的延迟和容错的开源库 在分布式系统里 许多依赖不可避免的会调用失败 比如 超时 异常
  • 8.常用统计分析方法——生存分析

    目录 生存分析基本概念 生存率估计 1 乘积极限法 2 寿命表法 3 生存曲线 生存曲线比较 COX比例风险回归模型 1 建立COX回归模型 2 比例风险假定的检验 3 生存预测 生存分析基本概念 logistic回归中因变量是终点事件发生
  • cocos creator碰撞和碰撞回调不生效

    1 碰撞不生效 一定要记得 在使用物理的时候 一定要先开启物理 cc director getPhysicsManager enabled true 只有在onLoad 中 开启 才有效 在onEnable 或者start 都无效 2 碰撞
  • Rational Rose 7.0安装教程

    关注公众号 免费获取资料 简介 Rational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具 用于可视化建模和公司级水平软件应用的组件构造 就像一个戏剧导演设计一个剧本一样 一个软件设计师使用Ration
  • 性能测试之性能监控和性能优化

    目录 一 概述 二 jconsole和jvisualvm 三 jconsole 四 visualvm 1 输入命令提示 jvisualvm不是内部或外部命令 也不是可运行的程序或批处理文件 2 打开jvisualvm里面不包含GC监控 五
  • 基于低代码平台实现的免费CRM系统

    编者按 企业生存的根本是客户资源 因此客户关系的管理对于企业来说至关重要 目前我国中小企业对于客户的管理方法不够重视 以致于客户外流 客户转化率不高 而CRM客户关系管理系统有助于企业培养和增强客户关系 下面就让我们一起来了解一下企业该如何
  • 使用Java编写的简单行为树

    引言 试着用java把以前用c 写的行为树复现了出来 代码 import java util Random 假设有一士兵 初始生命为100 弹药为200发 每个弹匣40发 会逃跑 会巡逻 会攻击 会换弹 会补给 会发现敌人 class So
  • MyBatis基础语法

    1 namespace用于指定dao Mapper 层文件的路径 2 property传入的值与po SysUser的属性对应 3 column传入的值与数据库的字段对应 4 javaType传入的值 路径 是java这边的数据类型 5 j
  • C语言写九九乘法表(五种方法)

    当我们学习编程语言时 通常需要掌握一些基本的语法和功能 在C语言中 输出九九乘法表是一个很好的练习 因为它既简单又有趣 本文将介绍如何用C语言编写代码来输出九九乘法表 在开始之前 请确保您已经安装了C语言的开发环境 比如VS2019 首先
  • el-input 怎么添加鼠标悬浮内容展示

    您可以通过使用el tooltip组件的content属性将提示框附加到el input中 然后 您可以添加一个文本框和图标 当鼠标悬停在这些元素上时 提示框就会显示 以下是示例代码
  • 在 Python 中使用 MQTT的方法

    更多编程教程请到 菜鸟教程 https www piaodoo com 友情链接 高州阳光论坛https www hnthzk com Python 是一种广泛使用的解释型 高级编程 通用型编程语言 Python 的设计哲学强调代码的可读性
  • 【华为OD机试真题 python】组装最大可靠性设备【2023 Q2

    前言 华为OD笔试真题 python 本专栏包含华为OD机试真题 会实时更新收纳网友反馈 为大家更新最新的华为德科OD机试试题 为大家提供学习和练手的题库 订阅本专栏后可私信进交流群哦 题目描述 组装最大可靠性设备 一个设备由N种类型元器件
  • QT的UDP协议

    UDP协议 客户端并不与服务器建立连接 它只负责调用发送函 数向服务器发出数据报 类似地 服务器也不从客户端接收连接 只负责调用接 收函数 等待来自某客户端的数据到达 客户端 端口号 quint64 初始化端口 quint64 port 5
  • idea 出现 Failure to find org.eclipse.m2e:lifecycle-mapping:pom:1.0.0 in http://maven.aliyun.com/

    使用mybatis autogenerator时失败 显示Failure to find org eclipse m2e lifecycle mapping pom 1 0 0 in http maven aliyun com nexus
  • G - 数据结构实验之栈与队列七:出栈序列判定

    Description 给一个初始的入栈序列 其次序即为元素的入栈次序 栈顶元素可以随时出栈 每个元素只能入栈依次 输入一个入栈序列 后面依次输入多个序列 请判断这些序列是否为所给入栈序列合法的出栈序列 例如序列1 2 3 4 5是某栈的压
  • Flutter中EventBus组件的使用

    1 首先导入使用EventBus时所需的包 event bus 1 1 1 2 还需要一个EventBus工具类 import dart async import package event bus event bus dart impor
  • QT打包exe程序

    文章目录 1 Release版本编译 2 发布给别人的版本 1 Release版本编译 qt选择release编译后 到对应release文件夹找到exe 双击运行 如果运行不了或者报错缺少dll文件 大概率是没有添加环境变量 打开系统环境
  • 第一次使用Android Studio时你应该知道的一切配置

    http www cnblogs com smyhvae p 4390905 html
  • Linux系统目录简介及常规操作命令

    文件类型 普通文件 regular file 就是一般存取的文件 由ls al显示出来的属性中 第一个属性为 例如 rwxrwxrwx 另外 依照文件的内容 又大致可以分为 1 纯文本文件 ASCII 这是Unix系统中最多的一种文件类型
  • 关系型数据库(mysql等)和非关系型数据库(Redis、ElasticSearch、HBase等)对比

    目录 一 关系型数据库 二 非关系型数据库 1 缓存型数据库 1 Redis 2 Memcached 2 文档型数据库 1 ElasticSearc 2 mongoDB 3 列式型数据库 1 HBase 2 Cassandra 一 关系型数