一说到Elasticsearch很多人的印象就是“搜索引擎”,但是它实际的作用不仅仅搜索引擎,还有很多其他应用场景,本文就总结它的常见的使用场景和不适合的使用场景,来宏观综合了解ElasticSearch如何正确使用
一、常用的场景 1.1 搜索服务 1.1.1 典型场景-
仪表盘搜索
-
电子商务
-
手机应用搜索
-
地理位置搜索
-
高性能:高并发、低延迟的搜索体验
-
强相关:自定义打分、排序机制
-
高可用:机房、机架感知,异地容灾
腾讯健康码、腾讯文档全文检索、携程、拼多多、蘑菇街、滴滴、今日头条、贝壳找房…….
1.2 日志实时分析 1.2.1 典型场景-
业务日志:用户行为日志、应用日志
-
状态日志:慢查询、异常探测
-
系统日志:debug、info、warn、error、fatal
-
实时性:从日志产生到可访问,秒级
-
全文搜索:基于倒排索引,支持灵活的搜索分析
-
交互式分析:万亿级日志,搜索秒级响应
日志易等
1.3 商业智能BI 1.3.1 典型场景电子商务、移动应用、广告媒体等业务都需要借助数据分析和数据挖掘来辅助商业决策,而规模庞大的业务数据对数据的统计分析造成了很大的挑战。
1.3.2 主要特性-
ES 拥有结构化查询的能力,支持复杂的过滤和聚合统计功能。
-
帮助客户对海量数据进行高效地个性化统计分析、发现问题与机会、辅助商业决策,让数据产生真正的价值。
睿思BI 等。
二、不适合用的场景 2.1 不支持事务
不支持:ACID(在写入或更新数据的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability))。
如果要有强一致场景,如:银行业务,还得采购 Oracle 等大型商业数据库。
据我不完整了解:银行使用 Elasticsearch 一般和系统日志统一规范、存储和检索、自动化运维相关,而非存储核心金融交易数据。
2.2 多表关联有限因为习惯了:Mysql 多表通过外键关联检索,不免会将 Mysql 思维平移到 Elasticsearch。
常见的实战多表关联问题如下:“ 一般大in的场景有好的解决方案么?
-
比如:连锁 一个人管理了1000家门店 要去查自己管辖的商品。
-
比如:企微 一个人维护了 1000个员工 要去查自己管辖的员工。”
Elasticsearch 多表关联的解决方案一般概括如下:
-
宽表:适合增加冗余存储、空间换时间场景。
-
nested 类型:适合子文档偶尔更新、查询频繁场景。
-
Join 父子文档类型:适合子文档频繁更新频繁场景。
正如官方文档所说:
“In particular, joins should be avoided. nested can make queries several times slower and parent-child relations can make queries hundreds of times slower. ”
官方在数据建模部分强调:“应该避免关联。嵌套可以使查询速度慢几倍,父子关系可以使查询速度慢数百倍。因此,若能使用宽表,可以明显加速。”
2.3 不支持准实时refresh_interval 刷新频率决定近实时而非准实时。
ES 是一个实时的分布式搜索分析引擎,目前很多用户对 ES 的印象还是准实时,实际上在6.8版本之后官方文档已经将 near real-time 改为了 real-time。
我们直接看一下6.8版本——7.6版本官方文档的说法:
"Elasticsearch provides real-time search and analytics for all types of data."
ES 在写入完毕刷新之前,是可以通过 getById 的方式实时获取文档的,只是在刷新之前 FST 还没有构建,还不能提供搜索的能力。
但是,7.7版本——7.13版本(截止:2021-06-17最新版本)又改成:“Elasticsearch provides near real-time search and analytics for all types of data. ”
再一次改回原来的说法,说明:官方文档严谨性拿捏的很到位!
近实时而非准实时说法没毛病。
2.4 高阶功能收费比如:机器学习、Kerberos 安全认证、JDBC 客户端、ODBC客户端、Graph 探索、威胁猎捕等高阶功能。
这是主流开源上市公司的收费模式,MongoDB、Confluent、Elastic 皆是如此。
参考资料:微信公众号(铭毅天井下ElasticSearch)-《Elasticsearch架构选型指南——不止是搜索引擎,还有......》



