Browse Source

Add simple transaction lookup benchmark

bench-lookups
Roman Zeyde 6 years ago
parent
commit
b0544262d2
No known key found for this signature in database GPG Key ID: 87CAE5FA46917CBB
  1. 71
      examples/lookups.rs

71
examples/lookups.rs

@ -0,0 +1,71 @@
/// Benchmark full scan and point lookups.
extern crate electrs;
#[macro_use]
extern crate log;
extern crate bitcoin;
extern crate error_chain;
use bitcoin::util::hash::Sha256dHash;
use electrs::{
config::Config,
daemon::Daemon,
errors::*,
index::TxRow,
metrics::Metrics,
signal::Waiter,
store::{DBStore, ReadStore},
};
use error_chain::ChainedError;
use std::time::{Duration, Instant};
fn run(config: Config) -> Result<()> {
if !config.db_path.exists() {
panic!(
"DB {:?} must exist when running this benchmark!",
config.db_path
);
}
let store = DBStore::open(&config.db_path, /*low_memory=*/ false);
let signal = Waiter::new();
let metrics = Metrics::new(config.monitoring_addr);
metrics.start();
let daemon = Daemon::new(
&config.daemon_dir,
config.daemon_rpc_addr,
config.cookie_getter(),
config.network_type,
signal.clone(),
&metrics,
)?;
let mut blockhash =
Sha256dHash::from_hex("00000000000000000133e9920d5d808d430e325027d513420e7fc2f7da231ffe")
.unwrap();
for _ in 0..100 {
let block = daemon.getblock(&blockhash)?;
let txhashes: Vec<Sha256dHash> = block.txdata.iter().map(|tx| tx.txid()).collect();
let len = txhashes.len() as u32;
let now = Instant::now();
for txhash in &txhashes {
let key = TxRow::filter_full(txhash);
let value = store.get(&key);
value.chain_err(|| format!("missing key {}", txhash))?;
}
let elapsed = now.elapsed();
info!("got {} txs @ {:?} secs ({:?} per tx)", len, elapsed, elapsed / len);
blockhash = block.header.prev_blockhash;
}
Ok(())
}
fn main() {
if let Err(e) = run(Config::from_args()) {
error!("{}", e.display_chain());
}
}
Loading…
Cancel
Save