关系型数据库(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等)对比 的相关文章

  • 在 Kubernetes/Openshift 中将客户端-服务器流量保持在同一区域的最佳方法?

    我们运行兼容 Kubernetes OKD 3 11 的本地 私有云集群 其中后端应用程序与用作缓存和 K V 存储的低延迟 Redis 数据库进行通信 新的架构设计将在两个地理上分布的数据中心 区域 之间平均划分工作节点 我们可以假设节点
  • Redis发布/订阅:查看当前订阅了哪些频道

    我目前有兴趣查看我拥有的 Redis 发布 订阅应用程序中订阅了哪些频道 当客户端连接到我们的服务器时 我们将它们注册到如下所示的通道 user user id 这样做的原因是我希望能够看到谁 在线 目前 我在不知道客户端是否在线的情况下盲
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • Laravel 异常队列最大尝试次数超出

    我创建了一个应用程序来向多个用户发送电子邮件 但在处理大量收件人时遇到问题 该错误出现在failed jobs table Illuminate Queue MaxAttemptsExceededException App Jobs ESe
  • 创建 C++ Redis 模块 - “不导出 RedisModule_OnLoad() 符号”

    我在加载 Redis 模块时遇到一些问题 我只是复制来自的示例https redis io topics modules intro https redis io topics modules intro 但我把它剥下来了 include
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m
  • 如何使用 Redis 自动删除与模式匹配的键

    在我的 Redis DB 中 我有很多prefix
  • 如何配置Lettuce Redis集群异步连接池

    我正在配置我的生菜重新分配池 当我按照官方文档配置时 连接池无法正常初始化 无法获取连接 官方文档指出 RedisClusterClient clusterClient RedisClusterClient create RedisURI
  • Spring Data Redis 覆盖默认序列化器

    我正在尝试创建一个RedisTemplatebean 将具有更新的值序列化器来序列化对象JSONredis 中的格式 Configuration class RedisConfig Bean name redisTemplate Prima
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • 由于配置文件错误,无法启动 Redis 服务器

    我刚刚按照此处的说明安装了 Redis http redis io download http redis io download 当我运行 redis server redis conf 时出现以下错误 FATAL CONFIG FILE
  • Redis 中存储整数和字符串的区别

    这两个命令有什么区别吗 LPUSH myset 123 LPUSH myset 123 我想存储大约 500 万个整数 并且我想以最有效的方式做到这一点 不 没有什么区别 两者都存储为字符串 从redis io http redis io
  • Redis 在键过期时更新排序集

    我有一个 Redis 服务器 其中包含一组键值对和一个排序集 提供这些键值对的键的索引 键值对可以进入 已完成 状态 此时需要在 1 小时后删除它们 这可以通过在键上设置到期时间来简单地实现 但从排序集中清除它们似乎更成问题 我可以有一个过
  • 批量将Dictionary中的数据设置到Redis中

    我正在使用 StackExchange Redis DB 插入键值对字典Batch如下 private static StackExchange Redis IDatabase database public void SetAll
  • 为什么我们需要 Redis 来运行 CKAN?

    我想知道为什么我们需要 Redis 服务器来运行 CKAN 如果需要 为什么 我如何使用 CKAN 配置它 附注 我正在 RHEL7 中运行我的 ckan 实例 Update Redis 已成为一项要求从CKAN 2 7开始 https d
  • 在 Rails 应用程序上将 HASH 保存到 Redis

    我刚刚开始使用 Redis 和 Rails 所以这可能是一个愚蠢的问题 我试图将哈希值保存到 Redis 服务器 但是当我检索它时 它只是一个字符串 IE hash field gt value field2 gt value2 redis
  • JedisPoolConfig 不可分配给 GenericObjectPoolConfig

    我有一个基于 Spring 的 Java Web 应用程序托管在 Heroku 上 我正在尝试使用 Redis 实现来利用 Spring 缓存抽象 当服务器启动时 我收到一条错误消息 Type redis clients jedis Jed
  • 在 Redis 中存储 IP 范围

    我有很多不同提供商的 IP 范围 例如 P1 192 168 1 10 192 168 1 50 192 168 2 16 192 168 2 49 P2 17 36 15 34 17 36 15 255 P3 我将此 IP 转换为 int

随机推荐

  • 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 一 关系型数