IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据优化——分库分表(二)策略讲解 -> 正文阅读

[数据结构与算法]数据优化——分库分表(二)策略讲解

1 range

  1. 自增ID,根据ID范围进行分表(左闭右开)
  • 比如1~1000000是table1;
  • 1000001~2000000是table2;
  • 2000001~3000000table3;

优点:

  • id是?增?,可以?限增?
  • 扩容不?迁移数据,容易理解和维护

缺点:

  • ?部分读和写都访会问新的数据,有IO瓶颈,整体资源利?率低。
  • 数据倾斜严重,热点数据过于集中,部分节点有瓶颈

比如:做一个用户数据,用户肯定是越新越活跃,一般来说老用户的活跃程度没有新用户的高,所以按上面的分库分表方法的话会导致后面的库表压力大,前面的库表压力小,造成缺点的产生。

适合: 日活流水记录(需要新旧数据整合)

1.1 拓展-range延伸

按上面的来看,感觉range策略很鸡肋的样子,其实也不然,因为没有万能的策略,只有适合的策略。通过上面可以看出range其实是一个一定范围内的划分(看单词含义就应该知道)。而这个范围不应该限定于数字之间,可以把它延伸扩展。例如:

  • 时间 年、?、?范围,比如按照?份?成 库或表 pay_log_2022_01、pay_log_2022_02
  • 空间 地理位置:省份、区域(华东、华北、华南)?如按照 省份 ?成 库或表

思考1 :为什么按地域分的时候多按(华东、华北、华南)而不是直接按省份建表建库?
在这里插入图片描述

答案1:如果是按省份建表建库也会导致上面说的“有IO瓶颈,整体资源利?率低”等问题,因为省份之间的数据量是不一样的,拿广西跟北上广比,从用户使用频率到使用量基本是有倍数上的差距,如果广西一个库,上海一个库,那就会导致广西的库性能过剩,上海的库性能告急。所以按地域划分,可以均匀些,把各大冷热数据均摊,提高机器的使用率。比如扩大到世界范围时候,也不会按各大洲各大国去划分,而是按经纬度去划分,为了也是混合数据,提高机器的负荷率。

2 hash取模(Hash分库分表是最普遍的方案)

思考2:为什么不直接取模?而是要先Hash呢?

回答2:因为有时候你用来分库分表的字段不一定是整数类型,所以先Hash可以提高规则的适配度,总之,统一规则即可。

在这里插入图片描述
例子:
?户ID是整数型的,要分2库,每个库表数量4张表,?共8张表,?户ID取模后,值是0到7的要平均分配到每张表

一般规则:
库ID = userId % 库数量 2

表ID = userId / 库数量 2 % 表数量 4

PS:如果你发现某些表的数据量不够,说明你的规则发生了问题,在建表后应该先数据量的测试判断自己的策略无误再使用。

在这里插入图片描述
优点:

  • 保证数据较均匀的分散落在不同的库、表中,可以有效的避免热点数据集中问题

缺点:

  • 扩容不是很?便,需要数据迁移
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:22:23  更:2022-05-07 11:24:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:36:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码