什么时候考虑将mysql数据迁移到ES?

news2024/10/6 1:22:05

文章目录

  • 对ES的一些疑问
    • 问题1:ES相比mysql本身有哪些优势?
    • 问题2:哪些场景适合用ES而不是mysql?
    • 问题3:mysql逐行扫描,根据过滤条件检查记录中对应字段是否满足要求属于正排索引,根据二叉树索引检索记录的方式属于正排索引还是倒排索引
    • 问题4:对于简单数字字段,为什么不像mysql一样使用B+树作为索引
  • 一些概念
    • 1、倒排索引
    • 2、BKD树

在模糊的影响中,ES查询效率高,尤其是最近组内在推慢sql治理,看到有些单张表已经存在索引数量近10个,表中字段确实比较多,一种治理方式是宽表拆分多个表,降低每个表查询的字段,每个表需要创建和维护索引数量也会降低。也在考虑是不是可以将数据同步到ES,部分查询场景走ES,宽表拆分导致数据比较分散,更新和查询起来更麻烦,使用ES数据完整性可以保证,相同数据使用不同的存储介质进行存储,更新和维护相比来说更简单。这里不仅自问,增加mysql从库从库数量,降低查询压力不行吗,同样的数据同步到ES查询,查询效率就会显著提升吗?

对ES的一些疑问

问题1:ES相比mysql本身有哪些优势?

1、ES会在所有字段上创建索引。
首先对于mysql中的数据同步到ES之后,会以JSON对象的形式进行存储,mysql中一行记录对应ES中一个文档。索引字段都会被索引,对于文本和keyword字段会使用进行分词、然后采用建立倒排索引,对于数值、日期等其它类型字段使用不同的数据结构和索引技术,例如对于数值和地理位置数据使用BKD树。

2、水平扩展。
当数据量增加时,可以通过增加结点实现自动水平扩容,而mysql要实现水平扩容,往往需要手动操作,复杂度较大。

3、分布式检索和并行处理。
ES天然将数据分片存储,并行查询时将每个分片上结果合并处理,mysql虽然也支持分库分表,但分库分表全部扫描效率相对较慢。

4、ES支持对文本进行全文检索,比mysql的模糊查询要快。
例如现在有一个用户表,其中包含一个个人简介profile字段,并且该表数据同步一份到了ES,二者要查询喜欢唱歌的人,查询方式分别如下,
对于Mysql,使用的是子字符串匹配算法:
SELECT * FROM users WHERE profile LIKE ‘%唱歌%’;
对于ES,使用倒排索引,显而易见,效率更高:
GET /users/_search
{
“query”: {
“match”: {
“profile”: “唱歌”
}
}
}

问题2:哪些场景适合用ES而不是mysql?

场景mysql效率ES查询效率优先选择
简单数字类型,数量不多高,mysql使用起来更简单,可视化效果更好高,虽然也支持高效查询,感觉不是很有必要,相比mysql更重mysql
简单数字类型,数量很多通过建立索引和分库分表依然可以胜任,但是维护和查询复杂度会增高,水平分库分表可以降低每个表的数据量,垂直分表可以减少单个表字段,提高单表查询效率,跨表查询将变得复杂,mysql写入高,对于实时写入场景要求高场景可以继续使用mysql分布式扩展和并行查询,大数量查询效率高,并且天然支持水平扩展,写入效率没有mysql高,对于做聚合分析效率高,一般也会同步一份数据到ES,负责一些非实时的查询mysql和ES同时使用
包含大文本低,尤其模糊查询高,使用了倒排索引ES

问题3:mysql逐行扫描,根据过滤条件检查记录中对应字段是否满足要求属于正排索引,根据二叉树索引检索记录的方式属于正排索引还是倒排索引

B+树非叶子结点存储记录中某一列的值,叶子结点存储记录的id,倒排索引是根据某个词查询出所在的所有文档列表,二者虽然都是从记录中某个值查询整个记录的信息所在位置(唯一文档标识或者记录逐渐),但是二者一个是查询出一条记录,一个是查询出这个单词出现的所有文档列表,差别还是很大的,一个用于大文本,一个用户非大文本,专门解决的场景也不一样。

问题4:对于简单数字字段,为什么不像mysql一样使用B+树作为索引

首先从ES的定位来说,ES是为了提高多字段联合查询,虽然在多个字段上使用B+树创建联合索引,但是其实是将多个字段顺序化,但其实在相近的数据,在空间上往往距离也很近,对于B+树没有保留数据的空间信息,查询效率不是很高,而是使用使用了保留数据空间特征的BKD-Tree作为索引。
基于B+树创建的联合索引。
如下图所示,创建和查询都是优先表第一列,只有第一列相同才会比较第二列,这样多维数据在逻辑上就变成了一维。
在这里插入图片描述

