经常使用误区之将 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 不是一丁点也不允许多表关联,只是允许的力度有限,允许的方式外围有如下几种: