Skip to main content

Simple key-value database for my small projects!

Project description

nonbloat-db

Support Ukraine

Build Status Documentation Build Status Code style: black Python support versions badge (from pypi)

Simple key-value database for my small projects!

The idea is to have a dead simple database, which doesn't require spinning up a server (like Redis), is not underwhelming with features (like SQLite or SQL in general), data inside can be easily manually reviewed and modified and it doesn't corrupt (if you just dump JSON into file using json.dump, if the program was forced to stop during write (e.g. because of power outage), the data will be corrupted).

The purpose of this project is to serve as a database library for my small projects. So obviously this solution doesn't scale to thousands of users, and it was never intended to. Use right tool for right job.

Also, do note, that everything is async. There is no synchronous version, because all of my projects are generally async. I maybe will add a synchronous wrapper, but I don't promise.

How does it work?

It is just a really simple key-value storage:

import asyncio
from nbdb.storage import Storage


async def main():
    # you need to provide a path to database
    my_db = await Storage.init("data/db.json")
    await my_db.set("abc", 123)

    value = await my_db.get("abc")
    print(value)  # 123

    await my_db.write()


if __name__ == "__main__":
    asyncio.run(main())

[!NOTE] Everything in this library is asynchronous, so you have to call it from async functions.

In the background, a lot of things are happening. For example, when you call .set, the db writes the operation to special AOF (Append Only File; this is what Redis uses to achieve data persistence).

And on every write, library renames db.json to db.json.temp and then writes to db.json new data. This is done to not corrupt data in case of power outage or force shutdown. If library during initial read finds a .temp file next to database, it will output a warning and read from temp file.

Installing

It is not yet published to PyPI, so good luck.

pip install nonbloat-db

Installing for local developing

git clone https://github.com/PerchunPak/nonbloat-db.git
cd nonbloat-db

Installing poetry

Next we need install poetry with recommended way.

If you use Linux, use command:

curl -sSL https://install.python-poetry.org | python -

If you use Windows, open PowerShell with admin privileges and use:

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

Installing dependencies

poetry install

If something is not clear

You can always write me!

Thanks

This project was generated with python-template.

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

nonbloat_db-0.1.2.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

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

nonbloat_db-0.1.2-py3-none-any.whl (17.0 kB view details)

Uploaded Python 3

File details

Details for the file nonbloat_db-0.1.2.tar.gz.

File metadata

  • Download URL: nonbloat_db-0.1.2.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for nonbloat_db-0.1.2.tar.gz
Algorithm Hash digest
SHA256 fa9048c2ed5fe20c1da8443e2f02bcb3a574e4888a7c85f1720ad5c6d5899e8d
MD5 c7260732ea78ba2c691c95e100773a20
BLAKE2b-256 1a1497e3928e5eec67c3ea09a97dbe6773babf2d127716260a279f4f9054eee7

See more details on using hashes here.

Provenance

The following attestation bundles were made for nonbloat_db-0.1.2.tar.gz:

Publisher: deploy-pypi.yml on PerchunPak/nonbloat-db

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nonbloat_db-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: nonbloat_db-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 17.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for nonbloat_db-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 789a7a1e0d6bdb56d41ba2b5f8e4c7ab9d4051e244d5adba97e4f694cd3b3cfe
MD5 c201631cc801de196b6014ee0ed6501c
BLAKE2b-256 a360a20330783917b1556c6bc10185bdaf70b372f82df5492a7b5b7aa6f89d6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for nonbloat_db-0.1.2-py3-none-any.whl:

Publisher: deploy-pypi.yml on PerchunPak/nonbloat-db

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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