赞
踩
在数据分片中,不管是普通hash、一致性hash还是range based,都要基于某个key进行hash运算,然后根据计算值进行分片。
Key一般采用基于记录的特征值,这个特征值在不同的框架中有不同的叫法,比如MongoDB中的sharding key (https://docs.mongodb.com/manual/core/sharding-shard-key/),Oracle中的Partition Key(https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm)。一般来讲,特征值的选取应当具有区分度。比如,在分布式调度系统中,通常会为每个子任务生成一个全局唯一的流水号,由任务控制者通过对流水号进行hash运算,将其分配给Job Executor(负责子任务的执行)。
对于流水号的生成,读者肯定不会陌生,比如数据库的自增主键、uuid等都是生成流水号的方式。但是数据库自增主键只能保证单个DB实例内的单表唯一,uuid则利用了mac地址,缺少规律、可读性及安全性。我们希望的流水号应该满足以下特性:
基于数据库ID表,生成全局流水号,是一种比较常见的方式,以Mysq
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。