DarkBird is a Document oriented, high concurrency in-memory Storage , also persist data to disk to avoid loss any data
inspired by erlang mnesia
The darkbird provides the following :
-
Persistent - use Non-Blocking wal engine for persist data,
also store data to multiple pages by total_page_size -
In-memory - whole data stored in-memory
with two mode ( DiskCopies, RamCopies )
both stored in-memory but DiskCopies persist data to disk and
after restart , darkbird load whole data to memory -
Concurrency - darkbird use one of best high-concurrent HashMap (DashMap)[GitHub - xacrimon/conc-map-bench]
and you don't need to use Mutex/RwLock for sync between thread,
storage is complete safe to shared between threads -
Migration - Darkbird storage model is (Key, Document)
if you want change Document Model, can usemigration::run
for change all (Key, Document) already exist in disk
this module should be use before storage opened -
Event Handling - can subscribe any channel you want to storage, they
get storage event (RQuery<Key, Document>, Subscribed(tokio::mpsc::Sender(Event<key, document>))
)
Examples
The complete Examples on Link
Crate
darkbird = "1.1.0"