数据分区与数据复制
分区通常与复制结合使用,即每个分区在多个节点都存有副本。这意味着某条记录属于特定分区 ,而同样的内容会保存在不同的节点上以提高系统的容错性。
一个节点上可能存储了多个分区。每个分区都有自己的主副本,例如被分配给某节点,而从副分配在其他一些节点。 一个节点可能即是某些分区主副本,同时又是其他分区的从副本。
键-值数据的分区
而如果分区不均匀,则会出现某些分区节点比其他分区承担更多的数据量或查询负载,称之为倾斜。倾斜会导致分区效率严重下降,在极端情况下,所有的负载可能会集中在一个分区节点上,这就意味着10 个节点 个空闲,系统的瓶颈在最繁忙的那个节点上。这种负载严重不成比例的分区即成为系统热点。
避免热点最简单的方怯是将记录随机分配给所有节点上。这种方也可以比较均匀地分布数据,但是有一个很大的缺点:当试图读取特定的数据时,没有办法知道数据保存在哪个节点上,所以不得不井行查询所有节点。
基于关键字区间分区
一种分区方式是为每个分区分配一段连续的关键字或者关键宇区间范围(以最小值和最大值来指示)。如果知道关键字区间的上下限,就可以轻松确定!那个分区包含这些关键字。 如果还知道哪个分区分配在哪个节点,就可以直接向该节点发出请求(对于百科全书的例子,就是从书架上直接取到所要的书籍)。
关键字的区间段不一定非要均匀分布,这主要是因为数据本身可能就不均匀。例如,在上图中卷1只包含以 开头的单词,但是卷12则包含了开始的单词。
然而,基于关键字的区间分区的缺点是某些访问模式会导致热点。如果关键字是时间戳,则分区对应于一个时间范围,例如每天一个分区。然而,当测量数据从传感器写入数据库时,所有的写入操作都集中在同一个分区(即当天的分区),这会导致该分区在写入时负载过高,而其他分区始终处于空闲状态。
为了避免上述问题,需要使用时间戳以外的其他内容作为关键字的第 项。例如,可以在时间戳前面加上传感器名称作为前缀,这样首先由传感器名称,然后按时间进行分区。假设同时有许多传感器处