seegongsik
数据

分布式数据 怎么工作

数据越积越多,会怎么样?再大的仓库,总有一天也会装满。于是把仓库增加到好几座,把货分开存放;为了一座塌了也不丢货,还把同样的货在别的仓库里也复制一份。数据也一样:一台计算机应付不了,就分到好几台上存,再在好几台上留副本以防故障。

01

一台不够用了

到上一课为止,我们看了怎样存数据、找数据、安全地改数据,以及怎样处理得又快又小。可数据不会停下来,一直在增加:用户多了,记录多了,还有照片和视频。
一台计算机能装的量是有限的。磁盘有多大是定的,一台机器一次能处理多少请求也是定的。下面往一台机器里不停地加数据看看。

一台的容量
点一下增加数据
0 / 8

一直点添加数据。超过一台的容量,就再也装不下了。

一台装满了,想再放也没地方。可以换一台更大的计算机,这叫垂直扩展。可是越大的计算机价格涨得越陡,而且不管多大,最后还是会装满。
所以换一条路:不把一台变大,而是把台数加多。这叫水平扩展。那么,数据该怎样分到好几台上存呢?

02

分到好几台上存

把数据切成块,分散存到好几台机器上。不再让一台扛下全部,而是每台只管一部分。像这样分开存放叫分布式存储,其中把数据本身切成块来分,叫分片。
分法有好几种。可以按范围分,比如名字拼音首字母从 A 到 M 的数据放在 1 号机,N 到 Z 的放在 2 号机;也可以像前面讲的那样,用哈希把键变成数字,按这个值把数据均匀地撒开。按范围分,数据可能挤在某个区间,所以想分得均匀时,常用哈希。

要分的块
A
B
C
D
E
F
1号台
2号台
3号台
点一下把块分到好几台

一块一块地点,把数据分到好几台上。每台最后只拿着整体的一部分。

数据块分散到了三台上。原来压在一台身上的担子轻了;数据再多,就再接一台计算机,把新块交给它。能这样一直加下去,所以再大的数据也装得下。
要找某条数据,先得知道它在哪一台上。分法的规则是知道的,所以看一看键,就知道该去哪一台。可又冒出一个担心:管着某一块的那台机器要是突然坏了,会怎样?

03

同样的数据在好几台上各留一份

分开存就有了弱点。管着某一块的计算机一坏,那一块就整个没了。计算机越多,其中某一台出故障的事也越常见。
所以把同样的数据复制到好几台上。一台停了,有副本的另一台接着干,数据就不会丢。像这样把同样的数据放在好几台上,叫复制。有了副本,读取请求也可以由好几台分着接。

先复制,再关掉一台试试

先复制好,再关掉一台。关掉一台,有副本的另一台还在运行,数据就还在。

关掉一台,数据照样完好,这多亏了副本。这里一定要把两件事分清:分布是把数据切开,分到不同的机器上;复制是把同样的数据原样放在好几台上。实际的系统通常两样一起用,每一块都留副本。
复制也有代价。每次改数据,都得让所有副本保持一致,可机器之间通信要花时间,所以有一小段时间,各个副本的值可能不一样。网络断了的时候,还会遇到要选择的时刻:是哪怕用旧值也马上回答,还是等副本对齐了再说。

04

松散的容器,NoSQL

数据多得惊人、又得飞快地进进出出的时候,严格的表格有时反倒成了负担。每一行都得有同样的列,而且要在好几台机器之间维持表与表的连接和事务,代价很高。
所以就用放宽了规则的存储。不用表格,而是在一个键上挂一个值,马上存、马上取。它就像把前面讲的哈希表扩展到了好几台机器上,只要有键,在哪一台也马上就定了。这类存储统称 NoSQL。

严格的表格
-
松散的键-值(NoSQL)
-
点一下尺度比较两个容器

点一个尺度,比较严格的表格和松散的键-值容器。形状自由、适合又大又快的处理的,是松散的容器。

松散的容器规则少,所以自由又快。每一行的列可以不一样,只要有键,值马上就能存进取出。作为交换,表与表的连接、严格的事务这类便利,就要放弃一部分。
所以,得到什么、放弃什么,要按用途来选。像有钱进出的账本那样准确第一的地方,用严格的表格;要飞快地堆积海量记录的地方,用松散的容器。同一个服务里两样一起用,也很常见。

05

给数据这一部分做个总结

一路走到这里,路不短。我们从装值的数据结构出发,看了把表聚在一起的数据库,学会了用哈希、树和索引在大表里快速查找。用 SQL 发问,用连接把表连起来,用规范化减少重复,用事务安全地修改。
还看了怎样用缓存和压缩把数据处理得更快、更小。今天又走到了一台不够时,怎样分开存、留副本。

依次点数据这块的大脉络,把它收尾

依次点数据这一部分的大脉络,把它收尾。(装数据的数据结构 → 把表聚起来的数据库 → 快速查找 → 发问与连接 → 整理与安全修改 → 又快又小 → 分开存与复制)

把这一课归纳一下:数据多到一台应付不了,就切成块分到好几台上存(分布),再把同样的数据在好几台上留副本以防故障(复制)。分开和复制是两回事,实际中两样一起用。
为了又大又快的处理,有时也用放宽了表格规则、叫 NoSQL 的存储。关键在于挑着用:得到什么,放弃什么。

现在,处理数据的大图景一眼就能看全了。从一个小容器出发,一直走到在好几台机器上分开存、留副本的庞大系统。安全地存信息、快速地找、大规模地扩展,这些本事会成为下一部分的基础。
下一部分是人工智能。在大量数据汇聚的地方,机器自己找出规律。第一课先从机器“学习”到底是什么意思讲起。

一句话总结数据大到一台计算机应付不了,就把它切成块,分到好几台上存。这叫分布,把数据切成块来分的做法叫分片;放到哪一台,由范围或哈希来决定。每台只管一部分,所以计算机加多少,就能装下多大的数据。为了一台坏了也不丢数据,要把同样的数据复制到好几台上,这就是复制。分布是分开,复制是复制,两回事;副本对齐要花时间,所以一小段时间里值可能对不上。为了又大又快的处理,放宽了表格规则的存储叫 NoSQL,键-值存储就像扩展到好几台机器上的哈希表。
← 数据
如果有帮助,请支持我们