Elasticsearch 是一个强大的工具,尤其在全文检索、实时分析、机器学习、地理数据应用、日志和事件数据分析、安全信息和事件管理等场景有大量的应用。
然而,Elastic Stack 技术栈的选型及应用效能取决于正确的使用方式。选型错误或者误用 Elasticsearch 可能会导致扩展性问题、性能问题(如为解决一个问题使用非常复杂的脚本导致性能极差)等,从而使整体体验感变差。所以,本文区别于之前的正向讲解的方式,更多的讲解反例或者负面应用案例。“以史为鉴”,以便于大家更好地使用 Elasticsearch。
本系列文章会有 10 几篇左右,一篇一个知识点讲解 Elasticsearch 使用误区解读,敬请期待!
误区1:将 Elasticsearch 视为关系数据库
Elasticsearch 常被误解为 MySQL 或者 PostgreSQL 等关系数据库的直接替代品,用户除了直接替代使用外更看其全文搜索和快速聚合的能力。
然而,咱们必须清晰的认知:Elasticsearch 设计初衷不是处理复杂事务和关系数据模型的。
我们从下面几个维度逐一展开讨论:
个人建议先了解 Elasticsearch 的适用场景以及不适用场景,这样能清楚 Elastic Stack 技术栈更适合哪些业务需求。
例如,咱们文章之前图解的六大应用场景是非常适合的。然而,对于需要处理复杂事务、多表联查操作和高一致性要求的应用,如银行系统的交易处理和ERP系统等,Elasticsearch 则不太适合。
图片
Elasticsearch 更适用场景:
图片
图片
通过对比这些场景,反观自己的业务需求,就能判断是否应该选型 Elasticsearch 甚至 Elastic Stack 作为技术栈。
图片来自官方博客
Elasticsearch 是一种面向文档的搜索引擎,专为快速搜索大量数据而设计。
Elasticsearch 基于 Apache Lucene 构建,提供了强大的全文搜索、分析和数据聚合功能。
以下是 Elasticsearch 的主要特点:
图片来自官方博客
如前所述,Elasticsearch 并不是设计用来处理关系数据和事务的。它的主要优势在于分析和搜索能力,而不是数据关系的严格维护。
关系数据库(如 MySQL、Oracle 及 PostgreSQL 等)和 Elasticsearch 之间有几个关键区别:
特性 | 关系数据库 | Elasticsearch |
数据存储结构 | 结构化的表和行 | 文档 |
数据类型 | 每个表的字段类型固定 | 每个文档可以包含不同的字段和数据类型 |
数据一致性 | 通过外键和约束来维护数据的一致性 | 不提供数据一致性保障 |
查询能力 | 支持复杂的 SQL 查询、事务和联接操作 | 主要用于全文搜索和数据聚合 |
事务支持 | 完整的事务支持 | 不支持事务 |
性能优化 | 索引、缓存和查询优化 | 分片、索引和缓存 |
主要优势 | 关系数据处理和数据一致性维护 | 快速搜索和高效的数据聚合 |
在关系数据库中,我们可以使用复杂的 SQL 查询、事务和多表关联操作来保证数据的一致性和完整性。例如:
BEGIN TRANSACTION;-- 更新订单状态UPDATE ordersSET status = 'shipped'WHERE order_id = 123;-- 减少库存UPDATE productsSET stock = stock - 1WHERE product_id = 456;-- 记录客户活动INSERT INTO customer_activity (customer_id, activity)VALUES (789, 'Order 123 shipped');COMMIT;
图片
上述事务示例能确保所有相关操作(更新订单状态、减少库存和记录客户活动)要么全部成功,要么全部失败,从而保证数据的一致性(事务的本质)。
在 Elasticsearch 中,我们主要侧重于全文搜索和数据聚合分析,而不支持复杂的事务和多表关联操作。
比如:用户需求如下:
“想请教下大佬们,假设 es 中 有两个表,一个会员表,一个订单表,如果想关联查询,例如查询24年注册的所有的会员的订单总数,通过什么方式能快速查询?”
咱们文章做过剖析,Elasticsearch 不是一丁点也不支持多表关联,只是支持的力度有限,支持的形式核心有如下几种:
本文链接:http://www.28at.com/showinfo-26-96746-0.htmlElasticsearch 使用误区之将 Elasticsearch 视为关系数据库!
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: 关于时间知识图谱问答的一篇综述