Snowflake
CosIdIntervalShardingAlgorithm
:
java.time.Instant
java.time.LocalDate
java.time.OffsetDateTime
java.time.ZonedDateTime
java.time.LocalDateTime
java.time.YearMonth
java.sql.Date
java.sql.Timestamp
MachineStateStorage
MachineProperties.StateStorage.enabled
com.squareup.okhttp3:okhttp-bom
org.axonframework:axon-bom
ShardingSphere
Radix36CosIdGenerator
для поддержки регистронезависимого хранения.
Radix62CosIdGenerator
//0TEXPEbg0001001
String id = radix62CosIdGenerator.generateAsString();
//CosIdState{timestamp=1660526325024, machineId=1, sequence=1}
CosIdState cosIdState = radix62CosIdGenerator.getStateParser().asState(id);
Radix36CosIdGenerator
//0L6U2PAD600010001
String id = radix36CosIdGenerator.generateAsString();
//CosIdState{timestamp=1660526664378, machineId=1, sequence=1}
CosIdState cosIdState = radix36CosIdGenerator.getStateParser().asState(id);
CosIdGenerator
.
generateAsString
), что в три раза превышает UUID.randomUUID()
.timestamp
, machineId
, sequence
).sequenceResetThreshold
для оптимизации неравномерного распределения сегментов при низкой пропускной способности системы для снежинкового алгоритма.UncertaintyIdGenerator
) для обеспечения глобального монотонного увеличения при условии непредсказуемости, что особенно важно для следующих сценариев:
Полный список изменений: https://github.com/Ahoo-Wang/CosId/compare/v1.12.0...v1.12.1
cosid-axon
, который поддерживает генерацию ID с использованием фреймворка AxonFramework
(события, команды, запросы, сущности, агрегаты и т.д.)Полный список изменений: https://github.com/Ahoo-Wang/CosId/compare/v1.10.4...v1.11.0
cosid-proxy
, режим PROXY
снижает зависимость потребителей ID от уровня хранения дистрибутора, что упрощает процесс интеграции. example-proxy
cosid-proxy-server
.Улучшение: Введен класс MachineIdGuarder
(Защитник идентификатора машины) для управления идентификаторами машин, что решает проблему невозможности восстановления идентификатора машины при непреднамеренном завершении процесса.
Улучшение: Добавлен модуль cosid-test
, который используется для стандартизации реализации расширений, а также предоставляет тестирование совместимости и параллелизма для повышения надежности расширений.
IdConverter
с TO_STRING
на RADIX
(IdGenerator
)TO_STRING
на RADIX
(IdConverterDefinition
)padStart
с false
на true
(IdConverterDefinition.Radix
)CosIdPlugin
)IntegerIdGenerator
(@Ahoo-Wang в https://github.com/Ahoo-Wang/CosId/pull/44)ConcurrentGenerateTest
.IdGeneratorDecorator
.Полный список изменений: https://github.com/Ahoo-Wang/CosId/compare/v1.8.6...v1.8.9
int
с помощью IntegerIdGenerator
int
в CosIdAccessor
@CosId
, чтобы поддерживать цель ElementType.TYPE
public abstract static class AbstractId {
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
@CosId
public static class ClassIdInheritedType extends AbstractId {
}
CosIdAccessor
. @CosId
public abstract static class AbstractGenericCosId<T, N> {
private T id;
private N name;
public T getId() {
return id;
}
public void setId(T id) {
this.id = id;
}
public N getName() {
return name;
}
public void setName(N name) {
this.name = name;
}
}
SnowflakeIntervalShardingAlgorithm
в CosIdSnowflakeIntervalShardingAlgorithm
DateIntervalShardingAlgorithm
, LocalDateTimeIntervalShardingAlgorithm
, SnowflakeFriendlyIntervalShardingAlgorithm
, StringIntervalShardingAlgorithm
, TimestampIntervalShardingAlgorithm
, TimestampOfSecondIntervalShardingAlgorithm
. Вместо них используются CosIdIntervalShardingAlgorithm
и CosIdSnowflakeIntervalShardingAlgorithm
.DEFAULT_BROKEN_THRESHOLD=500
и DEFAULT_SPIN_THRESHOLD=1
CosIdAccessor
при сканировании пакетов. CosIdAccessorRegistry registry = new DefaultAccessorRegistry(new DefaultAccessorParser(AnnotationDefinitionParser.INSTANCE));
DefaultCosIdScanner scanner =
new DefaultCosIdScanner(new String[]{"me.ahoo.cosid.accessor.scanner.entity"}, new NamedDefinitionParser("id"), registry);
scanner.scan();
CosIdAccessorParser
.CosIdAccessorRegistry
.CosIdAccessor
.CosIdDefinition
в IdDefinition
.@CosId#friendlyId
.PrefetchWorkerExecutorService
). https://github.com/Ahoo-Wang/CosId/issues/16 @cubita-ioMAX_PREFETCH_DISTANCE
-> 100_000_000
.Предыдущее | Текущее |
---|---|
![]() |
![]() |
JMHPlugin
, который поддерживает пользовательские параметры JMH: -PjmhIncludes
/-PjmhExcludes
/-PjmhThreads
/-PjmhMode
.IntervalTimeline.sharding
теперь возвращает согласованное подмножество типа коллекции. https://github.com/Ahoo-Wang/CosId/issues/14
SmartIntervalShardingAlgorithm
в CosIdIntervalShardingAlgorithm
(соответствие с ShardingSphere).ModShardingAlgorithm
в CosIdModShardingAlgorithm
(соответствие с ShardingSphere).@Deprecated
: DateIntervalShardingAlgorithm
, LocalDateTimeIntervalShardingAlgorithm
, StringIntervalShardingAlgorithm
, TimestampIntervalShardingAlgorithm
, TimestampOfSecondIntervalShardingAlgorithm
; объединить в CosIdIntervalShardingAlgorithm
.JdbcMachineIdInitializer
.AsStringDeserializer
.AsStringSerializer
.@AsString
. (cosid-jackson)public class AsStringDto {
@AsString
private Long id;
@AsString(AsString.Type.RADIX)
private Long radixId;
@AsString(value = AsString.Type.RADIX, radixPadStart = true)
private Long radixPadStartId;
@AsString(value = AsString.Type.RADIX, radixPadStart = true, radixCharSize = 10)
private Long radixPadStartCharSize10Id;
@AsString(AsString.Type.FRIENDLY_ID)
private long friendlyId;
// getters / setters
}
Результат сериализации
{
"id": "266300479548424192",
"radixId": "JferHIEYZk",
"radixPadStartId": "0JferHIEYZk",
"radixPadStartCharSize10Id": "JferHIEYZk",
"friendlyId": "20211228202301948-0-0"
}
JdbcMachineIdDistributor
, чтобы поддерживать использование реляционной базы данных в качестве хранилища для распределения идентификаторов машин.CosIdJdbcMachineIdDistributorAutoConfiguration
для интеграции с JdbcMachineIdDistributor
.cosid:
snowflake:
machine:
distributor:
type: jdbc
CosIdKeyGenerateAlgorithm
теперь поддерживает генерацию ключей типа строки как распределённых первичных ключей.DistributedAtomicNumber
.CosIdZookeeperAutoConfiguration
, чтобы снизить сложность при интеграции с ZooKeeper.cosid:
zookeeper:
enabled: true
connect-string: localhost:2181
retry:
base-sleep-time-ms: 100
max-retries: 5
max-sleep-ms: 500
block-until-connected-wait: 10s
segment:
distributor:
type: zookeeper
snowflake:
machine:
distributor:
type: zookeeper
Здесь представлены новые возможности, включая конфигурацию автоматической интеграции с ZooKeeper.
IdSegmentDistributorFactory
, чтобы обеспечить гибкую замену IdSegmentDistributor
.ZookeeperIdSegmentDistributorFactory
.ZookeeperMachineIdDistributor
, чтобы поддерживать распределение машинных номеров на основе ZooKeeper.CosIdZookeeperSegmentAutoConfiguration
(cosid-spring-boot-starter
).cosid:
segment:
distributor:
type: zookeeper
CosIdZookeeperMachineIdDistributorAutoConfiguration
(cosid-spring-boot-starter
).cosid:
snowflake:
machine:
distributor:
type: zookeeper
JdbcIdSegmentDistributorFactory
, чтобы адаптироваться к IdSegmentDistributorFactory
.RedisIdSegmentDistributorFactory
, чтобы адаптироваться к IdSegmentDistributorFactory
.SpringRedisIdSegmentDistributorFactory
, чтобы адаптироваться к IdSegmentDistributorFactory
.CosIdJdbcSegmentAutoConfiguration
, чтобы адаптироваться к IdSegmentDistributorFactory
и снизить избыточность кода.CosIdSegmentAutoConfiguration
, чтобы адаптироваться к IdSegmentDistributorFactory
и снизить избыточность кода.CosIdSpringRedisSegmentAutoConfiguration
, чтобы адаптироваться к IdSegmentDistributorFactory
и снизить избыточность кода.CosIdRedisSegmentAutoConfiguration
, чтобы адаптироваться к IdSegmentDistributorFactory
и снизить избыточность кода.IdConverter
, поддерживающий преобразование пользовательских ID типа long
в тип String
.Radix62IdConverter
, обеспечивающий сжатие строковых ID и гарантию их порядка (264499621261217792
-> JXPU9qorEu
).SnowflakeFriendlyIdConverter
, преобразующий ID, созданные с использованием алгоритма Snowflake, в friendlyId
(264500352223547392
-> 20211223210958149-1-0
).IdConverter
API в cosid-spring-boot-starter. short_id:
converter:
prefix: cosid_
type: radix
radix:
char_size: 11
pad_start: false
ZookeeperIdSegmentDistributor
, поддерживающий распределение номерных диапазонов через ZooKeeper.ModCycle
(алгоритм модульного цикла)guava
[30.0-jre] -> [29.0-jre] (соответствие с ShardingSphere)StringIntervalShardingAlgorithm
для поддержки типов данных дат в строковом форматеSmartIntervalShardingAlgorithm
для поддержки типов данных дат в строковом форматеSnowflakeFriendlyIntervalShardingAlgorithm
для поддержки периодического алгоритма шардинга SnowflakeFriendId
AbstractIntervalShardingAlgorithm.convertRangeShardingValue
IntervalTimeline.sharding
выбрасывает исключение при превышении точной границы значения шардинга вместо возврата null
io.codearte.nexus-staging
-> io.github.gradle-nexus.publish-plugin
org.openjdk.jmh
-> 1.33ExactCollection
(точное множество), которое предназначено для сценариев использования алгоритмов шардинга Interval и Mod, где количество узлов можно предварительно определить. Это повышает производительность и эффективность использования памяти.CosIdModShardingAlgorithm
, чтобы переопределить алгоритм шардинга по модулю и повысить производительность.ModShardingAlgorithmBenchmark
, сравнение CosIdModShardingAlgorithm
и org.apache.shardingsphere.sharding.algorithm.sharding.mod.ModShardingAlgorithm
PreciseShardingValue | RangeShardingValue |
---|---|
![]() |
![]() |