对于BKD树,在创建索引,每层会依次按照k个纬度交替轮流进行划分,这样不用等第一维值全部检索完才能利用后面纬度数据进行数据查找,如下图依次是二维和三维BKD树的的示意图,对于二维BKD树,奇数层次按照第一维度划分,偶数层次按照第二维进行划分,依次交替。
在这里插入图片描述
在这里插入图片描述

一些概念

1、倒排索引

倒排索引,也成为方向索引,是一种常用在文档检索系统中的索引方法,包含两种形式,第一种,反向文档索引一条记录的水平反向索引,包含每个单词所在文档列表;第二种,完全反向索引一个单词的水平反向索引,包含每个单词在一个文档中位置。三条记录,举例说明,:
T0=“what is banann”
T1= “it is what is it”
T2=“it is a banana”
反向文档索引:
“a” : {2}
“banana”: {0,2}
“is” :{0,1,2}
“it”:{1,2}
“what”:{0,1}
完全反向索引:
“a” : {(2,2)}
“banana”: {(2,3)}
“is” :{(0,1),(1,1),(1,3),(2,1)}
“it”:{(1,0),(1,4),(2,0)}
“what”:{(0,0),()1,2}
比如查询条件为“What”, “is”, “it”,计算每个关键词出现的文档取交集{0,1}∩{0,1,2}∩{1,2}={2},使用完全反向索引同理,只会对文档位置取交集,例子三条记录是正向索引,根据文档id,检索每个文档包含的内容。

2、BKD树

BKD树全称为Block-K-dimension Tree,是多维树(K-dimension Tree,KD-Tree)的改良版本,改善了内存利用率和更好的查询效率,多用于多维数据搜索。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 189.轮转数组 三段逆置 C写法

LeetCode 189.轮转数组 C写法 三段逆置 思路: 三段逆置方法:先逆置前n-k个 再逆置后k个 最后整体逆置 由示例1得,需要先逆置1,2,3,4 再逆置5,6,7,最后前n-k个与后k个逆置 代码 void reverse(int*num, int left, int right) //逆置函数 { while(left …

XLSX + LuckySheet + LuckyExcel + Web Worker实现前端的excel预览

文章目录 功能简介简单代码实现web worker 版本效果参考 功能简介 通过LuckyExcel的transformExcelToLucky方法, 我们可以把一个文件直接转成LuckySheet需要的json字符串, 之后我们就可以用LuckySheet预览excelLuckyExcel只能解析xlsx格式的excel文件&a…

mac|idea导入通义灵码插件

官方教程:通义灵码下载安装指南_智能编码助手_AI编程_云效(Apsara Devops)-阿里云帮助中心 下载插件: ⇩ TONGYI Lingma - JetBrains 结果如下: 选择apply、ok,会出现弹窗,点击登录 可以实现:生成单元测…

SQL Server特性

一、创建表 在sql server中使用create table来创建新表。 create table Customers( id int primary key identity(1,1), name varchar(5) ) 该表名为Customers其中包含了2个字段,分别为id(主键)以及name。 1、数据类型 整数类型&#xff…

【TB作品】51单片机 Proteus仿真 00002仿真-智能台灯色调倒计时光强

实验报告:基于51单片机的智能台灯控制系统 背景 本实验旨在设计一个基于51单片机的智能台灯控制系统,该系统可以通过按键进行手动控制,并能根据环境光强度自动调节台灯亮度。此外,系统还具备倒计时关灯功能。 器件连接 51单片…

latex英文转中文word,及一些latex相关工具分享

前言:想要转换latex生成的英文pdf文件为中文word文件 一、主要步骤 1、文字翻译:直接使用谷歌翻译等辅助将英文翻译成中文即可; 2、图片: 使用latex时一般保存的.png,.bmp格式图片可以直接插入word, 但是.eps或者 .p…

期末成绩发布方式

期末考试结束后,成绩单的发放总是让老师们头疼不已。想象一下,每个学生的成绩都需要老师一个个私信给家长,不仅耗时耗力,而且极易出错。 在传统的成绩单发放方式中,老师往往需要通过电子邮件、短信或者微信等方式&…

使用Keil将STM32部分程序放在RAM中运行

手动分配RAM区域,新建.sct文件,定义RAM_CODE区域,并指定其正确的起始地址和大小。 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************…

高考志愿填报千万要注意这四点

