Rust version is pretty fast, except writes are still slow if auto-flush is enabled.
Is it smart?
No
So what is YEDB for?
YEDB is ultra-reliable, thread-safe and very easy to use.
I don't like Rust
https://www.youtube.com/watch?v=i3hSWjrNqLo
YEDB is absolutely reliable rugged key-value database, which can survive in any power loss, unless the OS file system die. Keys data is saved in the very reliable way and immediately flushed to disk (this can be disabled to speed up the engine but is not recommended - why then YEDB is used for).
Rust version is built on top of Serde framework.
All key values are serde_json::Value objects.
Storage serialization formats supported: JSON (default), YAML, MessagePack and CBOR.
As byte type is not supported by serde_json::Value at this moment, Rust version can not handle byte key values.
Contains: embedded library, async server and command-line client (TCP/Unix socket only).
The command-line client is very basic. If you need more features, use yedb Python CLI.
Binaries available at the releases page.
Run server:
shell
./yedb-server /tmp/db1
Use client:
```shell
./yedb-cli info
./yedb-cli set x 5 -p number
./yedb-cli ls /
./yedb-cli edit x
./yedb-cli get x
./yedb-cli -h ```
The database/client objects can be safely shared between threads using any kind of Lock/Mutex preferred.
```rust use yedb::Database; use serde_json::Value;
fn main() { let mut db = Database::new(); db.setdbpath("/tmp/db1").unwrap(); db.open().unwrap(); let keyname = "test/key1"; db.keyset(&keyname, Value::from(123u8)).unwrap(); println!("{:?}", db.keyget(&keyname)); db.keydelete(&key_name).unwrap(); db.close().unwrap(); } ```
```rust use yedb::YedbClient; use serde_json::Value;
fn main() { let mut db = YedbClient::new("tcp://127.0.0.1:8870"); let keyname = "test/key1"; db.keyset(&keyname, Value::from(123u8)).unwrap(); println!("{:?}", db.keyget(&keyname)); db.keydelete(&key_name).unwrap(); } ```
Drive: Samsung MZVLB512HAJQ-000L7 (NVMe)
auto_flush: false
```shell set/number: 8164 ops/sec set/string: 7313 ops/sec set/array: 7152 ops/sec set/object: 5272 ops/sec
get/number: 49709 ops/sec get/string: 33338 ops/sec get/array: 31426 ops/sec get/object: 11654 ops/sec
get(cached)/number: 122697 ops/sec get(cached)/string: 61206 ops/sec get(cached)/array: 59309 ops/sec get(cached)/object: 34583 ops/sec
increment: 7079 ops/sec ```