최근에 id 생성 관려해서 정보를 찾아보던중 TSID라는 것을 알게되었다
twitter에서 개발한 snowflake id generator가 있다
분산처리환경에서 id를 생성하기 위해 만든 id 생성기인데 time값을 기반으로한다
time값을 기반으로해서 시간순 정렬도 되고, +순차적인 정보라서 값이 겹칠일이 매우 적다.
time값을 기반으로한 64비트 id generator인데
처음 1비트는 0
다음 41비트는 타임 스탬프값,
다음 10비트는 machine과 관련된 정보(node id 같은것들?)
다음 12비트는 같은 milisecond에 받은 순차적인정보로 이루어진다.
java에서 snowflake를 구현한 라이브러리가 없는지 찾아봤는데 있긴한데 스타수가 적기도하고 마지막 업데이트가 4년전이라 쓰기도 약간 부담스러워 검색을 해보니 TSID아이디 generator라는걸 찾았다
TSID는 snowflake_id와 ulid에서 아이디어를 얻어 만들었다고 한다.
snowflake와 마찬가지로 처음 42비트는 시간 기반 값, 이후 22비트는 랜덤값(node id+counter)라고 한다.
개인적으로 UUID보다 TSID가 퍼포먼스가 더 낫고, 다양한 상황에서 더 좋을거라 생각된다
단, star 수가 적고 다양한 환경에서 테스트가 안된점이 아쉽지만 시간이 해결해 줄 문제라고 생각한다
UUID를 잘 사용하는법
https://www.percona.com/blog/uuids-are-popular-but-bad-for-performance-lets-discuss/
https://www.percona.com/blog/store-uuid-optimized-way/
https://vladmihalcea.com/uuid-database-primary-key/
https://discord.com/developers/docs/reference#snowflakes
https://github.com/callicoder/java-snowflake
https://github.com/f4b6a3/tsid-creator
https://en.wikipedia.org/wiki/Snowflake_ID|
#Concept