public abstract class AbstractIntervalShardingAlgorithm<T extends java.lang.Comparable<?>>
extends java.lang.Object
implements org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm<T>
1. 易用性 支持多种数据类型 (Long:时间戳、LocalDateTime、DATE),而官方的实现是先转换成字符串再转换成 LocalDateTime,转换成功率受时间格式化字符影响
2. 性能
-- 2.1 算法复杂度:[O(1)],而官方的实现使用的是遍历查找[O(N)] {org.apache.shardingsphere.sharding.algorithm.sharding.datetime.IntervalShardingAlgorithm}
-- 2.2 降低解析与转换成本,而官方的实现使用的是先转换成字符串,然后再转换成 LocalDateTime
分配策略=[逻辑名] + [分片算法],分片算法KEY在全局唯一,这种方式显然是不利于缓存优化的,即doSharding(Collection, RangeShardingValue)的第一个参数availableTargetNames应该在绑定时已知且稳定,作为实例变量更利于性能。| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
DATE_TIME_LOWER_KEY |
static java.lang.String |
DATE_TIME_UPPER_KEY |
static java.time.format.DateTimeFormatter |
DEFAULT_DATE_TIME_FORMATTER |
static java.lang.String |
DEFAULT_DATE_TIME_PATTERN |
static java.lang.String |
INTERVAL_AMOUNT_KEY |
static java.lang.String |
INTERVAL_UNIT_KEY |
static java.lang.String |
SHARDING_SUFFIX_FORMAT_KEY |
static java.lang.String |
TYPE_PREFIX |
static java.lang.String |
ZONE_ID_KEY |
| Constructor and Description |
|---|
AbstractIntervalShardingAlgorithm() |
| Modifier and Type | Method and Description |
|---|---|
protected com.google.common.collect.Range<java.time.LocalDateTime> |
convertRangeShardingValue(com.google.common.collect.Range<T> shardingValue) |
protected abstract java.time.LocalDateTime |
convertShardingValue(T shardingValue)
convert sharding value to
LocalDateTime. |
java.lang.String |
doSharding(java.util.Collection<java.lang.String> availableTargetNames,
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue<T> shardingValue) |
java.util.Collection<java.lang.String> |
doSharding(java.util.Collection<java.lang.String> availableTargetNames,
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue<T> shardingValue) |
java.util.Properties |
getProps() |
protected java.lang.String |
getRequiredValue(java.lang.String key) |
me.ahoo.cosid.sharding.Sharding<java.time.LocalDateTime> |
getSharding() |
protected java.time.ZoneId |
getZoneId() |
void |
init(java.util.Properties props) |
public static final java.lang.String TYPE_PREFIX
public static final java.lang.String DEFAULT_DATE_TIME_PATTERN
public static final java.time.format.DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER
public static final java.lang.String DATE_TIME_LOWER_KEY
public static final java.lang.String DATE_TIME_UPPER_KEY
public static final java.lang.String SHARDING_SUFFIX_FORMAT_KEY
public static final java.lang.String INTERVAL_UNIT_KEY
public static final java.lang.String INTERVAL_AMOUNT_KEY
public static final java.lang.String ZONE_ID_KEY
public java.util.Properties getProps()
getProps in interface org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmprotected java.time.ZoneId getZoneId()
public void init(java.util.Properties props)
init in interface org.apache.shardingsphere.infra.util.spi.lifecycle.SPIPostProcessorprotected java.lang.String getRequiredValue(java.lang.String key)
public me.ahoo.cosid.sharding.Sharding<java.time.LocalDateTime> getSharding()
public java.lang.String doSharding(java.util.Collection<java.lang.String> availableTargetNames,
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue<T> shardingValue)
doSharding in interface org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm<T extends java.lang.Comparable<?>>public java.util.Collection<java.lang.String> doSharding(java.util.Collection<java.lang.String> availableTargetNames,
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue<T> shardingValue)
doSharding in interface org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm<T extends java.lang.Comparable<?>>protected abstract java.time.LocalDateTime convertShardingValue(T shardingValue)
LocalDateTime.shardingValue - sharding valueLocalDateTime represented by the sharding valueprotected com.google.common.collect.Range<java.time.LocalDateTime> convertRangeShardingValue(com.google.common.collect.Range<T> shardingValue)