数据库与存储优化
一、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 元素的构成…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
