前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Elasticsearch 基本概念和应用场景举例

Elasticsearch 基本概念和应用场景举例

原创
作者头像
_春华秋实
修改2025-01-24 17:05:31
修改2025-01-24 17:05:31
550
举报
文章被收录于专栏:_春华秋实_春华秋实

Elasticsearch 是一个基于Lucene的近实时分布式的搜索与分析引擎

  • 基于 RESTful API的分布式服务
  • 可以快速地、近实时地存储、查询和分析超大数据集,通常被用来作为构建复杂查询特性和需求强大应用的基础引擎或技术。

基本概念

节点(node)

一个节点是集群中的一个服务器,用来存储数据并参与集群的索引和搜索数据节点:存储索引数据的节点,主要对文档进行增删改查、聚合等操作。

集群(cluster)

一个Elasticsearch集群由一个或多个Elasticsearch节点组成,所有节点共同存储数据

索引(index)

一些相似特征的文档的集合,类似于一个箱子用于存放不同类型的书推荐使用多个索引保存不同类型的数据当有多种不同类型的数据需要查询时,推荐使用不同的索引来区分不同的文档类型不同的索引可以独立优化,提高性能和资源利用率可以为不同的索引设置不同的访问权限,提高安全性管理多个索引可能会增加一些复杂性,但可以通过自动化工具和脚本来简化管理。

类型(type)

索引的一个分类或者分区,ES7.0 已抛弃这个字段

文档(document)

可以被索引的基本信息单元,相当于关系型数据库中的一行数据

字段(field)

组成文档的最小单位,相当于关系型数据库中的一列数据

映射(mapping)

定义一个文档以及其所包含的字段如何被存储和索引,相当于关系型数据库中的 SchemaElasticsearch 的字段映射(Mapping)是 强类型 的,这意味着每个字段在索引中都有一个明确的类型,并且一旦字段类型被定义,通常不能随意更改。这种强类型特性对数据存储和查询性能有重要影响。

分片(shards)

把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索

副本(replicas)

写操作会先在主分片上完成,然后分发到副本分片上。主分片和副本分片都可以对外提供查询服务,所以副本能够提升系统的高可用性和搜索时的并发性能。但如果副本太多,也会增加写操作时数据同步的负担。

gateway

Elasticsearch 索引快照的存储方式,gateway 对索引快照进行存储,支持多种类型的gateway,有本地文件系统(默认)、分布式文件系统、Hadoop的HDFS和阿里云的OSS云存储服务。

MySQL 和 ES 对比

通过下面表格和详细解释,你可以清楚地看到 Elasticsearch 和 MySQL 在不同方面的差异。选择合适的数据库系统取决于具体的应用需求和数据处理要求。

总结:Elasticsearch 适合需要近实时搜索和复杂数据分析的应用,而 MySQL 适合需要强一致性和事务处理的应用

特性

Elasticsearch (ES)

MySQL

数据模型

文档存储(JSON 格式)

关系型数据存储(表格结构)

数据类型

动态类型(自动映射)

静态类型(需要预定义)

索引类型

倒排索引(全文搜索)

B-Tree 索引(结构化数据)

查询语言

JSON 格式的查询 DSL(Domain Specific Language)

SQL 查询语言

数据实时性

近实时性(默认每秒刷新一次)

实时性(数据写入后立即可用)

刷新间隔

可调整(默认 1 秒)

无刷新间隔,立即可用

分布式架构

天然支持分布式存储和查询

需要手动配置主从复制和分片

事务支持

不支持复杂的 ACID 事务

支持复杂的 ACID 事务

全文搜索

强大的全文搜索和相关性评分

基本的全文搜索功能(需要 FULLTEXT 索引)

聚合功能

支持复杂的聚合操作(如统计、分组、排序等)

支持基本的聚合函数(如 SUM, AVG, COUNT, GROUP BY)

多字段和嵌套字段

支持多字段和嵌套的 JSON 结构

支持多字段,嵌套字段需要使用 JSON 类型(MySQL 5.7+)

地理位置查询

内置地理空间数据类型(如 geo_point, geo_shape)

支持基本的地理空间数据类型和函数(MySQL 5.7+)

数据存储

JSON 文档存储,适合半结构化和非结构化数据

表格结构存储,适合结构化数据

数据扩展性

自动分片和副本,易于水平扩展

手动配置主从复制和分片,扩展性相对有限

缓存机制

请求缓存、过滤器缓存等

查询缓存、结果集缓存等

应用场景

日志分析、全文搜索、实时监控、复杂数据分析

电子商务、金融系统、内容管理、事务处理

数据一致性

最终一致性(近实时)

强一致性(实时)

数据大小

适合大规模数据处理

适合中等规模数据处理

查询复杂性

支持复杂的查询和聚合操作

支持基本的查询和聚合操作

索引优化

为 text 和 keyword字段建立倒排索引

使用 B-Tree 索引和覆盖索引

机器学习集成

内置机器学习功能,支持异常检测、预测分析等

需要与其他工具集成(如 Grafana、Tableau 等)

数据可视化

与 Kibana 等工具集成,支持强大的数据可视化

需要与其他工具集成(如 Grafana、Tableau 等)

应用场景举例链接

日均数十亿请求!京东评价系统海量数据存储高可用设计

  • 介绍了评论系统的存储架构细节
    • MySQL 做基本的数据存储(评论基础数据是按 userId 进行库表拆分的
    • solr/Elasticsearch 做数据检索(模糊查询、筛选等能力比 MySQL 好,也为了解决分表引起的数据分表查询的问题
      • 前台搜索集群根据商品编号进行索引数据分片,用于解决评论前台的评论数统计、评论列表筛选功能。
      • 评论列表,只需根据条件从搜索中查询出评论ID集合,再根据评论ID到 HBase 中查询出评论的其它字段信息,经过数据组装后便可返回前台进行展示。
    • MongoDB、HBase 做文本存储(因为占用数据比较大所以做了拆分)
  • 反思:架构师要做好方案设计、技术选择等,保证系统的高可用。
    • 对很多技术有兴趣,做好技术选择

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本概念
  • MySQL 和 ES 对比
  • 应用场景举例链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档