date -> AutoPartitionByDate

2018-01-02  本文已影响22人  john_zhong

以每24小时作为一份时间(而非自然日),根据用户的配置有两种工作模式:带状模式中,用户仅定义开始日期时,从开始日期(含)开始,每份时间1个分片地无限增加下去;环状模式中,用户定义了开始日期和结束日期时,以结束日期(含)和开始日期(含)之间的时间份数作为分片总数(分片数量固定),以类似取模的方式路由到这些分片里。

PartitionByDate带状模式工作示意图
  1. DBLE启动时,读取用户在rule.xml配置的sBeginDate来确定起始时间
  2. 读取用户在rule.xml配置的sPartionDay来确定每个MySQL分片承载多少天内的数据
  3. 读取用户在rule.xml配置的dateFormat来确定分片索引的日期格式
  4. 在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值(字符串),会被提取出来尝试转换成Java内部的时间类型
  5. 然后求分片索引值与起始时间的差,除以MySQL分片承载的天数,确定所属分片
PartitionByDate环状模式工作示意图
  1. DBLE启动时,读取用户在rule.xml配置的起始时间sBeginDate、终止时间sEndDate和每个MySQL分片承载多少天数据sPartionDay
  2. 根据用户设置,建立起以sBeginDate开始,每sPartionDay天一个分片,直到sEndDate为止的一个环,把分片串联串联起来
  3. 读取用户在rule.xml配置的defaultNode
  4. 在DBLE的运行过程中,用户访问使用这个算法的表时,WHERE子句中的分片索引值(字符串),会被提取出来尝试转换成Java内部的日期类型
  5. 然后求分片索引值与起始日期的差:如果分片索引值不早于sBeginDate(哪怕晚于sEndDate),就以MySQL分片承载的天数为模数,对分片索引值求模得到所属分片;如果分片索引值早于sBeginDate,就会被放到defaultNode分片上
上一篇 下一篇

猜你喜欢

热点阅读