数据库与存储优化
一、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 元素的构成…...
如何高效构建视频数据集:video2frame终极实战指南
如何高效构建视频数据集:video2frame终极实战指南 【免费下载链接】video2frame Yet another easy-to-use tool to extract frames from videos, for deep learning and computer vision. 项目地址: https://gitcode.com/gh_mirrors/vi/video2frame 在计算机…...
抖音图片怎么去水印?2026年在线去水印工具+方法盘点,总有一款适合你
开篇:为什么要去水印? 保存抖音图片时,总会遇到水印的困扰。这些水印包含抖音logo、发布者名称,有时还会有账号信息。对于自媒体创作者、内容整理者或普通用户来说,去除水印往往是必需的。本文将介绍当下最实用的抖音图…...
对比直接使用厂商 API 体验 Taotoken 在路由容灾上的价值
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商 API 体验 Taotoken 在路由容灾上的价值 在开发依赖大模型能力的应用时,服务的连续性与稳定性是保障用…...
从零到一:Android Studio集成Uniapp离线SDK打包实战
1. 环境准备:工具选择与版本匹配 第一次接触Uniapp离线打包时,最让我头疼的就是工具版本匹配问题。记得去年接手一个混合开发项目时,因为HBuilderX和SDK版本不兼容,整整浪费了两天时间排查问题。为了避免大家重蹈覆辙,…...
AI智能体生态的包管理器:agenticmarket-cli 设计与实践
1. 项目概述:一个面向AI智能体生态的命令行工具如果你和我一样,长期在AI智能体(Agent)这个领域里折腾,那你肯定经历过这样的场景:为了测试一个最新的开源智能体框架,你需要先找到它的GitHub仓库…...
VHDL转Verilog终极指南:如何用VHD2VL v3.0快速完成硬件描述语言转换
VHDL转Verilog终极指南:如何用VHD2VL v3.0快速完成硬件描述语言转换 【免费下载链接】vhd2vl 项目地址: https://gitcode.com/gh_mirrors/vh/vhd2vl 在FPGA开发领域,VHDL和Verilog是两大主流硬件描述语言,但团队协作或项目迁移时经常…...
终极指南:如何为PotPlayer配置百度翻译插件实现实时字幕翻译
终极指南:如何为PotPlayer配置百度翻译插件实现实时字幕翻译 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu PotPlayer_Sub…...
开源机械爪控制库:从PID算法到ROS集成的全栈开发指南
1. 项目概述:一个开源的机械爪设计与控制库最近在机器人硬件开发的圈子里,开源项目“MeyerZhou/openclaw”引起了不少创客和机器人爱好者的注意。简单来说,这是一个专注于机械爪(或称机械手、夹爪)设计与控制的代码库和…...
如何快速解密网易云NCM文件:终极免费转换工具指南
如何快速解密网易云NCM文件:终极免费转换工具指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否在网易云音乐下载了喜欢的歌曲,…...
Supabase AI Agent技能库:安全集成数据库操作与边缘函数调用
1. 项目概述:当Supabase遇上AI Agent,一个技能库的诞生最近在捣鼓AI Agent应用开发,发现一个挺有意思的现象:大家都能用LangChain、LlamaIndex这些框架快速搭出个Agent的架子,但真想让这个Agent去干点具体、有用的活儿…...
