Created
May 30, 2021 20:10
-
-
Save calmofthestorm/45ec06cc49c87cb2800bd6686e3618a4 to your computer and use it in GitHub Desktop.
Sled high memory use example with many small objects
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This file is automatically @generated by Cargo. | |
# It is not intended for manual editing. | |
[[package]] | |
name = "autocfg" | |
version = "1.0.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" | |
[[package]] | |
name = "bitflags" | |
version = "1.2.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" | |
[[package]] | |
name = "byteorder" | |
version = "1.4.3" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" | |
[[package]] | |
name = "cfg-if" | |
version = "1.0.0" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" | |
[[package]] | |
name = "crc32fast" | |
version = "1.2.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" | |
dependencies = [ | |
"cfg-if", | |
] | |
[[package]] | |
name = "crossbeam-channel" | |
version = "0.5.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" | |
dependencies = [ | |
"cfg-if", | |
"crossbeam-utils", | |
] | |
[[package]] | |
name = "crossbeam-deque" | |
version = "0.8.0" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" | |
dependencies = [ | |
"cfg-if", | |
"crossbeam-epoch", | |
"crossbeam-utils", | |
] | |
[[package]] | |
name = "crossbeam-epoch" | |
version = "0.9.5" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" | |
dependencies = [ | |
"cfg-if", | |
"crossbeam-utils", | |
"lazy_static", | |
"memoffset", | |
"scopeguard", | |
] | |
[[package]] | |
name = "crossbeam-utils" | |
version = "0.8.5" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" | |
dependencies = [ | |
"cfg-if", | |
"lazy_static", | |
] | |
[[package]] | |
name = "either" | |
version = "1.6.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" | |
[[package]] | |
name = "fs2" | |
version = "0.4.3" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" | |
dependencies = [ | |
"libc", | |
"winapi", | |
] | |
[[package]] | |
name = "fxhash" | |
version = "0.2.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" | |
dependencies = [ | |
"byteorder", | |
] | |
[[package]] | |
name = "hermit-abi" | |
version = "0.1.18" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" | |
dependencies = [ | |
"libc", | |
] | |
[[package]] | |
name = "instant" | |
version = "0.1.9" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" | |
dependencies = [ | |
"cfg-if", | |
] | |
[[package]] | |
name = "lazy_static" | |
version = "1.4.0" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" | |
[[package]] | |
name = "libc" | |
version = "0.2.95" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "789da6d93f1b866ffe175afc5322a4d76c038605a1c3319bb57b06967ca98a36" | |
[[package]] | |
name = "lock_api" | |
version = "0.4.4" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb" | |
dependencies = [ | |
"scopeguard", | |
] | |
[[package]] | |
name = "log" | |
version = "0.4.14" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" | |
dependencies = [ | |
"cfg-if", | |
] | |
[[package]] | |
name = "memoffset" | |
version = "0.6.4" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" | |
dependencies = [ | |
"autocfg", | |
] | |
[[package]] | |
name = "num_cpus" | |
version = "1.13.0" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" | |
dependencies = [ | |
"hermit-abi", | |
"libc", | |
] | |
[[package]] | |
name = "parking_lot" | |
version = "0.11.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" | |
dependencies = [ | |
"instant", | |
"lock_api", | |
"parking_lot_core", | |
] | |
[[package]] | |
name = "parking_lot_core" | |
version = "0.8.3" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" | |
dependencies = [ | |
"cfg-if", | |
"instant", | |
"libc", | |
"redox_syscall", | |
"smallvec", | |
"winapi", | |
] | |
[[package]] | |
name = "rayon" | |
version = "1.5.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" | |
dependencies = [ | |
"autocfg", | |
"crossbeam-deque", | |
"either", | |
"rayon-core", | |
] | |
[[package]] | |
name = "rayon-core" | |
version = "1.9.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" | |
dependencies = [ | |
"crossbeam-channel", | |
"crossbeam-deque", | |
"crossbeam-utils", | |
"lazy_static", | |
"num_cpus", | |
] | |
[[package]] | |
name = "redox_syscall" | |
version = "0.2.8" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "742739e41cd49414de871ea5e549afb7e2a3ac77b589bcbebe8c82fab37147fc" | |
dependencies = [ | |
"bitflags", | |
] | |
[[package]] | |
name = "scopeguard" | |
version = "1.1.0" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" | |
[[package]] | |
name = "sled" | |
version = "0.34.6" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "1d0132f3e393bcb7390c60bb45769498cf4550bcb7a21d7f95c02b69f6362cdc" | |
dependencies = [ | |
"crc32fast", | |
"crossbeam-epoch", | |
"crossbeam-utils", | |
"fs2", | |
"fxhash", | |
"libc", | |
"log", | |
"parking_lot", | |
] | |
[[package]] | |
name = "sled_oom" | |
version = "0.1.0" | |
dependencies = [ | |
"rayon", | |
"sled", | |
] | |
[[package]] | |
name = "smallvec" | |
version = "1.6.1" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" | |
[[package]] | |
name = "winapi" | |
version = "0.3.9" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" | |
dependencies = [ | |
"winapi-i686-pc-windows-gnu", | |
"winapi-x86_64-pc-windows-gnu", | |
] | |
[[package]] | |
name = "winapi-i686-pc-windows-gnu" | |
version = "0.4.0" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" | |
[[package]] | |
name = "winapi-x86_64-pc-windows-gnu" | |
version = "0.4.0" | |
source = "registry+https://github.com/rust-lang/crates.io-index" | |
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[package] | |
name = "sled_oom" | |
version = "0.1.0" | |
authors = ["Alex Roper <[email protected]>"] | |
edition = "2018" | |
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | |
[dependencies] | |
sled = "0" | |
rayon = "1" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::io::Write; | |
use std::path::PathBuf; | |
// Not needed to repro -- just makes the generation go faster. | |
use rayon::prelude::*; | |
const SIZE: u64 = 400; | |
fn cmd_gen(tree: &sled::Tree) { | |
let path = b"/home/user/big/stuff/potato/long/thingimie/words".to_vec(); | |
let jb = path.len(); | |
let top: Vec<_> = (0..SIZE).collect(); | |
top | |
.par_iter().map(|j| { | |
let mut path = path.clone(); | |
let mut buf = [0; 24]; | |
write!(&mut path, "/foo{}", j).unwrap(); | |
let kb = path.len(); | |
for k in 0..SIZE { | |
write!(&mut path, "/bar{}", k).unwrap(); | |
let lb = path.len(); | |
for l in 0..SIZE { | |
write!(&mut path, "/baz{}", l).unwrap(); | |
buf[0..8].copy_from_slice(&j.to_le_bytes()); | |
buf[8..16].copy_from_slice(&k.to_le_bytes()); | |
buf[16..24].copy_from_slice(&l.to_le_bytes()); | |
tree.insert(&path, &buf).unwrap(); | |
path.truncate(lb); | |
} | |
path.truncate(kb); | |
} | |
path.truncate(jb); | |
}) | |
.for_each(drop); | |
tree.flush().unwrap(); | |
} | |
fn cmd_oom(tree: &sled::Tree) { | |
tree.clear().unwrap(); | |
tree.flush().unwrap(); | |
} | |
fn main() { | |
let args: Vec<_> = std::env::args().collect(); | |
if args.len() < 3 || (args[2] != "gen" && args[2] != "oom") { | |
eprintln!("Usage: {} <db_path> <gen|oom>", &args[0]); | |
return; | |
} | |
let db = sled::Config::new() | |
.cache_capacity((4 * 1024 * 1024) as u64) | |
.path(&args[1]) | |
.open() | |
.unwrap(); | |
let tree = db.open_tree(b"path_to_id").unwrap(); | |
if args[2] == "gen" { | |
cmd_gen(&tree); | |
} else { | |
cmd_oom(&tree) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment