在数据库中跑全文检索、模糊查询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等高级模块。

相关文章
|
6天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
6天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
7天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
17天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
15 2
|
22天前
|
SQL JSON Java
没有数据库也能用 SQL
SPL(Structured Process Language)是一款开源软件,允许用户直接对CSV、XLS等文件进行SQL查询,无需将数据导入数据库。它提供了标准的JDBC驱动,支持复杂的SQL操作,如JOIN、子查询和WITH语句,还能处理非标准格式的文件和JSON数据。SPL不仅简化了数据查询,还提供了强大的计算能力和友好的IDE,适用于多种数据源的混合计算。
|
24天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
1月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
45 0
|
1月前
|
SQL 存储 监控
串口调试助手连接SQL数据库的技巧与方法
串口调试助手是电子工程师和软件开发人员常用的工具,它能够帮助用户进行串口通信的调试和数据分析
|
1月前
|
SQL 存储 数据采集
如何把问卷录入SQL数据库
将问卷数据录入SQL数据库是一个涉及数据收集、处理和存储的过程
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")