分区

简介
在面对海量数据存储(需要大的存储空间)和海量查询(需要高并发的查询)时,单服务器的数据存储模型无法提供高可用性。
分区所做的事情就是将大的数据集拆分成多个子数据集,然后放在多个数据服务器上。这样一来,数据存储被分散在多台服务器上,数据计算服务同样也被分散在多台服务器上。
分区方法
分区策略是指,如何拆分数据集。
在选择分区策略时,首先要考虑的就是分区粒度。例如在KV数据库中,便会将key作为原子进行分区,拆分结果便是一组key => 一个数据实例。但是以key作为原子时,有可能会出现单个key中存储了一个big value,这时分区无法对这个big value进行进一步的分割。
然后便要考虑哪些key => 一个数据实例。这相当于定义一个映射函数,你可以手动地指定如hash(key) ∈ (s0,s1] => Node_0,然后函数形式就是一张表。也可以用数学公式key => Node_{hash(key) % n},这样便省去记录映射表。在定义映射函数的时候还要考虑,对于一些相关key是否需要映射到同一节点,以方便涉及多个key的事务或者查询操作。
【分区】最后便是分区的实现。

  • 客户端分区
    客户端对于给定key选择正确的节点进行读取或者写入。
  • 代理辅助分区
    客户端将请求发给分区代理服务程序,由代理程序转发请求到正确的节点,并将结果返回客户端。
  • 查询路由
    客户端将请求发给任意节点,由数据节点转发请求到正确的节点。

    推荐阅读