Immutable NoSQL database in a plain file
Go to file
Andros Fenollosa 6312294854 Update docs
2022-11-08 23:11:20 +01:00
README.md Update docs 2022-11-08 23:11:20 +01:00

Immutable NoSQL database that works on a single plain text file

Features

  • Information is never lost. Even if you make updates or deletions, you will be able to recover any information at any time.
  • There are no restrictions on the data structure or columns, since dictionaries are used without limitations on nesting. Similar to MongoDB Documents.
  • All the information is stored in a JSON file.
  • Extremely fastb since it has no queue or locking limitations.
  • Minimalistic to implement and use.

Advantages of using an immutable database

  • High level of consistency and accuracy of data, such as a hospital patient's chronology or banking data. It cannot be modified once it has been aggregated.
  • They simplify the process of backing up and restoring data, because you can always revert to the original version of the data if necessary.
  • Very secure, modifying existing data will be detected and rejected.

Install

pip3 install --user advance-touch

Docs

All documentation can be read as a sequential tutorial.

Step1: Start

To load the database you must import reliable_db and start it.

import fiable_db

fiable_db.start()

It will create a file named fiable_db.json in the current directory. If you want to change the name of the file, you can do it by passing the name as a parameter.

fiable_db.start("my_db.json")

If the file already exists, it will be loaded. Nothing is deleted here!

Step 2: Agregation

Only one:

fiable_db.add({"name": "Miguel", "age": 41, "height": 189})
// {"id": 1, "rev": 1, "data": {"name": "Miguel", "age": 41, "height": 189}}

Various:

fiable_db.add(
    [
        {"name": "Noelia", "age": 34, "height": 165},
        {"name": "Juan", "age": 41, "height": 187},
        {"name": "Valentina", "age": 12, "height": 142},
    ]
)
//  [
//      {"id": 2, "rev": 1, "data": {{"name": "Noelia", "age": 34, "height": 165}},
//      {"id": 3, "rev": 1, "data": {{"name": "Juan", "age": 41, "height": 187}},
//      {"id": 4, "rev": 1, "data": {{"name": "Valentina", "age": 83, "height": 172}},
//  ]

Step 3: Update

Update a key:

fiable_db.update(4, {"age": 21})
// {"id": 4, "rev": 2, "data": {{"name": "Valentina", "age": 21, "height": 172}}

Add new key:

fiable_db.update(4, {"is_active": True})
// {"id": 4, "rev": 3, "data": {{"name": "Valentina", "age": 21, "height": 172, "is_active": True}}

Delete key:

fiable_db.update(4, {"height": None})
// {"id": 4, "rev": 4, "data": {{"name": "Valentina", "age": 21, "is_active": True}}

Forcing new structure.

fiable_db.update(4, {"name": "Javier", "email": "foo@example.com"}, force=True)
// {"id": 4, "rev": 5, "data": {{"name": "Javier", "email": "foo@example.com"}}

Step 4: Delete

fiable_db.delete(4)
// {"id": 4, "rev": 6, "data": None}

Step 5: Find one

Search by id.

fiable_db.find_one(id=2)
// {"id": 2, "rev": 1, "data": {{"name": "Noelia", "age": 34, "height": 165}}

Search by value.

fiable_db.find_one(data={"name": "Noelia"})
// {"id": 2, "rev": 1, "data": {{"name": "Noelia", "age": 34, "height": 165}}

Search by several values.

fiable_db.find_one(data={"name": "Noelia", "age": 34})
// {"id": 2, "rev": 1, "data": {{"name": "Noelia", "age": 34, "height": 165}}

No results.

fiable_db.find_one(data={"name": "Noelia", "is_active": False})
// None

Step 6: Find all

fiable_db.find_all(data={"age": 41})
// [
//      {"id": 1, "rev": 1, "data": {{"name": "Miguel", "age": 41, "height": 189}},
//      {"id": 3, "rev": 1, "data": {{"name": "Juan", "age": 41, "height": 187}},
// ]

Step 7: See previous revisions

Previous version to be deleted.

fiable_db.find_one(id=4, rev=3)
// {"id": 4, "rev": 3, "data": {{"name": "Valentina", "age": 21, "height": 172, "is_active": True}}

You can also use negative numbers.

fiable_db.find_one(id=4, rev=-1)
// {"id": 4, "rev": 3, "data": {{"name": "Valentina", "age": 21, "height": 172, "is_active": True}}

fiable_db.find_one(id=4, rev=-2)
// {"id": 4, "rev": 2, "data": {{"name": "Valentina", "age": 21, "height": 172}}

Thanks to the power of 🐍 Python 🐍