数据库与存储优化
一、MySQL深度优化
-
索引优化
-
B+树索引结构
- 结构特点:
- 平衡多路搜索树,所有数据存储在叶子节点,非叶子节点仅存键值和指针。
- 叶子节点通过双向链表连接,支持范围查询高效遍历。
- 优势:
- 减少磁盘IO(高扇出,3~4层可存储千万级数据)。
- 适合范围查询(如
WHERE id BETWEEN 100 AND 200)。
- 结构特点:
-
覆盖索引
- 定义:索引包含查询所需的所有字段,无需回表。
- 示例:
-- 创建覆盖索引 CREATE INDEX idx_cover ON user(name, age); -- 查询命中覆盖索引 SELECT name, age FROM user WHERE name = 'Alice';
-
索引下推(ICP)
- 原理:在存储引擎层过滤数据,减少回表次数。
- 触发条件:
- 查询条件包含索引列和非索引列。
- 需在
WHERE子句中使用索引前缀。
- 查看ICP优化:
EXPLAIN SELECT * FROM user WHERE name = 'Alice' AND age > 20; -- Extra列显示"Using index condition"
-
-
锁机制
-
意向锁(Intention Locks)
- 作用:快速判断表中是否存在行级锁,避免全表扫描。
- 类型:
- 意向共享锁(IS):事务准备加行级共享锁。
- 意向排他锁(IX):事务准备加行级排他锁。
-
间隙锁(Gap Locks)
- 功能:锁定索引记录间的间隙,防止幻读(Phantom Read)。
- 示例:
-- 对id范围(5,10)加间隙锁 SELECT * FROM user WHERE id > 5 AND id < 10 FOR UPDATE;
-
死锁排查
- 步骤:
- 执行
SHOW ENGINE INNODB STATUS,查看LATEST DETECTED DEADLOCK。 - 分析
WAITING FOR THIS LOCK和HOLDS THE LOCK信息。
- 执行
- 解决:
- 调整事务顺序,缩短事务时间。
- 使用
innodb_deadlock_detect = ON(默认开启)自动检测。
- 步骤:
-
-
分库分表
- ShardingSphere分片策略
- 取模分片:
user_id % 4,数据均匀分布,但扩容需迁移数据。 - 范围分片:按时间或ID范围分片,易导致数据倾斜。
- 基因法路由:
- 原理:将关联数据(如订单和订单明细)的基因值(如用户ID哈希)嵌入分片键,确保关联查询在同一分片。
- 示例:
-- 订单表分片键 = user_id % 8 -- 订单明细表分片键 = (order_id的基因部分) % 8
- 取模分片:
- ShardingSphere分片策略
二、大数据存储优化
-
HBase
-
LSM树结构
- 写入流程:
- 数据先写入内存(MemStore)。
- MemStore满后刷写到磁盘(HFile)。
- 后台合并(Compaction)HFile,减少文件数。
- 优势:高吞吐写入,适合时序数据。
- 写入流程:
-
Region分裂机制
- 触发条件:Region大小超过阈值(默认10GB)。
- 分裂策略:
IncreasingToUpperBound:动态调整分裂阈值。Disabled:手动控制分裂。
-
RowKey设计
- 原则:
- 散列化:避免热点(如
MD5(user_id).substr(0,4) + user_id)。 - 有序性:时间戳反转(
Long.MAX_VALUE - timestamp)。
- 散列化:避免热点(如
- 示例:
RowKey = 盐值(4位) + 用户ID + 时间戳反转
- 原则:
-
-
Elasticsearch
-
倒排索引
- 结构:词项(Term) → 文档ID列表。
- 优化:
- 使用
keyword类型避免分词开销。 - 合并段(Force Merge)减少查询时的段数量。
- 使用
-
分词器原理
- 标准分词器:按空格和标点切分,过滤停用词。
- IK分词器:
ik_smart:粗粒度切分(如“清华大学” → “清华大学”)。ik_max_word:细粒度切分(如“清华大学” → “清华”,“大学”)。
- 自定义词典:
PUT /my_index {"settings": {"analysis": {"analyzer": {"my_ik": {"type": "custom","tokenizer": "ik_max_word","filter": ["my_stopwords"]}},"filter": {"my_stopwords": {"type": "stop","stopwords": ["的", "是"]}}}} }
-
DSL优化技巧
- 避免深分页:使用
search_after代替from/size。 - 过滤器上下文:将
term查询放入filter,利用缓存。 - 冷热数据分离:按时间范围分索引,热数据使用SSD存储。
GET /logs-2023/_search {"query": {"bool": {"filter": [{ "range": { "@timestamp": { "gte": "now-1d/d" }}}]}},"sort": [{"@timestamp": "desc"}],"size": 10,"search_after": [1698765432000] } - 避免深分页:使用
-
三、总结与实战建议
-
MySQL优化重点:
- 索引设计遵循最左前缀原则,避免冗余索引。
- 分库分表优先考虑基因法路由,减少跨分片查询。
-
HBase核心实践:
- RowKey设计需平衡散列与查询需求。
- 预分区(Pre-split)避免自动分裂带来的性能波动。
-
Elasticsearch调优:
- 使用
_bulk接口批量写入,提升吞吐量。 - 定期清理旧索引,结合ILM(索引生命周期管理)自动化。
- 使用
通过结合业务场景选择合适的存储方案,并持续监控关键指标(如MySQL的QPS、Elasticsearch的段合并频率),可显著提升系统性能和稳定性。
相关文章:
数据库与存储优化
一、MySQL深度优化 索引优化 B树索引结构 结构特点: 平衡多路搜索树,所有数据存储在叶子节点,非叶子节点仅存键值和指针。叶子节点通过双向链表连接,支持范围查询高效遍历。 优势: 减少磁盘IO(高扇出&#…...
Android15请求动态申请存储权限完整示例
效果: 1.修改AndroidManifest.xml增加如下内容: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-perm...
C/C++蓝桥杯算法真题打卡(Day3)
一、P8598 [蓝桥杯 2013 省 AB] 错误票据 - 洛谷 算法代码: #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 读取数据行数unordered_map<int, int> idCount; // 用于统计每个ID出现的次数vector<int> ids; …...
【数据结构与算法】Java描述:第二节:LinkedList 链表
一、链表的概念与结构 1.1 概念: 通俗的来说,链表是由一个个结点连接起来的就叫链表。 1.2 结构: 链表存储的数据 在 物理上是不一定连续的,它是由前面链接后面,一个个连起来的。 二、Java底层的 LinkedList 2.1…...
LLM run
lmstudio lmstudio ollama ollama N 卡使用自带UI gpu加速推理 ,选择满足条件的, ds模型选择列表 https://ollama.com/library/deepseek-r1 a卡当前支持的显卡型号 I卡 gpu加速配置 2025.3 intel Official project optimization https://www.modelscope.cn/m…...
k8s面试题总结(十)
1.为什么HDFS不适合存储小文件? 元数据存储在NameNode内存中,一个节点的内存是有限的。存储大量的小文件会消耗过多的寻道时间 同等大小一个大文件的访问速度一定比多个小文件访问速度快 3.NameNode存储block的数量是有限的 比如你一个block元数据需要消…...
android中activity1和activity2中接收定时消息
android中activity1和activity2中接收定时消息 业务类 import java.util.Timer; import java.util.TimerTask;public class MyAnager {private MyAnager() {}private static MyAnager instance;//回调接口onRecvTaskpublic interface OnMsgListener {void onRecvTask(String a…...
Non-Homophilic Graph Pre-Training and Prompt Learning
Non-Homophilic Graph Pre-Training and Prompt Learning KDD25 #paper/⭐# 目的:对异配图进行prompt 方法 邻居节点的综合嵌入 s v 1 ∣ V ( S v ) ∣ ∑ u ∈ V ( S v ) h u ⋅ s i m ( h u , h v ) , \mathbf{s}_{v}\frac{1}{|V(S_{v})|}\su…...
Ollama 框架本地部署教程:开源定制,为AI 项目打造专属解决方案!
Ollama 是一款开源的本地大语言模型(LLM)运行框架,用于管理和运行语言模型。具有以下核心特点: 开源可定制:采用 MIT 开源协议,开发者能自由使用、阅读源码并定制,可根据自身需求进行功能扩展和…...
unittest框架 核心知识的系统复习及与pytest的对比
1. unittest 介绍 是什么:Python 标准库自带的单元测试框架,遵循 xUnit 架构(类似Java的JUnit)。 核心概念: TestCase:测试用例的基类,所有测试类需继承它。 TestSuite:测试套件&a…...
vue面试宝典之二
39.vue2和vue3中源码是如何解析模版的 new vue()的时候实例化了类之后根据传进去的option进行模版的类型div还是text还是啥进行匹配,同时拿到节点的值进行绑定,比如正则匹配{{}}将匹配到的变量拿去跟option中的data查找到具体的值…...
ESLint 深度解析:原理、规则与插件开发实践
在前端开发的复杂生态中,保障代码质量与规范性是构建稳健、可维护项目的基石。ESLint 作为一款强大的代码检查工具,其默认规则与插件能满足多数常见需求,但面对特定团队规范或项目独特要求,自定义 ESLint 插件便成为有力的扩展手段…...
洛谷P1091
题目如下 思路 谢谢观看...
随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)
随着自动驾驶技术的蓬勃发展,安全、高效的路径规划成为核心挑战之一。快速探索随机树(RRT)算法作为一种强大的路径搜索策略,为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…...
江科大51单片机笔记【9】DS1302时钟可调时钟(下)
在写代码前,记得把上一节的跳线帽给插回去,不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 (1)重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因为…...
ssm_mysql_暖心家装平台
收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...
一周学会Flask3 Python Web开发-SQLAlchemy简介及安装
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,…...
< 自用文儿 > DELETED 设置速读 in Ubuntu24
systemctl 和 DELETED: 配置文件: vi /etc/systemd/system/ DELETED.service [Unit] DescriptionV2Ray Service Documentation DELETED Afternetwork.target nss-lookup.target[Service] #Usernobody CapabilityBoundingSetCAP_NET_ADMIN CAP_NET_BIN…...
自动化同步多服务器数据库表结构
当项目每次进行版本升级的时候,如果在这次迭代中涉及表结构变更,需要将不同的生产环境下,都需要同步表结构的DDL语句,比较麻烦,而且还有可能忘记同步脚本,导致生产环境报错.... 该方案采用SpringBootMybat…...
深入理解 HTML 元素:构建网页的基础
在网页开发的领域中,HTML(超文本标记语言)犹如一座大厦的基石,支撑起整个网页的结构与内容呈现。而 HTML 元素,则是构成这座基石的基本单位。今天,就让我们一同深入探索 HTML 元素的奥秘。 HTML 元素的构成…...
告别手动重标:基于Python脚本的Labelme数据集增强与JSON同步更新实战
1. 为什么我们需要自动化处理Labelme标注数据 做计算机视觉项目的朋友都知道,数据标注是个体力活。特别是使用Labelme这类工具进行语义分割标注时,每张图片都要手动勾勒物体轮廓,工作量巨大。更让人头疼的是,当我们对原始图片进行…...
唯品会数据采集API接口||电商API数据采集
唯品会数据采集,优先走合规第三方 API(个人 / 企业均可);企业可申请官方开放平台 API(仅限合作方)。一、合规路径选择(必看)1. 官方开放平台(企业级)入口&…...
自编码器在异常检测中的实战:如何用TensorFlow识别异常数据点
自编码器在异常检测中的实战:如何用TensorFlow识别异常数据点 金融交易中的一笔异常转账、工业设备传感器突然的读数波动、医疗影像中微小的病变区域——这些隐藏在庞大数据流中的异常信号,往往预示着关键风险或机会。传统基于阈值规则的检测方法在面对高…...
告别反复插拔SD卡:迪文DGUS II屏串口下载与仿真调试全攻略(附T5L实战技巧)
告别反复插拔SD卡:迪文DGUS II屏串口下载与仿真调试全攻略(附T5L实战技巧) 在工业控制、智能家居和物联网设备的开发中,迪文DGUS II系列串口屏因其高性价比和强大的组态功能,已成为众多开发者的首选。然而,…...
WRF风场后处理实战:用Python+Cartopy绘制500hPa风场矢量图(附完整代码)
WRF风场后处理实战:用PythonCartopy绘制500hPa风场矢量图(附完整代码) 气象数据分析中,风场可视化是理解大气环流特征的关键环节。WRF(Weather Research and Forecasting)模式输出的数据包含丰富的三维风场…...
Pixel Dream Workshop 助力前端开发:Vue.js 项目动态视觉素材生成指南
Pixel Dream Workshop 助力前端开发:Vue.js 项目动态视觉素材生成指南 1. 为什么前端开发者需要关注视觉素材生成 作为一名Vue.js开发者,你可能经常遇到这样的困扰:产品经理突然要求给新功能加个炫酷的Banner图,设计师资源紧张排…...
3倍效率提升的B站视频下载工具:DownKyi如何重构资源获取体验
3倍效率提升的B站视频下载工具:DownKyi如何重构资源获取体验 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等…...
SUPER COLORIZER一键部署指南:基于Ubuntu 20.04的完整环境配置教程
SUPER COLORIZER一键部署指南:基于Ubuntu 20.04的完整环境配置教程 你是不是也遇到过一些珍贵的老照片,因为年代久远而褪色,想恢复它原本的色彩却无从下手?或者,你有一些黑白的设计稿,想快速预览上色后的效…...
网盘直链下载助手完整教程:如何轻松获取百度、阿里云盘等八大平台真实下载地址
网盘直链下载助手完整教程:如何轻松获取百度、阿里云盘等八大平台真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改(改自6.1.4版本) ,自用…...
DSP28335 EPWM模块关键寄存器配置实战指南
1. EPWM模块基础与核心寄存器概览 DSP28335的增强型PWM(EPWM)模块是电机控制、电源转换等实时控制系统的核心外设。我第一次接触这个模块时,被它强大的灵活性震撼到了——6对独立的EPWM通道,每对都能生成两路互补或独立的PWM波形。…...
