视频观看地址
同步到以下地址,还有微信视频号和小红书。
新挖一个坑,教媳妇系统设计,第1课讲的是数据分片/切片,也就是把数据按怎么样的方式存放到不同的服务器上。
随着数字化时代的快速发展,数据无疑成为了企业最宝贵的资源之一。然而,数据的快速增长也带来了存储和处理的挑战。在这个背景下,“数据分片(Data Sharding)”成为了解决大规模数据管理问题的关键技术之一。本文将深入探讨数据分片的不同类型和实现方法,并着重讨论水平分片和垂直分片的具体策略。
水平分片 (Horizontal Sharding)
水平分片是指将一个大表中的行分割成较小的片(Shards),每个片在物理上可以分布在不同的数据库服务器上。这种方法的主要优点是能够提高查询性能和可扩展性,因为操作可以在多个服务器上并行处理。水平分片可以根据不同的分片策略来实现,常见的有:
- 基于键的分片 (Key-based Sharding):在这种策略中,数据根据分片键的值被分配到不同的片。分片键通常是数据表中的一个或多个字段,通过散列函数,可以将行均匀地分布到多个片中。这种方法的一个挑战是选择合适的散列函数,以避免数据热点问题。
- 基于范围的分片 (Range-based Sharding):此方法按照指定范围将数据分配到不同的片中。例如,客户记录可以根据姓氏的字母顺序或客户ID的范围进行分片。虽然这种方法可以很容易地实现和理解,但如果数据分布不均,可能会导致某些片过大,影响系统性能。
- 基于字典的分片 (Dictionary-based Sharding):在这种策略中,维护一个查找表或字典,指明哪些行属于哪个片。这种方法在数据分布不容易预测或经常变化的情况下特别有用,因为字典可以动态更新。但是,管理和更新字典可能会增加额外的复杂性和开销。
垂直分片 (Vertical Sharding)
垂直分片涉及将一个数据库表中的列分割开来,不同的列(通常是功能相关的列组)存储在不同的数据库或服务器上。这样不仅可以减少每次查询需要扫描的数据量,还能根据应用的需求优化数据的存储。垂直分片的主要挑战在于跨多个数据库或服务器的事务一致性和数据整合。
总结
数据分片是一种强大的技术,可以帮助企业有效管理大规模数据集。选择合适的分片策略需要综合考虑数据的特性、应用的需求以及系统的架构。通过合理的设计和实现,数据分片不仅能够提升系统的性能和可扩展性,还能确保数据管理的灵活性和高效性。在未来的数据驱动世界中,掌握和应用数据分片技术将变得越来越重要。
数据分片 (Data Sharding) 视频字幕
1
00:00:00,433 — 00:00:01,566
那个大家好
2
00:00:01,566 — 00:00:02,733
今天我们来讲一下
3
00:00:02,733 — 00:00:04,500
那个系统设计第一课
4
00:00:04,966 — 00:00:06,033
今天我们讲这个
5
00:00:06,033 — 00:00:07,600
这个数据的存储吧
6
00:00:07,600 — 00:00:08,833
就比如说我有
7
00:00:08,833 — 00:00:10,433
呃你知道那个有一个表格嘛
8
00:00:10,433 — 00:00:12,400
有一些数据用户的数据吧
9
00:00:12,400 — 00:00:13,600
好比如说银行
10
00:00:14,133 — 00:00:14,966
银行要存
11
00:00:15,166 — 00:00:17,833
这个储户的这个名字和余额吧
12
00:00:17,833 — 00:00:20,400
对吧 就这样, 那假设有好多人嘛
13
00:00:20,400 — 00:00:21,300
这一个银行
14
00:00:21,700 — 00:00:23,833
银行的用户可能很多, 可能几百万 对不对?
15
00:00:24,133 — 00:00:25,733
那你想想象那几百万的数据
16
00:00:25,733 — 00:00:28,366
它肯定不是存在一个呃
17
00:00:28,533 — 00:00:30,766
这个Excel表格里面嘛
18
00:00:30,766 — 00:00:31,533
这肯定不行嘛
19
00:00:31,533 — 00:00:33,933
也不可能存在单一的这个
20
00:00:34,600 — 00:00:35,566
服务器里面嘛
21
00:00:35,566 — 00:00:37,800
就比如说我这名字
22
00:00:38,233 — 00:00:39,166
然后我这边
23
00:00:39,533 — 00:00:41,566
呃名字可能有重名
24
00:00:41,566 — 00:00:43,766
那我前面肯定有个用户ID吧 对吧?
25
00:00:43,900 — 00:00:45,000
唯一的这个ID
26
00:00:45,200 — 00:00:46,433
对吧, 然后名字
27
00:00:46,933 — 00:00:47,766
然后, 比如说
28
00:00:48,133 — 00:00:51,000
年龄好了 然后我这有个balance多少钱
29
00:00:51,000 — 00:00:52,100
就这么简单哈
30
00:00:52,133 — 00:00:54,600
用户 User ID 1 比如说张三
31
00:00:55,033 — 00:00:56,633
张三Jack吧 好吧
32
00:00:56,633 — 00:00:57,800
然后年龄什么的
33
00:00:58,533 — 00:00:59,766
随便写几句
34
00:01:00,033 — 00:01:02,433
然后这边我弄几个
35
00:01:03,033 — 00:01:05,100
这名字我就随便弄
36
00:01:09,133 — 00:01:10,700
就比如说那有5个用户
37
00:01:10,700 — 00:01:12,000
对这有多少钱
38
00:01:16,733 — 00:01:17,500
然后 对吧
39
00:01:17,500 — 00:01:19,100
就假设 你能想象嘛
40
00:01:19,100 — 00:01:20,933
就是比如说它有好多用户, 对吧
41
00:01:21,200 — 00:01:22,400
就几百万个
42
00:01:23,300 — 00:01:24,100
几百万个
43
00:01:24,333 — 00:01:27,633
那我们这里讲了就是说这个现实当中
44
00:01:27,633 — 00:01:30,500
呃这这些数据肯定不是单一的
45
00:01:30,500 — 00:01:31,166
这个copy嘛
46
00:01:31,166 — 00:01:32,233
你能想象如果
47
00:01:32,366 — 00:01:34,333
你单纯放在一台电脑上面
48
00:01:34,333 — 00:01:35,633
服务器那硬盘坏了
49
00:01:35,633 — 00:01:37,700
那这数据就丢失了 对不对
50
00:01:38,100 — 00:01:39,100
是不是它肯定会有备份的嘛
51
00:01:39,100 — 00:01:40,333
那我们今天讲的这个
52
00:01:40,400 — 00:01:41,166
呃不讲这个备份
53
00:01:41,166 — 00:01:41,733
备份这一块
54
00:01:41,733 — 00:01:44,700
我们就讲说怎么让它 那个就是
55
00:01:45,233 — 00:01:47,600
就是提高这个储存效率吧
56
00:01:47,633 — 00:01:50,133
就说比如说我这100万个用户
57
00:01:50,133 — 00:01:52,966
那我如果统一的放在一个服务器上面
58
00:01:52,966 — 00:01:53,366
那
59
00:01:53,366 — 00:01:56,000
这个是会受到一个单一服务器的上限
60
00:01:56,533 — 00:01:59,000
对吧 比如说我之后用户数变成1亿了
61
00:01:59,000 — 00:02:01,500
那你这个硬盘肯定会不够 对不对
62
00:02:01,500 — 00:02:02,600
这就会有个瓶颈嘛
63
00:02:02,600 — 00:02:04,533
就是呃 这个瓶颈
64
00:02:04,533 — 00:02:06,266
这里面我们就有一个概念
65
00:02:06,266 — 00:02:07,300
叫做 Partitioning
66
00:02:07,300 — 00:02:08,533
就是分区
67
00:02:09,066 — 00:02:11,066
分区就是 有两种分区吧
68
00:02:11,066 — 00:02:13,833
一种是 水平分区 一种是 垂直分区
69
00:02:14,166 — 00:02:16,333
就 Horizontal Partition
70
00:02:16,333 — 00:02:17,833
我这边写一下 Horizontal
71
00:02:18,900 — 00:02:19,766
Partitioning
72
00:02:20,866 — 00:02:23,033
Partition 然后还有一个 Vertical partition
73
00:02:25,500 — 00:02:28,566
垂直和水平, 垂直呢
74
00:02:28,633 — 00:02:29,366
垂直就是说我
75
00:02:29,366 — 00:02:31,600
比如说我这个用户名字
76
00:02:31,700 — 00:02:34,366
年龄还有这个 Balance, 我这每一列嘛
77
00:02:34,366 — 00:02:35,533
这个叫 Column, 对吧
78
00:02:35,533 — 00:02:36,400
我每一 Column
79
00:02:36,400 — 00:02:38,300
我可以给它存在不同的机器上面
80
00:02:38,333 — 00:02:39,866
就比如说这台服务器
81
00:02:39,866 — 00:02:42,133
我就储存用户ID跟姓名
82
00:02:43,166 — 00:02:44,800
在剑桥好了
83
00:02:45,000 — 00:02:46,366
然后另外台服务器在伦敦
84
00:02:46,366 — 00:02:47,700
就储存用户ID
85
00:02:48,000 — 00:02:50,066
和年龄对吧
86
00:02:50,200 — 00:02:55,100
那再一台电脑比如说放在嗯爱丁堡
87
00:02:55,100 — 00:02:57,700
那就储存用户ID跟这个
88
00:02:58,133 — 00:02:58,966
这个余额对吧
89
00:02:58,966 — 00:03:00,900
那我就给它分在不同的地方嘛
90
00:03:00,900 — 00:03:03,933
那这样的话我就可以把数据给呃
91
00:03:04,066 — 00:03:04,866
给分散来
92
00:03:04,866 — 00:03:06,466
一台服务器的要求也不会太多
93
00:03:06,466 — 00:03:07,533
但是它没有解决一个问题
94
00:03:07,533 — 00:03:08,866
就是它用户数多的话
95
00:03:08,866 — 00:03:10,266
它照样没法存 对不对
96
00:03:10,733 — 00:03:12,766
是不是那 这时候就要一个水平分区
97
00:03:12,900 — 00:03:15,000
水平的分区就是我按行来存吗
98
00:03:15,000 — 00:03:16,633
比如那我举个简单例子
99
00:03:16,633 — 00:03:18,800
就水平分区我就可以有
100
00:03:18,800 — 00:03:21,500
有几种情况了我比如说我可以按
101
00:03:22,300 — 00:03:24,133
按那个奇数和偶数吧
102
00:03:24,133 — 00:03:26,666
这用户ID它不是12345都有奇数和偶数
103
00:03:26,666 — 00:03:28,133
那我奇数的这个用户
104
00:03:28,133 — 00:03:30,166
我给它放在伦敦好了
105
00:03:30,266 — 00:03:32,600
我偶数的用户我给它放在剑桥对吧
106
00:03:32,600 — 00:03:33,366
这可以吧
107
00:03:33,366 — 00:03:34,000
那这样的话
108
00:03:34,000 — 00:03:35,533
我单台服务器呃
109
00:03:35,533 — 00:03:38,166
所要储存的这个用户数是不是减半了
110
00:03:38,966 — 00:03:40,733
是吧 这就对于每台服务器的
111
00:03:40,733 — 00:03:41,600
这个压力就小了
112
00:03:41,600 — 00:03:43,066
对吧 这是一种这种叫做
113
00:03:43,166 — 00:03:44,033
按哪一个key
114
00:03:44,033 — 00:03:45,066
key base的这种
115
00:03:45,066 — 00:03:47,100
一般是比如说你有n台服务器
116
00:03:47,100 — 00:03:49,566
你就可以把这个ID
117
00:03:49,866 — 00:03:51,966
对这个n台服务器进行一个取模
118
00:03:51,966 — 00:03:52,766
那你就可以
119
00:03:52,800 — 00:03:53,800
把它平均的分
120
00:03:53,800 — 00:03:56,000
分布在这个n台服务器上面
121
00:03:56,400 — 00:03:58,666
对吧, 那还有一种就是比如说像
122
00:03:58,866 — 00:04:00,766
呃range就是按范围
123
00:04:00,766 — 00:04:02,566
比如说我1-100
124
00:04:03,433 — 00:04:07,666
用户用户ID 1-100那我储存在嗯
125
00:04:07,900 — 00:04:08,866
伦敦的服务器
126
00:04:09,033 — 00:04:11,100
101-200储存在剑桥对吧
127
00:04:11,100 — 00:04:11,666
可以这么理解
128
00:04:11,666 — 00:04:13,400
那我这每台服务器我都可以知道
129
00:04:13,400 — 00:04:14,500
我就储存这么100个
130
00:04:14,500 — 00:04:15,966
这叫 Range Base 嘛对吧
131
00:04:16,266 — 00:04:17,100
那还有一种就是
132
00:04:17,100 — 00:04:19,800
比如说我可以在这边加一个呃
133
00:04:19,966 — 00:04:22,600
字段加一个 column 列
134
00:04:22,600 — 00:04:24,866
哦比如说 就说服务ID吧
135
00:04:24,966 — 00:04:25,833
服务器的ID
136
00:04:26,033 — 00:04:29,233
那我在这用户在我新建
137
00:04:29,233 — 00:04:31,300
新加入一个用户的话 我就可以
138
00:04:31,600 — 00:04:32,666
随机给它指定
139
00:04:32,666 — 00:04:34,066
比如说我这个这个用户一一
140
00:04:34,066 — 00:04:35,833
我就给它储存在伦敦
141
00:04:35,833 — 00:04:36,233
好吧
142
00:04:36,233 — 00:04:39,466
伦敦, 用户2我会储存在剑桥这样, 对吧
143
00:04:39,500 — 00:04:42,000
那这个叫做就是Dictionary的这种
144
00:04:42,000 — 00:04:43,033
字典的这种
145
00:04:43,100 — 00:04:44,933
呃去查找 对吧
146
00:04:45,100 — 00:04:47,133
还有另外一个术语叫 Sharding (分片)
147
00:04:47,333 — 00:04:49,800
Sharding (分片)
148
00:04:50,133 — 00:04:50,866
这个就是讲说
149
00:04:50,866 — 00:04:52,800
我们怎么把数据给合理的
150
00:04:52,800 — 00:04:54,133
提高这种储存效率嘛
151
00:04:54,133 — 00:04:56,933
因为我们要尽可能的避免把
152
00:04:57,300 — 00:04:59,300
所有的数据放在同一台服务器上面
153
00:04:59,300 — 00:05:02,200
这一个是它有每台服务器受到的这种
154
00:05:02,366 — 00:05:03,900
限制, 对吧
155
00:05:03,900 — 00:05:04,566
那还有一种
156
00:05:04,566 — 00:05:06,800
就是说我们要提高它的储存效率
157
00:05:06,933 — 00:05:09,533
那你能讲想象一下 比如说我有n个
158
00:05:09,900 — 00:05:11,700
呃用户那我要同时去取数据
159
00:05:11,700 — 00:05:13,400
那我如果这是n个用户的话
160
00:05:13,400 — 00:05:14,633
我分布在不同的服务器
161
00:05:14,633 — 00:05:16,533
我可以同时并行的去
162
00:05:16,800 — 00:05:17,400
去请求
163
00:05:17,400 — 00:05:19,433
这样呃效率就比较高嘛 对不对
164
00:05:19,433 — 00:05:21,200
这个是讲今天讲这个
165
00:05:21,400 — 00:05:24,000
呃Horizontal Partitioning 跟 Vertical Partitioning
166
00:05:24,100 — 00:05:25,800
那一般来说就是呃
167
00:05:26,300 — 00:05:29,300
就是用 Horizontal 这种 Partitioning
168
00:05:29,400 — 00:05:31,333
就是把这个不同的这个
169
00:05:31,566 — 00:05:34,566
把一个表拆分按按行数来给它拆分
170
00:05:34,566 — 00:05:35,533
然后我们有一些规则
171
00:05:35,533 — 00:05:37,633
我们可以把按这个行数来拆分
172
00:05:37,633 — 00:05:39,200
把这个数据给分布到
173
00:05:39,366 — 00:05:41,433
这呃几台服务器上面
174
00:05:42,033 — 00:05:44,400
行吧今天讲这, 有什么问题吗?
175
00:05:44,400 — 00:05:46,166
没有 嗯 好 今天就这样
176
00:05:46,166 — 00:05:47,833
嗯 拜拜 拜拜
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK