更多运维进阶知识请看:
https://edu.51cto.com/course/30254.html
https://edu.51cto.com/course/31241.html
1、需求说明
背景
线索模块作为我们的核心服务模块(crm-service),经常饱受慢查询的困扰,用户体验不好,急需优化。
导致慢查询的原因
- 业务复杂,查询条件多种多样
- 数据量大,customer_extension数据量为47809164(6.28号查询)
- 关联查询多,实际业务中除了customer_extension主表的数据外,还需要查询customer_extension_extra,follow_status,flow_partner_relation,lock_customer,customer_extension_common等从表信息
实际通过sql优化效果有限,所以考虑引进搜索引擎来解决问题
2、为什么不用分库分表?
- 查询条件多种多样 索引不能兼顾到所有场景 模糊查询场景多 关联查询多
- 只能根据companyId进行分库分表 各个企业数据体量不一致 会有数据倾斜
3、技术选型
1)Elasticsearch是什么
Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。
2)Elasticsearch的功能
- 分布式的搜索引擎
分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索
搜索:百度、谷歌,站内搜索 - 全文检索
提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能 - 数据分析引擎(分组聚合)