教媳妇系统设计001-数据分片 (Data Sharding)


视频观看地址

同步到以下地址,还有微信视频号和小红书。

新挖一个坑,教媳妇系统设计,第1课讲的是数据分片/切片,也就是把数据按怎么样的方式存放到不同的服务器上。

system-design-001-sharding-scaled 教媳妇系统设计001-数据分片 (Data Sharding) 媳妇 系统设计 视频 计算机

系统设计001-数据切片 Sharding

随着数字化时代的快速发展,数据无疑成为了企业最宝贵的资源之一。然而,数据的快速增长也带来了存储和处理的挑战。在这个背景下,“数据分片(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
嗯 拜拜 拜拜

GD Star Rating
loading...
本文一共 2447 个汉字, 你数一下对不对.
教媳妇系统设计001-数据分片 (Data Sharding). (AMP 移动加速版本)
上一篇: 微软终于弃用VBScript, 一个时代结束了
下一篇: 剑桥新开了家中餐小点心 Your Dumplings 豆浆和生煎

扫描二维码,分享本文到微信朋友圈
c5d0a608004bde2e75337d2ff49f4148 教媳妇系统设计001-数据分片 (Data Sharding) 媳妇 系统设计 视频 计算机

2 条评论

  1. SimonPang

评论