Add documentation
This commit is contained in:
parent
984d12479d
commit
1cb3d8ddc0
35
README.md
35
README.md
@ -1,11 +1,13 @@
|
|||||||
# mnesia_rocksdb
|
# mnesia_rocksdb
|
||||||
A RocksDb backend for Mnesia
|
|
||||||
|
A RocksDB backend for Mnesia.
|
||||||
|
|
||||||
This permits Erlang/OTP applications to use RocksDB as a backend for
|
This permits Erlang/OTP applications to use RocksDB as a backend for
|
||||||
mnesia tables. It is based on Klarna's `mnesia_eleveldb`.
|
mnesia tables. It is based on Klarna's `mnesia_eleveldb`.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
- rocksdb
|
|
||||||
|
- rocksdb (included as dependency)
|
||||||
- Erlang/OTP 20.0 or newer (https://github.com/erlang/otp)
|
- Erlang/OTP 20.0 or newer (https://github.com/erlang/otp)
|
||||||
|
|
||||||
## Getting started
|
## Getting started
|
||||||
@ -76,13 +78,16 @@ Contributions are welcome.
|
|||||||
|
|
||||||
The RocksDB update operations return either `ok` or `{error, any()}`.
|
The RocksDB update operations return either `ok` or `{error, any()}`.
|
||||||
Since the actual updates are performed after the 'point-of-no-return',
|
Since the actual updates are performed after the 'point-of-no-return',
|
||||||
returning an `error` result will cause mnesia to behave unpredictably, since
|
returning an `error` result will cause mnesia to behave unpredictably,
|
||||||
the operations are expected to simply work.
|
since the operations are expected to simply work.
|
||||||
|
|
||||||
|
### Option 1: `on_write_error`
|
||||||
|
|
||||||
An `on_write_error` option can be provided, per-table, in the `rocksdb_opts`
|
An `on_write_error` option can be provided, per-table, in the `rocksdb_opts`
|
||||||
user property (see [Customization](#customization) above). Supported values indicate at which level an error
|
user property (see [Customization](#customization) above).
|
||||||
indication should be reported. Mnesia may save reported events in RAM, and may
|
Supported values indicate at which level an error indication should be reported.
|
||||||
also print them, depending on the debug level (controlled with `mnesia:set_debug_level/1`).
|
Mnesia may save reported events in RAM, and may also print them,
|
||||||
|
depending on the debug level (controlled with `mnesia:set_debug_level/1`).
|
||||||
|
|
||||||
Mnesia debug levels are, in increasing detail, `none | verbose | debug | trace`
|
Mnesia debug levels are, in increasing detail, `none | verbose | debug | trace`
|
||||||
The supported values for `on_write_error` are:
|
The supported values for `on_write_error` are:
|
||||||
@ -95,6 +100,22 @@ The supported values for `on_write_error` are:
|
|||||||
| error | always | always | exception |
|
| error | always | always | exception |
|
||||||
| fatal | always | always | core dump |
|
| fatal | always | always | core dump |
|
||||||
|
|
||||||
|
### Option 2: `on_write_error_store`
|
||||||
|
|
||||||
|
An `on_write_error_store` option can be provided, per-table, in the `rocksdb_opts`
|
||||||
|
user property (see [Customization](#customization) above).
|
||||||
|
When set, the backend will use the value of the option as the name for an ETS table
|
||||||
|
which is used as storage for runtime write errors. The table must be set up outside
|
||||||
|
of the backend by the clients themselves.
|
||||||
|
|
||||||
|
Entries to the table are in the form of a tuple `{{Table, Key}, Error, InsertedAt}`
|
||||||
|
where `Table` refers to the Mnesia table name, `Key` is the primary key being used by Mnesia,
|
||||||
|
`Error` is the error the backend encounteredA and `InsertedAt` refers to the time
|
||||||
|
the error was encounterd as system time in milliseconds.
|
||||||
|
|
||||||
|
The backend will only insert entries and otherwise not managed the table. Thus, clients
|
||||||
|
are expected to clean up the table during runtime to prevent memory leakage.
|
||||||
|
|
||||||
## Caveats
|
## Caveats
|
||||||
|
|
||||||
Avoid placing `bag` tables in RocksDB. Although they work, each write
|
Avoid placing `bag` tables in RocksDB. Although they work, each write
|
||||||
|
@ -52,7 +52,7 @@ tab_name(Type, Level, MaintainSz) ->
|
|||||||
user_props(Level, MaintainSz) ->
|
user_props(Level, MaintainSz) ->
|
||||||
[{maintain_sz, MaintainSz},
|
[{maintain_sz, MaintainSz},
|
||||||
{rocksdb_opts, [ {on_write_error, Level}
|
{rocksdb_opts, [ {on_write_error, Level}
|
||||||
, {on_write_error_store, ?MODULE} ]}].
|
, {on_write_error_store, ?MODULE} ]}].
|
||||||
|
|
||||||
start_mnesia() ->
|
start_mnesia() ->
|
||||||
mnesia_rocksdb_tlib:start_mnesia(reset),
|
mnesia_rocksdb_tlib:start_mnesia(reset),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user