news 2026/4/15 10:19:08

记录一次伟大的实践--上亿数据快速模糊匹配方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
记录一次伟大的实践--上亿数据快速模糊匹配方案

问题:

一千二百万条url ,还有1亿1千万的关键词,关键词一定出现在某条url的名字里,但是关键词不完全和名字相等,并且可能一个关键词同时出现在多个url中,所有和关键词匹配的url都要列出来

背景:

最开始没有想到会处理这么多数据,果断采用以下最省力的方案,半小时测试数据顺利通过,果断收钱完工,客户拿到脚本跑一下午都没出结果,来售后了,一顿排查,脚本没问题,再问数据,谁成想有上亿的数据要处理!!!
欧麦嘎的,要了老命了,方案1运行完估计要将近36小时,收人家票子了,没办法,改吧……然后就有了灵关一现的方案2
没有任何经验可谈,纯纯被逼出来的想法
不得不说Gemini 是真好用,ql_query就是它给我改出来的(顺便夹带点私货:我这有Gemini成品号,绑定教育机构的,50大洋一个,售后30天,前几天的大规模封号事件,我们这一个都没封,售后期内封号包换(不限制次数)

方案1

第一反映,直接把url 拆成map, key=url的name value=url ,然后遍历 关键词,遍历map,关键词在key里就记录value

解析1

小批量数据能用,但是太慢了,每条关键词都要扫描一遍map,太TMD蠢了,而且对内存占用极大 ,多线程OOM

方案2

把url 拆开 name 和url ,导入mysql 中,并且把name字段建立全文索引

CREATETABLEIFNOTEXISTSall_urls(idINTNOTNULLAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(255)NOTNULL,urlTEXTNOTNULL,FULLTEXTINDEXidx_name_ft(name)-- 在这里直接定义全文索引)ENGINE=InnoDB;

查询语句

# 重要的是这里不要使用 select url from all_urls where name like '%%' ,这种会导致全文索引直接失效了,效率及其低ql_query=""" SELECT url FROM all_urls WHERE MATCH(name) AGAINST(:search_term IN BOOLEAN MODE) """# source_name 就是要查询的关键字search_term=f'"{source_name}"'params={'search_term':search_term}# with db_pool.get_session() as session: 这使用sqlalchemy实现的,自己写就的了withdb_pool.get_session()assession:res=session.execute(text(sql_query),params)

解析2

使用此方案处理时间从方案1 的5个线程运行天级别,降低到了单线程运行分钟级别

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 7:10:39

3、大规模基础设施管理指南

大规模基础设施管理指南 1. 开源软件许可 开源软件许可对组织使用软件有重要影响,例如GNU Affero通用公共许可证(AGPL)。若修改了采用AGPL许可的开源软件,必须将修改后的软件提供给所有网络用户。这意味着,如果公司有专有软件,同时使用了AGPL许可的开源软件,专有软件可…

作者头像 李华
网站建设 2026/4/7 15:10:14

9、KVM虚拟化与数据库管理全解析

KVM虚拟化与数据库管理全解析 1 KVM虚拟化存储与镜像选择 1.1 共享存储选项 若需要共享存储带来的灵活性,可考虑以下几种共享存储类型: - NFS :适合使用专用NFS服务器或NFS设备。在企业网络中,NFS设备用于VM共享存储更为普遍。例如NetApp这类NFS设备,相比运行NFS的L…

作者头像 李华
网站建设 2026/4/13 10:38:15

27、网络性能分析:Freenet与Gnutella的对比研究

网络性能分析:Freenet与Gnutella的对比研究 1. 网络基础特性 互联网被报道是一个小世界网络,特征路径长度为19。也就是说,从任意一个网页出发,平均只需点击19次就能访问到现存近8亿个可访问网页中的任意一个。不过,这样的路径需要一个智能代理来准确判断接下来该点击哪个…

作者头像 李华
网站建设 2026/4/15 7:05:11

34、应对网络洪水与DoS攻击的常见方法及微支付方案解析

应对网络洪水与DoS攻击的常见方法及微支付方案解析 在网络世界中,资源分配问题和拒绝服务(DoS)攻击一直是令人头疼的难题。这些问题以各种形式长期存在,下面我们来探讨一些常见的应对策略。 1. 缓存与镜像 维护数据可用性最简单的方法之一就是镜像数据。不再将数据仅存储…

作者头像 李华
网站建设 2026/4/4 13:14:37

35、数字支付与资源管理的前沿探索

数字支付与资源管理的前沿探索 在当今数字化的时代,密码学难题、支付方案以及资源管理等问题成为了保障系统安全和高效运行的关键因素。下面将深入探讨时间锁谜题、各类支付方案以及它们在资源管理中的应用。 时间锁谜题 时间锁谜题,如 LCS35 时间胶囊,是由 Ron Rivest、…

作者头像 李华