Skip to main content

MUID (Magic Unique Identifier) library

Project description

MUID (Magic Unique Identifier)

CI PyPI version Python 3.10+ License

Библиотека для работы с уникальными идентификаторами MUID.

Почему MUID?

  1. Всегда уникален даже в распределённой системе. Позволяет генерировать MUID на клиенте без обращения к серверу.
  2. Монотонен. TS метка и счётчик позволяют оптимально добавлять новые записи в B-Tree.
  3. Подходит для распределённых и высоконагруженных систем. Каждый процесс получает свой отпечаток. Счётчик позволяет генерировать минимум 33554432 уникальных MUID в рамках одной миллисекунды.
  4. Мало предсказуем, даже зная 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

magicid-1.2.1.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

magicid-1.2.1-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file magicid-1.2.1.tar.gz.

File metadata

  • Download URL: magicid-1.2.1.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

Hashes for magicid-1.2.1.tar.gz
Algorithm Hash digest
SHA256 e4861dd033bacc8c28238ec9074108fd75d8ff265d5180457350a0bf5828d0c3
MD5 99159059184c2e187191223b3e6a4c52
BLAKE2b-256 e8f705384da370b66278e9d365044358d54ffdfa286972c23bf73a53141100b6

See more details on using hashes here.

File details

Details for the file magicid-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: magicid-1.2.1-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

Hashes for magicid-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9dbe9afeeed0f85656ed54142081e8352151074631f121f0d7c9b7932a5f7c92
MD5 b1ccca5512ad3134f87c8eae93508f87
BLAKE2b-256 9f2bf72eedb6bfe5548367bc7fc71bebc06fbd1b75586398f51946ede9d453db

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page