当前位置: 首页 > news >正文

数据库与存储优化

一、MySQL深度优化
  1. 索引优化

    • 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"

  2. 锁机制

    • 意向锁(Intention Locks)

      • 作用:快速判断表中是否存在行级锁,避免全表扫描。
      • 类型
        • 意向共享锁(IS):事务准备加行级共享锁。
        • 意向排他锁(IX):事务准备加行级排他锁。
    • 间隙锁(Gap Locks)

      • 功能:锁定索引记录间的间隙,防止幻读(Phantom Read)。
      • 示例
        -- 对id范围(5,10)加间隙锁 
        SELECT * FROM user WHERE id > 5 AND id < 10 FOR UPDATE;

    • 死锁排查

      • 步骤
        1. 执行SHOW ENGINE INNODB STATUS,查看LATEST DETECTED DEADLOCK
        2. 分析WAITING FOR THIS LOCKHOLDS THE LOCK信息。
      • 解决
        • 调整事务顺序,缩短事务时间。
        • 使用innodb_deadlock_detect = ON(默认开启)自动检测。
  3. 分库分表

    • ShardingSphere分片策略
      • 取模分片user_id % 4,数据均匀分布,但扩容需迁移数据。
      • 范围分片:按时间或ID范围分片,易导致数据倾斜。
      • 基因法路由
        • 原理:将关联数据(如订单和订单明细)的基因值(如用户ID哈希)嵌入分片键,确保关联查询在同一分片。
        • 示例
          -- 订单表分片键 = user_id % 8 
          -- 订单明细表分片键 = (order_id的基因部分) % 8


二、大数据存储优化
  1. HBase

    • LSM树结构

      • 写入流程
        1. 数据先写入内存(MemStore)。
        2. MemStore满后刷写到磁盘(HFile)。
        3. 后台合并(Compaction)HFile,减少文件数。
      • 优势:高吞吐写入,适合时序数据。
    • Region分裂机制

      • 触发条件:Region大小超过阈值(默认10GB)。
      • 分裂策略
        • IncreasingToUpperBound:动态调整分裂阈值。
        • Disabled:手动控制分裂。
    • RowKey设计

      • 原则
        • 散列化:避免热点(如MD5(user_id).substr(0,4) + user_id)。
        • 有序性:时间戳反转(Long.MAX_VALUE - timestamp)。
      • 示例
        RowKey = 盐值(4位) + 用户ID + 时间戳反转

  2. 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树索引结构 结构特点&#xff1a; 平衡多路搜索树&#xff0c;所有数据存储在叶子节点&#xff0c;非叶子节点仅存键值和指针。叶子节点通过双向链表连接&#xff0c;支持范围查询高效遍历。 优势&#xff1a; 减少磁盘IO&#xff08;高扇出&#…...

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] 错误票据 - 洛谷 算法代码&#xff1a; #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 概念&#xff1a; 通俗的来说&#xff0c;链表是由一个个结点连接起来的就叫链表。 1.2 结构&#xff1a; 链表存储的数据 在 物理上是不一定连续的&#xff0c;它是由前面链接后面&#xff0c;一个个连起来的。 二、Java底层的 LinkedList 2.1…...

LLM run

lmstudio lmstudio ollama ollama N 卡使用自带UI gpu加速推理 ,选择满足条件的&#xff0c; ds模型选择列表 https://ollama.com/library/deepseek-r1 a卡当前支持的显卡型号 I卡 gpu加速配置 2025.3 intel Official project optimization https://www.modelscope.cn/m…...

k8s面试题总结(十)

1.为什么HDFS不适合存储小文件&#xff1f; 元数据存储在NameNode内存中&#xff0c;一个节点的内存是有限的。存储大量的小文件会消耗过多的寻道时间 同等大小一个大文件的访问速度一定比多个小文件访问速度快 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/⭐#​ 目的&#xff1a;对异配图进行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 是一款开源的本地大语言模型&#xff08;LLM&#xff09;运行框架&#xff0c;用于管理和运行语言模型。具有以下核心特点&#xff1a; 开源可定制&#xff1a;采用 MIT 开源协议&#xff0c;开发者能自由使用、阅读源码并定制&#xff0c;可根据自身需求进行功能扩展和…...

unittest框架 核心知识的系统复习及与pytest的对比

1. unittest 介绍 是什么&#xff1a;Python 标准库自带的单元测试框架&#xff0c;遵循 xUnit 架构&#xff08;类似Java的JUnit&#xff09;。 核心概念&#xff1a; TestCase&#xff1a;测试用例的基类&#xff0c;所有测试类需继承它。 TestSuite&#xff1a;测试套件&a…...

vue面试宝典之二

39.vue2和vue3中源码是如何解析模版的 new vue&#xff08;&#xff09;的时候实例化了类之后根据传进去的option进行模版的类型div还是text还是啥进行匹配&#xff0c;同时拿到节点的值进行绑定&#xff0c;比如正则匹配{{}}将匹配到的变量拿去跟option中的data查找到具体的值…...

ESLint 深度解析:原理、规则与插件开发实践

在前端开发的复杂生态中&#xff0c;保障代码质量与规范性是构建稳健、可维护项目的基石。ESLint 作为一款强大的代码检查工具&#xff0c;其默认规则与插件能满足多数常见需求&#xff0c;但面对特定团队规范或项目独特要求&#xff0c;自定义 ESLint 插件便成为有力的扩展手段…...

洛谷P1091

题目如下 思路 谢谢观看...

随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

随着自动驾驶技术的蓬勃发展&#xff0c;安全、高效的路径规划成为核心挑战之一。快速探索随机树&#xff08;RRT&#xff09;算法作为一种强大的路径搜索策略&#xff0c;为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…...

江科大51单片机笔记【9】DS1302时钟可调时钟(下)

在写代码前&#xff0c;记得把上一节的跳线帽给插回去&#xff0c;不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 &#xff08;1&#xff09;重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;&#xff08;2&#xff09;初始化 因为…...

ssm_mysql_暖心家装平台

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…...

一周学会Flask3 Python Web开发-SQLAlchemy简介及安装

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射&#xff08;ORM&#xff09;工具&#xff0c;…...

< 自用文儿 > DELETED 设置速读 in Ubuntu24

systemctl 和 DELETED&#xff1a; 配置文件&#xff1a; vi /etc/systemd/system/ DELETED.service [Unit] DescriptionV2Ray Service Documentation DELETED Afternetwork.target nss-lookup.target[Service] #Usernobody CapabilityBoundingSetCAP_NET_ADMIN CAP_NET_BIN…...

自动化同步多服务器数据库表结构

当项目每次进行版本升级的时候&#xff0c;如果在这次迭代中涉及表结构变更&#xff0c;需要将不同的生产环境下&#xff0c;都需要同步表结构的DDL语句&#xff0c;比较麻烦&#xff0c;而且还有可能忘记同步脚本&#xff0c;导致生产环境报错.... 该方案采用SpringBootMybat…...

深入理解 HTML 元素:构建网页的基础

在网页开发的领域中&#xff0c;HTML&#xff08;超文本标记语言&#xff09;犹如一座大厦的基石&#xff0c;支撑起整个网页的结构与内容呈现。而 HTML 元素&#xff0c;则是构成这座基石的基本单位。今天&#xff0c;就让我们一同深入探索 HTML 元素的奥秘。 HTML 元素的构成…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

【第二十一章 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 数据流…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...