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
  • abstract filesystem support (fsspec)
    • local
    • HDFS
    • S3

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:

from metatree import Metatree

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

import uuid
import pickle

from pathlib import Path

for i in range(1, 4):
    awful_uuid = uuid.uuid4()
    trained = Path("/tmp/my-model-repository/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

with WebHDFS

To use WebHDFS, set the root path to the WebHDFS URL and provide hdfs args:

from metatreedb import Metatree

metatree = Metatree(
    "webhdfs:///tmp/my-model-repository",
    ("model", "version"),
    host="localhost",
    port=9870,
    user="hadoop",
)

with S3

To use S3, set the root path to the S3 bucket URL and provide s3fs args:

from metatreedb import Metatree

metatree = Metatree(
    "s3://your-awesome-bucket/tmp/my-model-repository",
    ("model", "version"),
    endpoint_url="http://localhost:5000",
    key="testing",
    secret="testing",
)

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.2.2.tar.gz (8.9 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.2.2-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for metatreedb-0.2.2.tar.gz
Algorithm Hash digest
SHA256 c4fcf91822770b3ab6d66c5a4c76d56dfbb877a24a6ee6e88f89bae66b11edd7
MD5 5ed7781a4011bbc57636c89acc43a074
BLAKE2b-256 861c3ff12c9f1b7c998b210bb9a5b0008ccdc96b3d7ae6a18fa62dbbe56f33bd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: metatreedb-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 9.4 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.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 933d5edd04bb9d1e4f9f76c351949bf0cd2d6e77ca4f2252714b6d19d8a09300
MD5 44f3eba8d2ffd021909594e6bb035873
BLAKE2b-256 a855895b2f189e95b84bd1fbaab0bd0d5bf8cc13c6336ebd4429786fefb17b4d

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