1. 首页 > 科技 > 数码资讯

使用误区之将 Elasticsearch 视为关系数据库! Elasticsearch

Elasticsearch 是一个强大的工具,尤其在全文检索、实时分析、机器学习、地理数据应用、日志和事件数据分析、安全信息和事件管理等场景有大量的应用。

然而,Elastic Stack 技术栈的选型及应用效能取决于正确的使用方式。选型错误或者误用 Elasticsearch 可能会导致扩展性问题、性能问题(如为解决一个问题使用非常复杂的脚本导致性能极差)等,从而使整体体验感变差。所以,本文区别于之前的正向讲解的方式,更多的讲解反例或者负面应用案例。“以史为鉴”,以便于大家更好地使用 Elasticsearch。

本系列文章会有 10 几篇左右,一篇一个知识点讲解 Elasticsearch 使用误区解读,敬请期待!

误区1:将 Elasticsearch 视为关系数据库

Elasticsearch 常被误解为 MySQL 或者 PostgreSQL 等关系数据库的直接替代品,用户除了直接替代使用外更看其全文搜索和快速聚合的能力。

然而,咱们必须清晰的认知:Elasticsearch 设计初衷不是处理复杂事务和关系数据模型的。

我们从下面几个维度逐一展开讨论:

1、该不该选型 Elasticsearch ?

个人建议先了解 Elasticsearch 的适用场景以及不适用场景,这样能清楚 Elastic Stack 技术栈更适合哪些业务需求。

例如,咱们文章之前图解的六大应用场景是非常适合的。然而,对于需要处理复杂事务、多表联查操作和高一致性要求的应用,如银行系统的交易处理和ERP系统等,Elasticsearch 则不太适合。

Elasticsearch 更适用场景:

通过对比这些场景,反观自己的业务需求,就能判断是否应该选型 Elasticsearch 甚至 Elastic Stack 作为技术栈。

2、理解 Elasticsearch 的设计

Elasticsearch 是一种面向文档的搜索引擎,专为快速搜索大量数据而设计。

Elasticsearch 基于Apache Lucene构建,提供了强大的全文搜索、分析和数据聚合功能。

以下是 Elasticsearch 的主要特点:

如前所述,Elasticsearch 并不是设计用来处理关系数据和事务的。它的主要优势在于分析和搜索能力,而不是数据关系的严格维护。

3、理解 Elasticsearch 与关系数据库的比较

关系数据库(如 MySQL、Oracle 及 PostgreSQL 等)和 Elasticsearch 之间有几个关键区别:

3.1 数据模型比较

特性

关系数据库

Elasticsearch

数据存储结构

结构化的表和行

文档

数据类型

每个表的字段类型固定

每个文档可以包含不同的字段和数据类型

数据一致性

通过外键和约束来维护数据的一致性

不提供数据一致性保障

查询能力

支持复杂的 SQL 查询、事务和联接操作

主要用于全文搜索和数据聚合

事务支持

完整的事务支持

不支持事务

性能优化

索引、缓存和查询优化

分片、索引和缓存

主要优势

关系数据处理和数据一致性维护

快速搜索和高效的数据聚合

3.2 查询能力比较

在关系数据库中,我们可以使用复杂的 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 不是一丁点也不支持多表关联,只是支持的力度有限,支持的形式核心有如下几种:

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://jmbhsh.com/shumazixun/34160.html

联系我们

QQ号:***

微信号:***

工作日:9:30-18:30,节假日休息