# Module mnesia_rocksdb #
* [Description](#description)
* [Data Types](#types)
* [Function Index](#index)
* [Function Details](#functions)
rocksdb storage backend for Mnesia.
__Behaviours:__ [`gen_server`](gen_server.md), [`mnesia_backend_type`](mnesia_backend_type.md).
## Description ##
This module implements a mnesia backend callback plugin.
It's specifically documented to try to explain the workings of
backend plugins.
## Data Types ##
### alias() ###
alias() = atom()
### data_tab() ###
data_tab() = atom()
### error() ###
error() = {error, any()}
### index_info() ###
index_info() = {index_pos(), index_type()}
### index_pos() ###
index_pos() = integer() | {atom()}
### index_tab() ###
index_tab() = {data_tab(), index, index_info()}
### index_type() ###
index_type() = ordered
### retainer_name() ###
retainer_name() = any()
### retainer_tab() ###
retainer_tab() = {data_tab(), retainer, retainer_name()}
### table() ###
table() = data_tab() | index_tab() | retainer_tab()
### table_type() ###
table_type() = set | ordered_set | bag
## Function Index ##
## Function Details ##
### add_aliases/1 ###
`add_aliases(Aliases) -> any()`
### check_definition/4 ###
`check_definition(Alias, Tab, Nodes, Props) -> any()`
### close_table/2 ###
`close_table(Alias, Tab) -> any()`
### code_change/3 ###
`code_change(FromVsn, St, Extra) -> any()`
### create_schema/1 ###
`create_schema(Nodes) -> any()`
### create_schema/2 ###
`create_schema(Nodes, Aliases) -> any()`
### create_table/3 ###
`create_table(Alias, Tab, Props) -> any()`
### decode_key/1 ###
`decode_key(Key) -> any()`
### decode_key/2 ###
`decode_key(Key, Metadata) -> any()`
### decode_val/1 ###
`decode_val(Val) -> any()`
### decode_val/3 ###
`decode_val(Val, Key, Metadata) -> any()`
### default_alias/0 ###
`default_alias() -> any()`
### delete/3 ###
`delete(Alias, Tab, Key) -> any()`
### delete_table/2 ###
`delete_table(Alias, Tab) -> any()`
### encode_key/1 ###
`encode_key(Key) -> any()`
### encode_key/2 ###
`encode_key(Key, Metadata) -> any()`
### encode_val/1 ###
`encode_val(Val) -> any()`
### encode_val/2 ###
`encode_val(Val, Metadata) -> any()`
### first/2 ###
`first(Alias, Tab) -> any()`
### fixtable/3 ###
`fixtable(Alias, Tab, Bool) -> any()`
### handle_call/3 ###
`handle_call(X1, From, St) -> any()`
### handle_cast/2 ###
`handle_cast(X1, St) -> any()`
### handle_info/2 ###
`handle_info(EXIT, St) -> any()`
### index_is_consistent/3 ###
`index_is_consistent(Alias, X2, Bool) -> any()`
### info/3 ###
`info(Alias, Tab, Item) -> any()`
### init/1 ###
`init(X1) -> any()`
### init_backend/0 ###
`init_backend() -> any()`
Called by mnesia_schema in order to intialize the backend
This is called when the backend is registered with the first alias, or ...
See OTP issue #425 (16 Feb 2021). This callback is supposed to be called
before first use of the backend, but unfortunately, it is only called at
mnesia startup and when a backend module is registered MORE THAN ONCE.
This means we need to handle this function being called multiple times.
The bug has been fixed as of OTP 24.0-rc3
If processes need to be started, this can be done using
`mnesia_ext_sup:start_proc(Name, Mod, F, Args [, Opts])`
where Opts are parameters for the supervised child:
* `restart` (default: `transient`)
* `shutdown` (default: `120000`)
* `type` (default: `worker`)
* `modules` (default: `[Mod]`)
### insert/3 ###
`insert(Alias, Tab, Obj) -> any()`
### is_index_consistent/2 ###
`is_index_consistent(Alias, X2) -> any()`
### ix_listvals/3 ###
`ix_listvals(Tab, Pos, Obj) -> any()`
### ix_prefixes/3 ###
`ix_prefixes(Tab, Pos, Obj) -> any()`
### last/2 ###
`last(Alias, Tab) -> any()`
### load_table/4 ###
`load_table(Alias, Tab, LoadReason, Opts) -> any()`
### lookup/3 ###
`lookup(Alias, Tab, Key) -> any()`
### match_delete/3 ###
`match_delete(Alias, Tab, Pat) -> any()`
### next/3 ###
`next(Alias, Tab, Key) -> any()`
### prev/3 ###
`prev(Alias, Tab, Key) -> any()`
### real_suffixes/0 ###
`real_suffixes() -> any()`
### receive_data/5 ###
`receive_data(Data, Alias, Tab, Sender, State) -> any()`
### receive_done/4 ###
`receive_done(Alias, Tab, Sender, State) -> any()`
### receiver_first_message/4 ###
`receiver_first_message(Pid, Msg, Alias, Tab) -> any()`
### register/0 ###
register() -> {ok, alias()} | {error, term()}
Equivalent to [`register(rocksdb_copies)`](#register-1).
### register/1 ###
register(Alias::alias()) -> {ok, alias()} | error()
Convenience function for registering a mnesia_rocksdb backend plugin
The function used to register a plugin is `mnesia_schema:add_backend_type(Alias, Module)`
where `Module` implements a backend_type behavior. `Alias` is an atom, and is used
in the same way as `ram_copies` etc. The default alias is `rocksdb_copies`.
### remove_aliases/1 ###
`remove_aliases(Aliases) -> any()`
### repair_continuation/2 ###
`repair_continuation(Cont, Ms) -> any()`
### select/1 ###
`select(Cont) -> any()`
### select/3 ###
`select(Alias, Tab, Ms) -> any()`
### select/4 ###
`select(Alias, IxTab, Ms, Limit) -> any()`
### semantics/2 ###
`semantics(Alias, X2) -> any()`
### sender_handle_info/5 ###
`sender_handle_info(Msg, Alias, Tab, ReceiverPid, Cont) -> any()`
### sender_init/4 ###
`sender_init(Alias, Tab, RemoteStorage, Pid) -> any()`
### show_table/1 ###
`show_table(Tab) -> any()`
A debug function that shows the rocksdb table content
### show_table/2 ###
`show_table(Tab, Limit) -> any()`
### slot/3 ###
`slot(Alias, Tab, Pos) -> any()`
### start_proc/6 ###
`start_proc(Alias, Tab, Type, ProcName, Props, RdbOpts) -> any()`
### sync_close_table/2 ###
`sync_close_table(Alias, Tab) -> any()`
### terminate/2 ###
`terminate(Reason, St) -> any()`
### tmp_suffixes/0 ###
`tmp_suffixes() -> any()`
### update_counter/4 ###
`update_counter(Alias, Tab, C, Val) -> any()`
### validate_key/6 ###
`validate_key(Alias, Tab, RecName, Arity, Type, Key) -> any()`
### validate_record/6 ###
`validate_record(Alias, Tab, RecName, Arity, Type, Obj) -> any()`