Skip to main content

Metatree is a DBMS that uses the filesystem itself as a tree-structured database.

Project description

metatreedb

Metatree is a DBMS that uses the filesystem itself to organize and manage data in a tree-structured format.

In metadata.json in each tree node, you can manage information about child nodes, which can also be used for searching.

Features

  • metadata-based index
  • db-level concurrency control

Installation

pip install metatreedb

Quick Start

Here's an example of using Metatree as a model repository by setting up a database with (model_name, version,) as identifiers:

metatree = Metatree(
    "/tmp/my-model-repository",
    (
        "model",
        "version",
    ),
    locking_enabled=True,
)

for i in range(1, 4):
    awful_uuid = uuid.uuid4()
    trained = Path("/tmp/metatree-files/trained.pkl")
    with open(trained, "wb") as f:
        pickle.dump(awful_uuid, f)

    metatree.put(f"my-awful-model/v{i}", trained)

This will create files and directories in your filesystem as shown:

 tree /tmp/my-model-repository
/tmp/my-model-repository
├── metadata.json
└── my-awful-model
    ├── metadata.json
    ├── v1
       ├── metadata.json
       └── trained.pkl
    ├── v2
       ├── metadata.json
       └── trained.pkl
    └── v3
        ├── metadata.json
        └── trained.pkl

To add metadata information, use find and update:

metatree.find("my-awful-model")
metatree.update(active="v2")
for i in range(1, 4):
    metatree.find(f"my-awful-model/v{i}").update(model_file="trained.pkl")

This will update the metadata.json files as follows:

 cat /tmp/my-model-repository/my-awful-model/metadata.json
{"children": ["v1", "v2", "v3"], "active": "v2"} cat /tmp/my-model-repository/my-awful-model/v*/metadata.json
{"model_file": "trained.pkl"}
{"model_file": "trained.pkl"}
{"model_file": "trained.pkl"}

You can use this search index to find files. By enclosing the keys from metadata.json within angle brackets <> and substituting them in location, you can perform searches as follows:

metatree.find("my-awful-model/<active>")
print(metatree.location)
# This returns `/tmp/my-model-repository/my-awful-model/v2

file = metatree.get("my-awful-model/<active>/<model_file>")
print(file)
# The given path translates to `my-awful-model/v2/trained.pkl`,
# and it returns generator object

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

metatreedb-0.1.5.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

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

metatreedb-0.1.5-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file metatreedb-0.1.5.tar.gz.

File metadata

  • Download URL: metatreedb-0.1.5.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.19

File hashes

Hashes for metatreedb-0.1.5.tar.gz
Algorithm Hash digest
SHA256 c1191a3f4397bca328b75ab22e4ed6373c2d9fb438bfd07ddd961a67563e6072
MD5 ba1254e0475b0449446f5ce05cd2d0ad
BLAKE2b-256 97d3f52ac06bd27a5abfb13158fa749d153745378a2a821dfefc55ca73fe28ca

See more details on using hashes here.

File details

Details for the file metatreedb-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: metatreedb-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.19

File hashes

Hashes for metatreedb-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 1179f010a5cceb7d26389e799479800b2511d66c97e334204df1abc1dd15ba00
MD5 e8bb799160ac881285047b6e2cf60707
BLAKE2b-256 3eb89495692473e137e2ef57b068983287e1cea97175df390681e76088c57058

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