20250214 随笔 Elasticsearch(ES)索引数据 vs. 业务数据库冗余双写 ...

忿忿的泥巴坨  金牌会员 | 2025-2-15 21:44:16 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 959|帖子 959|积分 2877

Elasticsearch(ES)索引数据 vs. 业务数据库冗余双写的区别、优缺点分析
在高并发数据查询场景下,Elasticsearch(ES)业务数据库冗余双写 都是常见的数据同步方案。它们主要区别在于数据存储方式、查询性能、数据同等性和运维复杂度

1. ES 与 冗余双写的核心区别

对比点Elasticsearch(ES)索引方案业务数据库冗余双写核心理念数据存入数据库,同时索引到 ES,用于高性能搜索在数据库表之间冗余存储相同数据,淘汰查询 JOIN 依赖存储方式数据库(恒久化)+ ES(搜索引擎)数据库表内部冗余存储查询性能实用于复杂查询、模糊匹配、全文检索,速度快实用于结构化数据查询、关系型查询数据同等性最终同等性(大概会有延迟)事务保证强同等性实用场景搜索、日志分析、推荐系统、全文检索业务数据表制止 JOIN,提升查询性能
2. 方案一:利用 Elasticsearch(ES)索引数据

✅ 上风


  • 高效搜索

    • ES 采用倒排索引,擅长 模糊查询、全文检索、复杂过滤、聚合分析
    • 比数据库 LIKE 查询快很多(数据库 LIKE %xxx% 查询效率低)。

  • 查询速度快,支持大规模数据量

    • 适合海量数据查询,大数据场景(日志系统、推荐系统等)。
    • 支持高并发查询,而数据库查询在高并发下压力大。

  • 支持复杂查询

    • 实用于 全文检索、模糊查询、聚合计算,而数据库不擅长这些利用。

❌ 缺点


  • 数据同等性题目(最终同等性)

    • 数据库和 ES 大概差别步,由于数据存入数据库后必要同步到 ES,大概会有延迟数据丢失(同步失败)。
    • 写入不保证事务同等性,大概导致查询结果和数据库数据差别等。

  • 运维成本高

    • ES 必要额外的服务器资源,包括 CPU、内存、磁盘(ES 必要 SSD 磁盘)。
    • 必要维护索引结构,数据量大时大概必要索引优化

  • ES 必要定期重修索引

    • 如果数据变化频繁,ES 索引会碎片化,必要重新索引优化查询效率。


3. 方案二:业务数据库冗余双写

✅ 上风


  • 事务同等性

    • 数据库保证强同等性,冗余数据和原数据同步写入,不会有数据差别步题目。

  • 无额外系统依赖

    • 不必要额外的搜索引擎(如 ES),数据库内完成查询。
    • 运维简单,不必要维护 ES。

  • 查询优化

    • 制止跨表 JOIN 查询,进步数据库查询性能。比方:

      • 订单表 (orders) 大概冗余存储用户昵称 (user_name),制止关联 users 表查询。


❌ 缺点


  • 数据冗余,占用存储

    • 同一份数据大概存入多个表,增加存储开销
    • 必要定期整理、更新冗余字段,否则大概带来数据同步压力。

  • 数据库写入性能下降

    • 双写增加了写入压力,每次更新数据时,必要更新多个表
    • 如果更新涉及多个冗余字段,会导致 UPDATE 利用增多,影响性能。

  • 不支持复杂查询(如全文检索)

    • 不适合模糊搜索、全文检索、复杂过滤,这些场景ES 更擅长


4. 利用 ES 还是 冗余双写?怎样选择?

场景推荐方案原因模糊查询、全文检索ESES 支持倒排索引,查询速度快,LIKE 查询在数据库中效率低高并发查询ESES 支持分布式查询,适合大数据查询数据库 JOIN 查询性能低冗余双写制止跨表 JOIN,淘汰查询压力实时性要求高,数据不能差别步冗余双写数据强同等性日志分析、推荐系统、报表ES适合大规模数据计算数据库运维成本低,制止额外服务冗余双写只需数据库,不必要额外搜索引擎
5. 混淆方案(ES + 冗余双写)

回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表