在数据库中跑全文检索、模糊查询SQL会不会被开除

简介: 希望通过本次课题,与大家探讨在数据库中跑全文检索、模糊查询SQL会不会被开除、分析解决方案并学会保护自己和公司业务。

分享人:Digoal,阿里云数据库产品经理

正文:

本篇内容将从6个部分为读者介绍在数据库中跑全文检索、模糊查询SQL会不会被开除,应该采用什么方案才能解决问题,并且从中学会如何保护自己和公司业务。

Ÿ 为什么要讨论这个问题?到底会不会被开除?

Ÿ 问题在哪?原因是什么?怎么办?

Ÿ 搜来的方案靠谱吗?

Ÿ 什么才是经过思考的牛逼方案?牛逼的方案就没漏洞吗?

Ÿ 更牛逼的方案是什么?

Ÿ 如何学会保护自己和公司业务?

 

一、为什么要讨论这个问题?到底会不会被开除?

在数据库中跑全文检索、模糊查询SQL会不会被开除这个话题非常值得探讨,因为这关系到我们的个人职业发展。那这么干到底会不会被开除呢?我们先来看几份数据:100万条记录(1.1GB) — 300毫秒;1000万条记录(11GB)3500毫秒;1亿条记录(110GB)85秒;32 Core 的数据库, 32个并发足以引起数据库雪崩。一旦引起数据雪崩势必会造成业务上的损失,那被开除的几率就相当大了。


二、问题在哪?原因是什么?怎么办?

问题出在没有创建索引。原因是DBA不创建索引吗?但是DBA表示没有哪个数据库的索引支持模糊查询。那这时候该怎么办呢?第一个方法就是多创建几个只读实例, 顶多把只读实例搞崩溃;第二就是砍需求、定数据库规范.,不允许在数据库中执行模糊查询、全文检索;第三是DBA增加创建索引这方面的需求。


三、搜来的方案靠谱吗?

当我们自己处理不了的时候会在网上寻求解决方案,搜索到方案一般是“需要搜索的数据, 一份写入关系数据库, 再同步一份同步到搜索引擎”。这个方案很容易搜索出来,也是比较流行的一种解决方案。但是这个方案靠谱吗?答案显然是不靠谱的,其中有几个痛点:同步延迟,数据写入后无法实时被搜索到.;跨产品同步引入的一致性问题,每天刷一遍全量再继续增量同步。一致性与查询时延要求高的场景用这个方案显然不行。


四、什么才是经过思考的牛逼方案?牛逼的方案就没漏洞吗?

我们需要思考一个相对完美的解决方案,首先肯定是要解决延迟问题与一致性问题。

如果要设计一款数据库索引来支持全文检索、模糊查询甚至正则表达式应该如何设计什么指标是重要的索引构建的实时性查询的实时性查询性能内容写入、变更性能可以按相似度排序返回全文检索分词正确性 (全文检索不讨论PG已经内置安装各国语言插件可以实现索引加速同时支持扩展字典)全文检索字典可自定义

向大家隆重推出这个数据库PG,它有倒排索引接口GIN,能够跟搜索引擎一样支持多值类型的多数索引的构建。以及pg_trgm模块,有了这样的模块之后,我们就能够在数据库去支持上述说的需求。那么我们简单看一下它的原理:

图片.png 

为了支持模糊查询,利用了pg_trgm模块。对于要查的这个词前面加两个空格,后面加一个空格,然后把它切成三个连续的小token,然后用这个小的token再到这个树里面去搜索来去匹配需要的记录。

图片.png 

图片.png 

那么这种方案也会出现以下几个问题的。

1.pg_trgm采用3-grams切分粒度1个或2个字的模糊查询性能很差

2.当匹配结果非常非常多时 即时LIMIT返回依旧有较大启动成本. bitmap scan造成

3.在开启fastupdate的情况下 优先将数据写入pending list, autovacuum异步合并到gin树 查询时需要查询pengding list以及gin索引树会导致搜索性能降低特别是在大量数据高并发写入后全文检索、模糊查询的性能都会下降pending list合并到gin树后性能恢复

4.lc_ctyp=C时无法切分wchar例如中文模糊查询千万要注意


五、更牛逼的方案是什么?

与pg_trgm相比,更厉害的是MyBase PG pg_bigm,利用它就能解决上述问题。详见下面的表格,仔细比较了pg_bigm与pg_trgm。

 

pg_bigm 采用2-grams粒度切词, 从功能上讲, 比pg_trgm优势明显,支持高性能1或2个字的模糊和相似搜索。同时增加了非严谨查询的开关,在某些特定场合或者用户为性能可以妥协一定精准度时, 好处多多。同时对wchar友好, 任何lc_ctype的数据库都能支持wchar切词, pg_trgm则需要修改头文件或者使用lc_cypte<>C的数据库来支持wchar的切词以及wchar的模糊查询 , 相似查询。

图片.png 

六、如何学会保护自己和公司业务?

1、防止雪崩— 前端保护, 避免重复请求:防止在后端响应慢时,前端用户不断点击, 导致雪崩;

2、防止雪崩—降级、疏导:设置语句超时, 避免慢SQL击破数据库资源;

3、规范:规范相关的行为准则;

4、有强大的后盾:阿里云AliPG, 全兼容PostgreSQL,,2015年投入商用是数万用户的坚强后盾。不仅仅是PG内核代码, 还有插件代码,MyBase PG已集成pg_trgm, pg_bigm等高级模块。

相关文章
|
2天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
34 6
|
1月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
73 11
|
1月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
1月前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
2月前
|
SQL 关系型数据库 MySQL
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
218 13
|
2月前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
2月前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
2月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
2天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
25 0
|
29天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
59 3