Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 9 additions & 26 deletions bench/src/speed/mdbx.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::{fs, path::Path};
use std::{fs, path::Path, sync::OnceLock};

use log::debug;
use parking_lot::RwLock;
Expand All @@ -12,7 +12,7 @@ use rayon;
use rayon::iter::*;
use reth_libmdbx::{Environment, Geometry, ObjectLength, WriteFlags};

static mut MDBX_ENV: Option<Environment> = None;
static MDBX_ENV: OnceLock<Environment> = OnceLock::new();

pub fn init(mdbx_dir: &str) {
// init MDBX
Expand All @@ -28,37 +28,23 @@ pub fn init(mdbx_dir: &str) {
.open(Path::new(mdbx_dir))
.unwrap();
debug!("MDBX: env.map_size={}", mdbx_env.info().unwrap().map_size());
unsafe {
MDBX_ENV = Some(mdbx_env);
}
MDBX_ENV.set(mdbx_env).unwrap();
}

pub fn create_kv(_: i64, task_list: Vec<RwLock<Option<SimpleTask>>>) {
let mut mdbx_env = unsafe { MDBX_ENV.take().unwrap() };
mdbx_create_kv(&mut mdbx_env, &task_list);
unsafe {
MDBX_ENV = Some(mdbx_env);
}
mdbx_create_kv(MDBX_ENV.get().unwrap(), &task_list);
}

pub fn update_kv(_: i64, task_list: Vec<RwLock<Option<SimpleTask>>>) {
let mut mdbx_env = unsafe { MDBX_ENV.take().unwrap() };
mdbx_update_kv(&mut mdbx_env, &task_list);
unsafe {
MDBX_ENV = Some(mdbx_env);
}
mdbx_update_kv(MDBX_ENV.get().unwrap(), &task_list);
}

pub fn delete_kv(_: i64, task_list: Vec<RwLock<Option<SimpleTask>>>) {
let mut mdbx_env = unsafe { MDBX_ENV.take().unwrap() };
mdbx_update_kv(&mut mdbx_env, &task_list);
unsafe {
MDBX_ENV = Some(mdbx_env);
}
mdbx_update_kv(MDBX_ENV.get().unwrap(), &task_list);
}

pub fn read_kv(key_list: &Vec<[u8; 52]>) {
let mdbx_env = unsafe { MDBX_ENV.take().unwrap() };
let mdbx_env = MDBX_ENV.get().unwrap();
let txn = &mdbx_env.begin_ro_txn().unwrap();
let db = &txn.open_db(None).unwrap();
rayon::scope(|s| {
Expand All @@ -69,13 +55,10 @@ pub fn read_kv(key_list: &Vec<[u8; 52]>) {
});
}
});
unsafe {
MDBX_ENV = Some(mdbx_env);
}
}

