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.0.tar.gz (10.9 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.0-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: magicid-1.2.0.tar.gz
  • Upload date:
  • Size: 10.9 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.0.tar.gz
Algorithm Hash digest
SHA256 9857dcb9cf9f793f0accc9cee8f3710963adb921f2391e334ff8d504dd80830d
MD5 e04bb75545632d2584abe65aa329f57a
BLAKE2b-256 051459ec1cac5a9a90ddc98c96a37c90397540f68cd2d1b85ba9a4d981a17861

See more details on using hashes here.

File details

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

File metadata

  • Download URL: magicid-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.5 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 324f8407ee98682133842b20a8256a520e54cac69b64686d7f2ab3d85700e33e
MD5 d05b0ac57a3f029bb6b4c6a82e42f766
BLAKE2b-256 bf8244cab5b790d68d72d4c5a77ae0c43e8c66509b7e6a10e9177dbac2cc34ec

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