假设,现在有上百 G 数据需要进行分布式存储,也就是要存储到不同的节点上。提到这个问题,可能立刻就会想到很多种方法,比如随机分布、范围分布、映射分布等。那么,我们应该如何选择到底要使用哪种方法呢?
具体的例子
实现上述案例的数据存储
上述案例的数据存储
知识扩展:数据分片和数据分区,有何区别?
数据分区是从数据存储块的维度进行划分,不同的分区物理上归属于不同的节点。比如,现在有 2 个节点 Node1 和 Node2,2 个数据分区 Partition1 和 Partition2,Partition1 属于 Node1、Partition2 属于 Node2。数据分区,可用于存储不同的数据,也可以用来存储相同的数据实现数据备份。数据分区可以归结为是“货架”相关的关键技术,也就是为数据存储提供合适的位置。
数据分片是从数据的维度进行划分,是指将一个数据集合按照一定的方式划分为多个数据子集,不同的数据子集存在不同的存储块上,而这些存储块可以在不同的节点上,也可以在同一节点上。数据分片是实现“导购”的关键技术,目的是构建索引,为数据确定位置,包括存储数据和查询数据时确定数据位置。
由此可见,数据分片和数据分区是两个不同的概念,且属于分布式存储系统中不同角色的技术,前者是实现“导购”的关键技术,后者是“货架”相关的技术,不可直接等同。
但正因为一个是导购相关的关键技术,一个是货架相关的技术,一个提供确定数据索引的位置,一个提供合适的数据存储位置,因此这两个技术是可以共存的,比如下面这个例子。
有 3 个节点{Node1, Node2, Node3},有 3 个分区{Partition1, Partition2, Partition3}用于存储用户信息,每个节点上 1 个分区。现在有 1000 个用户信息需要存储,用户 id 编号为 [1,1000],为防止将所有信息存储到一个节点上,所有用户发起请求时,该节点成为瓶颈,为此需要将这 1000 个用户信息存储到 3 个节点上。
假设,我们采用最简单的哈希方法,用户 id% 节点总数 (3) 进行哈希映射,id%3 = 0 的所有用户信息存储到节点 1 的 Partition1, id%3=1 的所有用户信息存储到节点 2 的 Partition2,id%3=2 的所有用户信息存储到节点 3 的 Partition3。
你知道的越多,你不知道的越多。