Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Special UUIDv7 function for microservices #767

Open
sergeyprokhorenko opened this issue Aug 24, 2024 · 1 comment
Open

Special UUIDv7 function for microservices #767

sergeyprokhorenko opened this issue Aug 24, 2024 · 1 comment

Comments

@sergeyprokhorenko
Copy link

sergeyprokhorenko commented Aug 24, 2024

Hi @KodrAus

Although fault tolerance requires that each microservice writes to its own database tables, in practice this requirement is often violated.

The implementation of UUIDv7 for PostgreSQL had to switch from Method 1 to Method 3 (Increased Clock Precision with 12 bits sub-millisecond timestamp fraction) to synchronize the UUIDv7s generated by different microservices for the same database table. This turned out to be simpler than the autoincrement-like analogue. See the C implementation v27-0001-Implement-UUID-v7.patch of Method 3 at the page as a reference. The entire timestamp acts as a counter in rare case when more than about 4 identifiers per microsecond are generated.

This implementation also added the ability to offset the timestamp by a specified interval to hide the record creation time for information security. If offset would cause the timestamp to be outside the allowed range, it should not be applied.

It would be nice to add such a special UUIDv7 function for microservices.

@KodrAus
Copy link
Member

KodrAus commented Aug 31, 2024

Thanks for the note @sergeyprokhorenko! When we did the last round of improvements to the V7 generation I tried to make sure our APIs would be able to support these alternative methods.

This library uses a pluggable interface to calculate the precision and counter for the timestamp that’s input at nanosecond precision. Implementations of that interface also have the opportunity to adjust the timestamp arbitrarily. I think these are the pieces we need to offer an alternative implementation that uses sub-millisecond precision in the counter and can offset the timestamp by some interval.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants