分区

简介

在面对海量数据存储(需要大的存储空间)和海量查询(需要高并发的查询)时,单服务器的数据存储模型无法提供高可用性。

分区所做的事情就是将大的数据集拆分成多个子数据集,然后放在多个数据服务器上。这样一来,数据存储被分散在多台服务器上,数据计算服务同样也被分散在多台服务器上。

分区方法

分区策略是指,如何拆分数据集。

在选择分区策略时,首先要考虑的就是分区粒度。例如在KV数据库中,便会将key作为原子进行分区,拆分结果便是一组key => 一个数据实例。但是以key作为原子时,有可能会出现单个key中存储了一个big value,这时分区无法对这个big value进行进一步的分割。

然后便要考虑哪些key => 一个数据实例。这相当于定义一个映射函数,你可以手动地指定如hash(key) ∈ (s0,s1] => Node_0,然后函数形式就是一张表。也可以用数学公式key => Node_{hash(key) % n},这样便省去记录映射表。在定义映射函数的时候还要考虑,对于一些相关key是否需要映射到同一节点,以方便涉及多个key的事务或者查询操作。

最后便是分区的实现。

  • 客户端分区
    客户端对于给定key选择正确的节点进行读取或者写入。
  • 代理辅助分区
    客户端将请求发给分区代理服务程序,由代理程序转发请求到正确的节点,并将结果返回客户端。
  • 查询路由
    客户端将请求发给任意节点,由数据节点转发请求到正确的节点。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容