在高考志愿填报过程中,确实有很多需要留心的点。我为你总结了四个关键点,希望能帮助你顺利完成志愿填报: 1、学校提供的支持 学校作为学生志愿填报咨询服务的主阵地,应提供体系化和制度化的支持。包括及时关注并传达政策动向和相…

ubuntu下运行程序时提示缺库问题的有效解决方法

目录 一、问题现象二、解决方式三、总结 一、问题现象 当我们平时在ubuntu上运行一个程序时时长会遇到如下情况,含义为本机缺少执行程序需要的库 这时候我们可能会根据缺少的库使用apt install 库名的模糊名字 进行安装,然后再去运行,此时可…

vue3+antd 实现文件夹目录右键菜单功能

原本的目录结构&#xff1a; 右键菜单&#xff1a; 点击菜单以后会触发回调&#xff1a; 完整的前端代码&#xff1a; <template><a-directory-treev-model:expandedKeys"expandedKeys"v-model:selectedKeys"selectedKeys"multipleshow-li…

C语言下结构体、共用体、枚举类型的讲解

主要内容 结构体结构体数组结构体指针包含结构体的结构链表链表相关操作共用体枚举类型 结构体 结构体的类型的概念 结构体实现步骤 结构体变量的声明 struct struct 结构体名{ 数据类型 成员名1; 数据类型 成员名2; ..…

【Unity】unity学习扫盲知识点

1、建议检查下SystemInfo的引用。这个是什么 Unity的SystemInfo类提供了一种获取关于当前硬件和操作系统的信息的方法。这包括设备类型&#xff0c;操作系统&#xff0c;处理器&#xff0c;内存&#xff0c;显卡&#xff0c;支持的Unity特性等。使用SystemInfo类非常简单。它的…

1999-2022年企业持续绿色创新水平数据

企业持续绿色创新水平数据为研究者提供了评估企业在绿色技术领域创新持续性和能力的重要视角。以下是对企业持续绿色创新水平数据的介绍&#xff1a; 数据简介 定义&#xff1a;企业持续绿色创新水平反映了企业在一定时期内绿色专利申请的持续性和创新能力。计算方法&#xf…

【Linux】进程的概念 + 查看进程

前言&#xff1a; 在前面我们学习了Liunx的基本指令和权限相关知识&#xff0c;还有基本工具的使用&#xff0c;有了以上的基础知识我们本章将正式接触Linux操作系统。 目录 1.冯诺依曼体系结构1.1 内存存在的意义1.2 程序加载到内存的含义1.3 程序的预加载&#xff1a; 2 .认识…

英国“王曼爱华”指的是哪几所高校?中英双语介绍

中文版 英国“王曼爱华”指的是伦敦大学国王学院、曼彻斯特大学、爱丁堡大学和华威大学这四所院校。以下是对伦敦大学国王学院、曼彻斯特大学、爱丁堡大学和华威大学这四所英国顶尖大学的详细介绍&#xff0c;包括它们的建校历史、专业优势、优秀校友和地理位置。 伦敦大学国…

图像增强 目标检测 仿射变换 图像处理 扭曲图像

1.背景 在目标检测中&#xff0c;需要进行图像增强。这里的代码模拟了旋转、扭曲图像的功能&#xff0c;并且在扭曲的时候&#xff0c;能够同时把标注的结果也进行扭曲。 这里忽略了读取xml的过程&#xff0c;假设图像IMG存在对应的标注框&#xff0c;且坐标为左上、右下两个…

前后端的学习框架

前后端的学习框架 视频链接&#xff1a;零基础AI全栈开发系列教程&#xff08;一&#xff09;_哔哩哔哩_bilibili

C++第一弹 -- C++基础语法上(命名空间 输入输出 缺省参数 函数重载 引用)

目录 前言一. C关键字(C98)二. 命名空间1.命名空间的定义2.命名空间的使用3.其它部分 三. C输入&输出四. 缺省参数1. 缺省参数的概念2.缺省参数的分类 五. 函数重载1.函数重载的概念2. 为什么C支持函数重载, 而C语言不支持重载呢? 六. 引用1.引用的概念2.引用的特性3.常引…

汽车报价资讯app小程序模板源码

蓝色实用的汽车报价&#xff0c;汽车新闻资讯&#xff0c;最新上市汽车资讯类小程序前端模板。包含&#xff1a;选车、资讯列表、榜单、我的主页、报价详情、资讯详情、询底价、登录、注册、车贷&#xff0c;油耗、意见反馈、关于我们等等。这是一款非常全的汽车报价小程序模板…