目前主流大数据存储使用横向扩展(scale out)而非传统数据库纵向扩展(scale up)的方式。因此涉及数据分片、数据路由(routing)、数据一致性问题
二级映射关系:key-partition映射,partition-machine映射
首先找到partition(比如hash),然后找machine(路由routing)
hash分片方式1:Round Robin
新增一台机器:
需要重新分配数据归属,灵活性差
hash分片方式2:虚拟桶(virtual buckets)
hash分片方式3:一致性hash(consistent hashing)
提高灵活性:集群各机器连成一个环
路由问题:每个节点配置路由表(finger table)。N14的路由表:
每个机器根据路由表转发请求,直到查到value数据。
新节点加入、离开集群需要结合稳定性检测策略,更新前后继指针
稳定性检测:定期向前后继节点发送请求,更新前后继指针
解决负载不均衡/机器异质性问题:引入虚拟节点,将每个物理节点虚拟成多个虚拟节点,分别映射到hash环不同位置
范围分片(range partition):
数据分片在物理机管理往往采用LSM树,BigTable采用类似B+树的多层结构
Dynamo | Cassandra | Riak | Voldmort | Membase/Couchbase | BigTable | Azure | PNUTS | |
介绍 | Amazon,NoSQL | NoSQL | 模仿Dynamo | Linkedin,NoSQL | 内存分布式NoSQL | Microsoft | Yahoo | |
数据分片 | consistent hash | consistent hash | hash | hash | hash | range | range | hash+range |
virtual node | B+ tree |