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.2.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.2-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

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

Hashes for magicid-1.2.2.tar.gz
Algorithm Hash digest
SHA256 7567b7ed4ef3ee7b740b521bf99acb28c014a326a1eba08bf45be3e3e608e8a0
MD5 a7669240edf021832a792f9276746a24
BLAKE2b-256 fbce26ebcf10803a6bfc4ba719aa334646e8c030c67bc0a9ddd3aea0cfab52ab

See more details on using hashes here.

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

Hashes for magicid-1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 42a6c429cda60786a1b5cd29af0befc25c0824ad22cd1ea3052c05009903c23e
MD5 0da93680918cdb39486c920dcc706d12
BLAKE2b-256 0ce1095eea40986a8e3112757ef6f75e264f128956745e47d7de9d1501c84441

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