MUID (Magic Unique Identifier)
Библиотека для работы с уникальными идентификаторами MUID.
Почему MUID?
- Всегда уникален даже в распределённой системе. Позволяет генерировать MUID на клиенте без обращения к серверу.
- Монотонен. TS метка и счётчик позволяют оптимально добавлять новые записи в B-Tree.
- Подходит для распределённых и высоконагруженных систем. Каждый процесс получает свой отпечаток. Счётчик позволяет генерировать до 8192 уникальных 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
Сравнение
from datetime import datetime
from muid import MagicID
muid = MagicID()
muid == str(muid) # True
muid == muid.raw # True
muid == None # False
MagicID() > muid # True
MagicID.from_datetime(datetime(2026, 3, 2)) < muid # True
muid < str(muid) # TypeError: упорядочивание только между MagicID
Ключом dict/set служит только сам MagicID: по str(muid) или muid.raw запись не найдётся, используйте MagicID(key).
Принцип работы
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.
Metadata
Release files for magicid 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| magicid-1.3.0.tar.gz | 11.9 kB | Without provenance | Details for magicid-1.3.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| magicid-1.3.0-py3-none-any.whl | Python 3 | none | any | Details for magicid-1.3.0-py3-none-any.whl |
Total release size: 22.9 kB
Release files / magicid-1.3.0.tar.gz
| Download URL | magicid-1.3.0.tar.gz |
|---|---|
| Size | 11.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f4d935dfc8ca7a776df612232fcbc3a0cb4af0d8f2d954ac32b0ffc851373eaf
|
|
BLAKE2b-256 checksum How to use checksums |
00c17a7e82cff021e0008c1fc829ca05401b6a3e5ca06aaf9df1b3b1ca71a85c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / magicid-1.3.0-py3-none-any.whl
| Download URL | magicid-1.3.0-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
02ec3a24e68a51149dea7b2f7829c7bdaa00b903828ee5c8f6a5cda1c1d4cd40
|
|
BLAKE2b-256 checksum How to use checksums |
60490eef90539747a372d1913d6f13d9aa7d8295eae3b0feebf27c4b116131c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Security for magicid 1.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.