MUID (Magic Unique Identifier) library
Project description
MUID (Magic Unique Identifier)
Библиотека для работы с уникальными идентификаторами MUID.
Почему MUID?
- Всегда уникален даже в распределённой системе. Позволяет генерировать MUID на клиенте без обращения к серверу.
- Монотонен. TS метка и счётчик позволяют оптимально добавлять новые записи в B-Tree.
- Подходит для распределённых и высоконагруженных систем. Каждый процесс получает свой отпечаток. Счётчик позволяет генерировать минимум 33554432 уникальных MUID в рамках одной миллисекунды.
- Мало предсказуем, даже зная
tsиproc_fnматематически сложно угадать следующий MUID за счётsecure rand. ВАЖНО: размер и стойкостьsecure randможет меняться в будущих версиях. Для реальной энтропии требуется от 36 битов, я взял 40 бит.
Быстрый старт
Установите пакет
pip install magicid
И создайте первый MUID
from muid import MagicID
muid = MagicID()
print(muid)
# 0001-8EA1C900-0F6F8410-1E7C1CA4
Или через консоль
muid new -n 5
#0002-977F0200-0300034F-EA9CE3FA
#0002-977F0200-050003FC-97B34993
#0002-977F0200-0700034B-FEAB9541
#0002-977F0200-090003A4-D18816C8
#0002-977F0200-0B00034D-FF2FD3F8
Использование в Pydantic
from muid import MagicID
from pydantic import BaseModel, Field
class User(BaseModel):
id: MagicID = Field(default_factory=MagicID)
user = User()
print(user.id)
# 0001-8EA1C900-0F6F8410-1E7C1CA4
json_user = {"id": "0001-8EA1C900-0F6F8410-1E7C1CA4"}
user = User.model_validate(json_user)
print(user.id)
# 0001-8EA1C900-0F6F8410-1E7C1CA4
Принцип работы
MUID состоит из 4 частей: [ts ms 42 bits]-[counter 13 bits]-[proc_fn 17 bits]-[secure rand 40 bits]
Всего 14 байт, в HEX представлении 31 символ, включая дефисы.
При инициализации пакета генерируется proc_fn и используется до следующей инициализации.
При переполнении counter ждёт до следующей миллисекунды (ref. Snowflake ID)
Лицензия
Проект инициирован, разработан и поддерживается Aleksandr @magicaleks. Распространяется на основании лицензии Apache-2.0.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file magicid-1.2.2.tar.gz.
File metadata
- Download URL: magicid-1.2.2.tar.gz
- Upload date:
- Size: 11.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7567b7ed4ef3ee7b740b521bf99acb28c014a326a1eba08bf45be3e3e608e8a0
|
|
| MD5 |
a7669240edf021832a792f9276746a24
|
|
| BLAKE2b-256 |
fbce26ebcf10803a6bfc4ba719aa334646e8c030c67bc0a9ddd3aea0cfab52ab
|
File details
Details for the file magicid-1.2.2-py3-none-any.whl.
File metadata
- Download URL: magicid-1.2.2-py3-none-any.whl
- Upload date:
- Size: 10.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42a6c429cda60786a1b5cd29af0befc25c0824ad22cd1ea3052c05009903c23e
|
|
| MD5 |
0da93680918cdb39486c920dcc706d12
|
|
| BLAKE2b-256 |
0ce1095eea40986a8e3112757ef6f75e264f128956745e47d7de9d1501c84441
|