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

相关文章
|
7月前
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
6月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1129 152
|
6月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
866 156
|
6月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
602 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
5月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
329 6
|
6月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
6月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
438 8
|
7月前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
920 8
|
7月前
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
362 5
|
8月前
|
SQL 缓存 监控
SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。