The FlatDB

FlatDB is a key based storage engine. FlatDB is suitable for write and retrieve small sets of data that can persist between the application execution cycle.

FlatDB was designed as a lightweight method for storing reduced quantity of data. For large scale data storage that requires advanced search capabilities it is recommended to use a RDBMS like MariaDB or PostgreSQL.

Drivers

The FlatDB core library contains two base drivers:

  • Serialize driver
  • JSON driver

Serialize Driver

Storage the data into a file using the native PHP serialization format.

The class for this driver is: FlatDB_Serialize.

JSON Driver

Storage the data into a file using JSON format.

The class for this driver is: FlatDB_JSON.

How to use FlatDB

Instance and driver attachment

When a new instance is created, the driver object should be attached using depency injection.

Examples:

    // FlatDB instance using the JSON driver (Singleton)
    FlatDB::instance()->attach(new FlatDB_JSON('database.json'));

    // FlatDB instance using the Serialization driver
    $flatdb = new FlatDB();
    $flatdb->attach(new FlatDB_Serialize('database.ser');

It is possible to instantiate different FlatDB instances. In order to achieve that one unique identifier should be passed to the instance method. Example:

    // First instance
    FlatDB::instance('db1')->attach(new FlatDB_Serialize('database1.ser'));

    // Second instance
    FlatDB::instance('db2')->attach(new FlatDB_Serialize('database2.ser'));

    // Third instance
    FlatDB::instance('db3')->attach(new FlatDB_JSON('database3.json'));

CRUD

Creation

    // Write data in memory
    FlatDB::instance()->write(['level1' => ['level2' => 'foo']]);

    // Save to disk 
    FlatDB::instance()->flush();

Read

    // Read everything
    $data = FlatDB::instance()->read();

    // Write changes to persistent storage
    $data = FlatDB::instance()->read('level1.level2');

Update and Delete

Update and Delete is basically overwrite the array content. Example:

    // Read everything
    $data = FlatDB::instance()->read();

    // Update
    $data['level1']['level2'] = 'bar';

    FlatDB::instance()->write($data);

    // Delete
    unset($data['level1']['level2'];

    FlatDB::instance()->write($data);

    // Write changes to persistent storage
    FlatDB::instance->flush();

Driver detachment

It possible to detach a driver and replace it with another one. Example:

    // Attach a driver
    FlatDB::instance()->attach(new FlatDB_Serialize('database.ser'));

    // Detach the driver (Note that data in memory is deleted)
    FlatDB::instance()->detach();

    // Attach a new driver
    FlatDB::instance()->attach(new FlatDB_JSON('database.ser'));