【Elasticsearch入门到落地】3、es与mysql的概念对比

接上篇《2、正向索引和倒排索引》
上一篇我们学习了什么是正向索引和倒排索引。本篇我们来学习Elasticsearch与Mysql的概念与区别。

一、文档

Elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在Elasticsearch中。

例如下面数据库的商品价格表中存储的4条数据,在序列化为json后的格式如下:

可以看到ES与Mysql数据库表数据格式的差异还是比较大的。

二、索引

索引(index)是相同类型的文档的集合。在Elasticsearch中,文档肯定不止一条,会有多条,这些n多的文档之间,是有差异的,如下面这些离散的各个文档:

如其中包含“id、name、age”的文档,应该是一个用户信息文档,而“id、title、price”的文档,应该是一个商品信息文档,剩下的“id、userId、goodsId、totalFee”的文档,包含了自己本身的id,用户的id,商品的id,订单费用,这个应该是一个订单信息文档。
那这里就按照文档蕾西结构给相似结构的文档进行了归类,这些相似结构的文档,就是一种索引,上述文档归类后,形成了“商品索引”、“用户索引”和“订单索引”:

这就有点像mysql这种关系型数据库的表(Table)的概念一样,不同类型的文档放在不同类型的索引库中,不同索引库的差别就是文档结构不同。
这种文档的结构在关系型数据库中叫“表(Table)”,而在es中叫做“映射(mapping)”,即索引中文档的字段约束信息(如文档中的字段有几个,每个字段是字符还是数字等),类似表的结构约束。

三、概念对比

以下是对传统Mysql数据库中的“表(Table)”、“行(Row)”、“列(Column)”、“表结构(Schema)”和“SQL语句”概念对比Elasticsearch做了一个横向对比:

其中Mysql中的“表(Table)”对应的就是上面讲到的es的“索引(index)”;
Mysql中的“行(Row)”对应的就是上面讲到的es中一个个的“文档(Document)”;
Mysql中的“列(Column)”对应的就是上面讲到的es中每个文档中包含的具体字段(Field);
Mysql中的“表结构(Schema)”对应的就是上面讲到的es中每个文档的字段结构,以及类型约束;
Mysql中的“SQL语句”对应的就是es提供的json风格的请求语句(DSL),是一种查询语法,实现文档的增删改查。Mysql的SQL语句是在连接数据库connection后,发出查询语句进行查询,而es则是通过http请求进行查询,因为es对外暴露的是RESTful风格的API接口,这种接口的好处就是跟语言无关,任何的语言只要能发http请求,就可以将DSL语句发给es来处理,这样就脱离了语言束缚。

四、架构对比

Mysql的架构和Elasticsearch架构各有优缺点,应用的场景也略有不同,谁都无法彻底替代谁。
Mysql擅长事务类型操作,可以确保数据的安全性和一致性。Elasticsearch擅长海量数据的搜索、分析和计算。

如果我们做的是一个下单付款的动作,对数据的安全性要求很高,需要事务模式的操作,那就应该使用Mysql进行存储;如果做的是海量商品的搜索,或是对页面的搜索,内容比较琐碎和复杂,那么使用Elasticsearch是比较合适的。

所以Mysql的和Elasticsearch不是一个替代关系,而是一个互补关系。大部分软件系统的架构中,这两个存储模式都会存在。如下图:

用户将增删改查(CRUD)请求发送给服务器,如果是“写”的操作,我们就将数据请求发给Mysql,由Mysql进行数据的存储;如果是“读”的操作,我们将数据请求发给Elasticsearch,由它来处理数据搜索的请求。而为了保持数据一致,Mysql写入或更新数据时,会同步给Elasticsearch,以保证es每次搜索的都是最新数据。

五、总结

●文档:一条数据就是一个文档,es中是Json格式;
●字段:Json文档中的字段;
●索引:同类型的文档的集合;
●映射:索引中文档的约束,比如字段名称、类型;
●Elasticsearch与数据库的关系:数据库负责事务类型操作,Elasticsearch负责海量数据的搜索、分析、计算。


参考:《黑马Elasticsearch全套教程》

转载请注明出处:https://guangzai.blog.csdn.net/article/details/144310481

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

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

相关文章

云服务器部署upload-labs-docker(文件上传靶场)环境 以及相关报错问题

环境的搭建 准备:云服务器(本地的linux服务器(版本最好不要是老的不然不兼容docker)) f8x配置docker环境: https://github.com/ffffffff0x/f8x 一键配置 docker拉取file-labs靶场 https://github.com…

HAMR技术进入云存储市场!

2024年12月3日,Seagate宣布其Mozaic 3系列HAMR(热辅助磁记录)硬盘获得了来自一家领先云服务提供商(可能AWS、Azure或Google Cloud其中之一)以及其他高容量硬盘客户的资格认证。 Seagate的Mozaic 3技术通过引入热辅助磁…

【错误记录】Android Studio 开发环境内存占用过多 ( 记录内存使用情况 )

文章目录 一、报错信息二、AS 内存记录分析 一、报错信息 使用 Android Studio 一段时间后 , 内存爆了 , 占用了 10G 的内存 ; 二、AS 内存记录分析 AS 刚启动时 , 只占 2014M 内存 ; 编译运行程序后 , 内存变为 2800M 左右 ; 设置显示的运行程序对应的日志 , 占用内存 就会稳定…

BERT模型的实现

本文用 pytorch 实现一个BERT模型。 食用方法: 直接下载完整实现, 在自己本地跑一遍,保证不报错。先完成数据预处理阶段(1-4)的代码阅读,然后按照如下关键点的描述完成代码的实现。自己看着代码手写后续部…