// ===========
fn mdbx_create_kv(env: &mut Environment, task_list: &Vec<RwLock<Option<SimpleTask>>>) {
fn mdbx_create_kv(env: &Environment, task_list: &Vec<RwLock<Option<SimpleTask>>>) {
let txn = env.begin_rw_txn().unwrap();
let db = txn.open_db(None).unwrap();
for item in task_list.iter() {
Expand All @@ -93,7 +76,7 @@ fn mdbx_create_kv(env: &mut Environment, task_list: &Vec<RwLock<Option<SimpleTas
txn.commit().unwrap();
}

fn mdbx_update_kv(env: &mut Environment, task_list: &Vec<RwLock<Option<SimpleTask>>>) {
fn mdbx_update_kv(env: &Environment, task_list: &Vec<RwLock<Option<SimpleTask>>>) {
std::thread::scope(|s| {
let handler = s.spawn(|| {
let txn = env.begin_rw_txn().unwrap();
Expand Down
41 changes: 12 additions & 29 deletions bench/src/speed/rocksdb.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::{fs, path::Path};
use std::{fs, path::Path, sync::OnceLock};

use parking_lot::RwLock;
use qmdb::{
Expand All @@ -10,6 +10,7 @@ use qmdb::{
use rayon;
use rocksdb::{Options, ReadOptions, WriteBatch, WriteBatchWithTransaction, WriteOptions, DB};

#[derive(Debug)]
struct RocksDB {
db: DB,
}
Expand Down Expand Up @@ -81,7 +82,7 @@ impl RocksDB {
// self.db.write(batch.batch).unwrap();
// }

fn batch_write_sync(&mut self, batch: RocksBatch) {
fn batch_write_sync(&self, batch: RocksBatch) {
let mut write_options = WriteOptions::default();
write_options.set_sync(true);
self.db.write_opt(batch.batch, &write_options).unwrap();
Expand Down Expand Up @@ -110,61 +111,43 @@ impl RocksBatch {
}
}

static mut RKS_DB: Option<RocksDB> = None;
static RKS_DB: OnceLock<RocksDB> = OnceLock::new();

pub fn init(rocksdb_dir: &str) {
if Path::new(rocksdb_dir).exists() {
fs::remove_dir_all(rocksdb_dir).unwrap();
}
let rks_db = RocksDB::new("ROCKS", rocksdb_dir);
unsafe {
RKS_DB = Some(rks_db);
}
RKS_DB.set(rks_db).unwrap();
}

pub fn create_kv(_: i64, task_list: Vec<RwLock<Option<SimpleTask>>>) {
let mut rks_db = unsafe { RKS_DB.take().unwrap() };
rocksdb_create_kv(&mut rks_db, &task_list);
unsafe {
RKS_DB = Some(rks_db);
}
rocksdb_create_kv(RKS_DB.get().unwrap(), &task_list);
}

pub fn update_kv(_: i64, task_list: Vec<RwLock<Option<SimpleTask>>>) {
let mut rks_db = unsafe { RKS_DB.take().unwrap() };
rocksdb_update_kv(&mut rks_db, &task_list);
unsafe {
RKS_DB = Some(rks_db);
}
rocksdb_update_kv(RKS_DB.get().unwrap(), &task_list);
}

pub fn delete_kv(_: i64, task_list: Vec<RwLock<Option<SimpleTask>>>) {
let mut rks_db = unsafe { RKS_DB.take().unwrap() };
rocksdb_update_kv(&mut rks_db, &task_list);
unsafe {
RKS_DB = Some(rks_db);
}
rocksdb_update_kv(RKS_DB.get().unwrap(), &task_list);
}

pub fn read_kv(key_list: &Vec<[u8; 52]>) {
let rks_db = unsafe { RKS_DB.take().unwrap() };
let _rks_db = &rks_db;
let rks_db = RKS_DB.get().unwrap();
rayon::scope(|s| {
for k in key_list.iter() {
let _ = hasher::hash(&k[..]);
s.spawn(move |_| {
_rks_db.get(k).unwrap();
rks_db.get(k).unwrap();
});
}
});
unsafe {
RKS_DB = Some(rks_db);
}
}

// ===========

fn rocksdb_create_kv(rks_db: &mut RocksDB, task_list: &Vec<RwLock<Option<SimpleTask>>>) {
fn rocksdb_create_kv(rks_db: &RocksDB, task_list: &Vec<RwLock<Option<SimpleTask>>>) {
let mut batch = RocksBatch::new();
for item in task_list.iter() {
let task_opt = item.read();
Expand All @@ -181,7 +164,7 @@ fn rocksdb_create_kv(rks_db: &mut RocksDB, task_list: &Vec<RwLock<Option<SimpleT
rks_db.batch_write_sync(batch);
}

fn rocksdb_update_kv(rks_db: &mut RocksDB, task_list: &Vec<RwLock<Option<SimpleTask>>>) {
fn rocksdb_update_kv(rks_db: &RocksDB, task_list: &Vec<RwLock<Option<SimpleTask>>>) {
const N: usize = 10000;
let mut keys = Vec::with_capacity(N);
let mut batch_out = RocksBatch::new();
Expand Down