20250214 随笔 Elasticsearch(ES)索引数据 vs. 业务数据库冗余双写
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表查询。
- 订单表 (
- 避免跨表 JOIN 查询,提高数据库查询性能。例如:
❌ 缺点
-
数据冗余,占用存储
- 同一份数据可能存入多个表,增加存储开销。
- 需要定期清理、更新冗余字段,否则可能带来数据同步压力。
-
数据库写入性能下降
- 双写增加了写入压力,每次更新数据时,需要更新多个表。
- 如果更新涉及多个冗余字段,会导致 UPDATE 操作增多,影响性能。
-
不支持复杂查询(如全文检索)
- 不适合模糊搜索、全文检索、复杂过滤,这些场景ES 更擅长。
4. 使用 ES 还是 冗余双写?如何选择?
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 模糊查询、全文检索 | ✅ ES | ES 支持倒排索引,查询速度快,LIKE 查询在数据库中效率低 |
| 高并发查询 | ✅ ES | ES 支持分布式查询,适合大数据查询 |
| 数据库 JOIN 查询性能低 | ✅ 冗余双写 | 避免跨表 JOIN,减少查询压力 |
| 实时性要求高,数据不能不同步 | ✅ 冗余双写 | 数据强一致性 |
| 日志分析、推荐系统、报表 | ✅ ES | 适合大规模数据计算 |
| 数据库运维成本低,避免额外服务 | ✅ 冗余双写 | 只需数据库,不需要额外搜索引擎 |
5. 混合方案(ES + 冗余双写)
💡 实际业务中,我们通常会结合 ES 和数据库冗余双写,让两者互补!
- 查询使用 ES,加速搜索
- 业务查询走 ES,提高查询效率。
- 核心业务数据用数据库(保证事务)
- 订单、支付等核心数据仍存数据库,保持一致性。
- ES 和数据库保持同步
- 通过 Flink + Kafka 或 Binlog 监听,将数据库变更数据同步到 ES。
6. 结论
- ✅ Elasticsearch 适用于全文搜索、模糊查询、高并发读,但有数据同步问题。
- ✅ 业务数据库冗余双写适用于减少数据库 JOIN,提高事务一致性,但存储冗余、写入性能下降。
- ✅ 混合方案(ES + 数据库)适用于大多数企业应用,利用 ES 提升搜索性能,同时数据库保证事务一致性。
💡 如果你的业务涉及搜索优化,建议引入 ES;如果是高并发结构化数据查询,可以优先考虑数据库冗余双写! 🚀
相关文章:
20250214 随笔 Elasticsearch(ES)索引数据 vs. 业务数据库冗余双写
Elasticsearch(ES)索引数据 vs. 业务数据库冗余双写的区别、优缺点分析 在高并发数据查询场景下,Elasticsearch(ES) 和 业务数据库冗余双写 都是常见的数据同步方案。它们主要区别在于数据存储方式、查询性能、数据一…...
c# textbox 设置不获取光标
[DllImport("user32",EntryPoint "HideCaret")] private static extern bool HideCaret(IntPtr hWnd); //需引入命名空间using System.Runtime.InteropServices; private void Txt_RecInfo_MouseDown(object sender, MouseEventArgs e) { …...
中望CAD c#二次开发 ——VS环境配置
新建类库项目:下一步 下一步 下一步: 或直接: 改为: <Project Sdk"Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>NET48</TargetFramework> <LangVersion>pr…...
anolis os 8.9安装jenkins
一、系统版本 # cat /etc/anolis-release Anolis OS release 8.9 二、安装 # dnf install -y epel-release # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.…...
HtmlRAG:RAG系统中,HTML比纯文本效果更好
HtmlRAG 方法通过使用 HTML 而不是纯文本来增强 RAG 系统中的知识表示能力。通过 HTML 清洗和两步块树修剪方法,在保持关键信息的同时缩短了 HTML 文档的长度。这种方法优于现有基于纯文本的RAG的性能。 方法 其实主要看下围绕html提纯思路,将提纯后的…...
TypeScript 中的 reduce计算统计之和
1、计算字符串数组中最大的一项,比如数组:list ["家长会,柘城,喝士大夫","模压,手动阀,阿斯蒂"],求出list中字符串长度之和最大的那项: // 初始化变量来存储字数之和最多的项及其字数之和let maxWord ;let…...
HTTP/2 由来及特性
HTTP/2 的由来 HTTP/1.x 的局限性 性能瓶颈 队头阻塞问题:在HTTP/1.x中,一个TCP连接在同一时间只能处理一个请求,后续请求必须等待前面的请求处理完成并收到响应后才能被处理。例如,当一个页面有多个资源(如图片、脚…...
android 安装第三方apk自动赋予运行时权限
摘要:行业机使用场景点击运行时权限很麻烦,而随着android的演进,对于权限的管控越发严格。故本文通过对系统的修改实现第三方app在运行时直接获取全部权限。 通过属性ro.perms.force_grant控制功能开关。 Index: frameworks/base/services/…...
PyTorch Lightning LightningDataModule 介绍
LightningDataModule 是 PyTorch Lightning 提供的数据模块,用于统一管理数据加载流程(包括数据准备、预处理、拆分、批量加载等)。它的核心作用是将数据处理逻辑与模型解耦,提高代码的可复用性和可读性。 1. LightningDataModule 的作用 ✅ 封装数据预处理:数据下载、清…...
windows平台上 oracle简单操作手册
一 环境描述 Oracle 11g单机环境 二 基本操作 2.1 数据库的启动与停止 启动: C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期五 7月 31 12:19:51 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved. 连接到:…...
【网络安全 | 漏洞挖掘】价值3133美元的Google IDOR
未经许可,不得转载。 文章目录 正文正文 目标URL:REDACTED.google.com。 为了深入了解其功能,我查阅了 developer.google.com 上的相关文档,并开始进行测试。 在测试过程中,我发现了一个 XSS 漏洞,但它触发的域名是经过正确沙盒化的 *.googleusercontent.com,这符合 …...
LabVIEW太阳能制冷监控系统
在全球能源需求日益增长的背景下,太阳能作为一种无限再生能源,被广泛应用于各种能源系统中。本基于LabVIEW软件和STM32F105控制器的太阳能制冷监控系统的设计与实现,提供一个高效、经济的太阳能利用方案,以应对能源消耗的挑战。 项…...
10.2 Git 内部原理 - Git 对象
Git 对象 Git 是一个内容寻址文件系统,听起来很酷。但这是什么意思呢? 这意味着,Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向 Git 仓库中插入任意类型的内容,它会返回一个唯…...
作业。。。。。
顺序表按元素删除 参数:删除元素,顺序表 1.调用元素查找的函数 4.根据下表删除 delete_sub(list,sub); //删除元素 void delete_element(int element, Sqlist *list) …...
android 的抓包工具
charles 抓包工具 官网地址 nullCharles Web Debugging Proxy - Official Sitehttps://www.charlesproxy.com/使用手册一定记得看官网 SSL Certificates • Charles Web Debugging Proxy http请求: 1.启动代理: 2.设置设备端口 3.手机连接当前代理 …...
深入剖析推理模型:从DeepSeek R1看LLM推理能力构建与优化
著名 AI 研究者和博主 Sebastian Raschka 又更新博客了。原文地址:https://sebastianraschka.com/blog/2025/understanding-reasoning-llms.html。这一次,他将立足于 DeepSeek 技术报告,介绍用于构建推理模型的四种主要方法,也就是…...
linux中top命令详解
linux中top命令详解 top 是 Linux 中用于实时监控系统资源使用情况的命令,显示包括 CPU、内存、进程等信息的动态视图。以下是 top 命令的详细说明: 命令格式 top [选项] 常用选项 -d:设置刷新间隔时间(秒)。 -n&am…...
前端包管理器的发展以及Npm、Yarn和Pnpm对比
在现代前端开发中,包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展,开发者经历了从 npm 一统天下到 Yarn 挑战格局,再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器(npm/Yarn/pnpm)进行全方位…...
node.js+兰空图床实现随机图
之前博客一直用的公共的随机图API,虽然图片的质量都挺不错的,但是稳定性都比较一般,遂打算使用之前部署的兰空图床,自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作,有兴趣的话可…...
【MySQL】高频 SQL 50 题(基础版)
高频SQL50题(基础版) 1.查询 2.连接 MySQL多表查询(联合查询、连接查询、子查询) left join 左连接 我们首先执行LEFT JOIN操作,将两个表的数据基于 id 列进行组合。同样,我们使用 LEFT JOIN 来确保将所…...
2026 年 5 月 CERT 发布 dnsmasq 六个严重安全漏洞,2.93 版本或一周左右发布
消息基本信息西蒙凯利在 2026 年 5 月 11 日,周一,协调世界时 17:18:25 发布消息,上一条消息(按线程)是[[Dnsmasq 讨论组] DHCP 请求中电路 ID 匹配问题],下一条消息(按线程)是[[Dns…...
别再死记PCA步骤了!用Python手推一遍协方差矩阵与特征值,真正搞懂降维本质
从协方差矩阵到特征值分解:用Python彻底理解PCA的数学本质 主成分分析(PCA)作为数据降维的经典算法,在实际应用中常被简化为"标准化→协方差矩阵→特征分解→降维"的固定流程。但真正理解其数学本质的开发者却寥寥无几—…...
DDR内存信号测试难题:芯片中介层原理与实战部署指南
1. 项目概述:当PCB上的DDR内存引脚“无处下针”时作为一名在硬件测试和信号完整性领域摸爬滚打了十几年的工程师,我太熟悉那种场景了:测试工程师拿着示波器探头,对着电路板上密密麻麻的元器件,尤其是那些藏在其他芯片底…...
信息几何物理学:范式构建、本体坐标与世毫九理论科学谱系定位
信息几何物理学:范式构建、本体坐标与世毫九理论科学谱系定位 Information-Geometric Physics: Paradigm Construction, Ontological Coordinates and Scientific Pedigree Positioning of Shihao-9 Theory 作者:方见华 单位:世毫九实验室 摘要 当代人工智能与认知科学正…...
PowerToys深度解析:Windows生产力工具集的高级配置与性能调优
PowerToys深度解析:Windows生产力工具集的高级配置与性能调优 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/Po…...
基于Claude API的AI应用开发:claude-toolshed框架实战指南
1. 项目概述与核心价值最近在折腾AI应用开发,特别是围绕Claude API构建一些自动化工具时,发现了一个挺有意思的开源项目——aksh-3141/claude-toolshed。这名字直译过来是“Claude的工具棚”,听起来就挺接地气的。简单来说,它不是…...
Angular+Claude协同开发全栈实践(企业级项目落地手册)
更多请点击: https://intelliparadigm.com 第一章:AngularClaude协同开发全栈实践(企业级项目落地手册) 在现代企业级应用开发中,前端框架与AI辅助编程的深度集成正成为提效关键。Angular 提供结构化、可扩展的单页应…...
逆向工程实现GitHub Copilot HTTP API:解锁AI代码补全的无限集成可能
1. 项目概述:一个反向工程的“桥梁”如果你是一名开发者,并且对 GitHub Copilot 的智能代码补全能力印象深刻,但同时又希望能在自己偏爱的编辑器、IDE,甚至是命令行工具里直接调用它的能力,那么purocean/expose-github…...
【AI 越强越离不开工具】:2026 年大模型开发者必备的工具链全景实战(附代码 + 架构图)
前言 目录 前言 一、核心悖论:为什么 AI 越强大,反而越依赖工具? 二、核心拆解:从 Tool 到 Skill 到 Agent,工具链的三层进化逻辑 三、2026 年 AI 工具链全景架构图 四、四大核心工具模块实战(附可直…...
别再只盯着屏蔽罩了!PCB布局与软件防抖,才是低成本搞定EMC(静电/辐射/脉冲群)的关键
低成本EMC设计实战:PCB布局与软件防抖的黄金法则 当谈到电磁兼容性(EMC)设计时,许多工程师的第一反应往往是增加屏蔽罩、使用昂贵的滤波器或购买高规格的元器件。这种思路虽然有效,但对于资源有限的初创团队和小型项目…...