VSCode GDB远程嵌入开发板调试

VSCode GDB远程嵌入式开发板调试 一、原理 嵌入式系统中一般在 PC端运行 gdb工具,源码也是在 PC端,源码对应的可执行文件放到开发板中运行。为此我们需要在开发板中运行 gdbserver,通过网络与 PC端的 gdb进行通信。因此要想在 PC上通过 gdb…

Hadoop3集群实战:从零开始的搭建之旅

目录 一、概念 1.1 Hadoop是什么 1.2 历史 1.3 三大发行版本(了解) 1.4 优势 1.5 组成💗 1.6 HDFS架构 1.7 YARN架构 1.8 MapReduce概述 1.9 HDFS\YARN\MapReduce关系 二、环境准备 2.1 准备模版虚拟机 2.2 安装必要软件 2.3 安…

RK3568笔记0:环境搭建

第1章 安装NFS服务器 NFS可以让不同的机器、不同的操作系统之间彼此共享文件 服务器安装NFS sudo apt-get install nfs-kernel-server服务器创建一个共享目录 sudo mkdir -p /home/lmz/workspaces/shared_directory配置共享目录到服务器中的配置文件中 sudo vim /etc/export…

Linux socket编程

目录 基础概念端口和端口号Socket(套接字)UDP和TCP的概念 Socket编程实战socket的类型struct sockaddrstruct sockaddr_in网络字节序socket APITCP网络编程流程分析UDP Demo样例 other概念补充setsockopt函数心跳机制面向字节流与面向报文的理解 参考 基…

OBS学习

OBS简介 OBS是Open Broadcaster Software的简称,是一款开源,用于视频录制以及直播串流的软件,它支持Windows、Mac以及Linux操作系统。 OBS使用场景 使用OBS软件,可以借助单反、摄像机、无人机等摄影设备在电脑上直播。OBS可以把…

SQL Server:调用的目标发生了异常。(mscorlib)

我之前安装的SQL Server是2014版本,SSMS运行也很流畅,有一次有个同事让我链接云服务器SQL地址,直接报上图的错误,把我弄的一愣一愣的。 后面才发现,这是版本太低导致的,但是你如果使用Navicat是没有问题的…

dolphinScheduler 任务调度

#Using docker-compose to Start Server #下载:https://dlcdn.apache.org/dolphinscheduler/3.1.9/apache-dolphinscheduler-3.1.9-src.tar.gz $ DOLPHINSCHEDULER_VERSION3.1.9 $ tar -zxf apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src.t…

“为您的家电穿上防震铠甲:优质电器缓冲器

在地震频发地区或日常生活中,确保家电的安全和稳定至关重要。为了防止地震、意外碰撞或其他外力对家电造成损害,采用优质的电器缓冲器就像是为家电穿上了一层坚固的“防震铠甲”。这不仅能够有效减少因震动导致的损坏风险,还能显著延长家电的…

Qlib上手学习记录

Qlib 是一个面向人工智能的量化投资平台,其目标是通过在量化投资中运用AI技术来发掘潜力、赋能研究并创造价值,从探索投资策略到实现产品化部署。该平台支持多种机器学习建模范式,包括有监督学习、市场动态建模以及强化学习等。 真的是走了很…

web前端设计1

熟悉流行框架、熟练掌握CSS的写法,以及JAVASCRIPT库的应用,最主要的是能按要求改出相应的界面,因为我们基本没有自己手写代码的,所以得会拿别的界面改成想要的界面。 前端比较吃能力的就是CSS的写法,如何用已写好的框…

2020年国赛高教杯数学建模E题校园供水系统智能管理解题全过程文档及程序

2020年国赛高教杯数学建模 E题 校园供水系统智能管理 原题再现 校园供水系统是校园公用设施的重要组成部分,学校为了保障校园供水系统的正常运行需要投入大量的人力、物力和财力。随着科学技术的发展,校园内已经普遍使用了智能水表,从而可以…

JAVA |日常开发中连接Sqlite数据库详解

JAVA |日常开发中连接Sqlite数据库详解 前言一、SQLite 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 SQLite 数据库的准备工作2.1 添加 SQLite JDBC 驱动依赖2.2 了解 JDBC 基础概念 三、建立数据库连接3.1 代码示例3.2 步骤解析 四、执行 SQL 语句4.1 创建…

图像超分辨率技术新进展:混合注意力聚合变换器HAAT

目录 1. 引言: 2. 混合注意力聚合变换器(HAAT): 2.1 Swin-Dense-Residual-Connected Block(SDRCB): 2.2 Hybrid Grid Attention Block(HGAB): 3. 实验结…

【Appium】AttributeError: ‘NoneType‘ object has no attribute ‘to_capabilities‘

目录 1、报错内容 2、解决方案 (1)检查 (2)报错原因 (3)解决步骤 3、解决结果 1、报错内容 在PyCharm编写好脚本后,模拟器和appium也是连接成功的,但是运行脚本时报错&…

1.1 Beginner Level学习之“创建 ROS msg 和 srv”(第十节)

学习大纲: 1. msg 和 srv msg 文件是描述 ROS 消息字段的简单文本文件。它们用于为不同语言生成消息的源代码。srv 文件则描述了一个服务,包括两部分:请求和响应。Srv 文件用于生成服务的源代码。msg 文件存储在包的 msg 目录中。srv 文件存…

Android仿美团左右联动购物列表

Android仿美团左右联动购物列表 左右联动购物列表,不难。 一、思路: 两个RecycleView 二、效果图: 三、关键代码: public class MainActivity extends AppCompatActivity {private RecyclerView rl_left;private RecyclerVie…