diff --git a/crates/brk_indexer/README.md b/crates/brk_indexer/README.md index 231d28efd..7798254d0 100644 --- a/crates/brk_indexer/README.md +++ b/crates/brk_indexer/README.md @@ -75,3 +75,4 @@ Stores: `src/storage/stores/mod.rs` - mode: `raw` - disk usage: `208 GB` - overhead: `28%` (`208 GB / 744 GB`) +- peak memory: `5.7GB` diff --git a/crates/brk_vec/src/traits/generic.rs b/crates/brk_vec/src/traits/generic.rs index b958bd631..212489e4f 100644 --- a/crates/brk_vec/src/traits/generic.rs +++ b/crates/brk_vec/src/traits/generic.rs @@ -10,7 +10,6 @@ use axum::{ response::{IntoResponse, Response}, }; use memmap2::Mmap; -use serde_json::Value; use crate::{Error, Result, Version}; @@ -161,7 +160,11 @@ where } #[inline] - fn collect_range_serde_json(&self, from: Option, to: Option) -> Result> { + fn collect_range_serde_json( + &self, + from: Option, + to: Option, + ) -> Result> { self.collect_signed_range(from, to)? .into_iter() .map(|v| serde_json::to_value(v).map_err(Error::from)) diff --git a/crates/brk_vec/src/variants/compressed.rs b/crates/brk_vec/src/variants/compressed.rs index bd2eacc3c..d5cf2b50e 100644 --- a/crates/brk_vec/src/variants/compressed.rs +++ b/crates/brk_vec/src/variants/compressed.rs @@ -324,30 +324,21 @@ where }) } - fn collect_range(&self, from: Option, to: Option) -> Result> { - if !self.is_pushed_empty() { - return Err(Error::UnsupportedUnflushedState); - } - + fn collect_range(&self, from: Option, to: Option) -> Result> { let stored_len = self.stored_len(); - let from = from.unwrap_or_default(); let to = to.map_or(stored_len, |i| i.min(stored_len)); - if from >= stored_len { + if from >= stored_len || from >= to { return Ok(vec![]); } - let mmap = self.mmap().load(); - let pages_meta = self.pages_meta.load(); - let mut decoded_page: Option<(usize, Vec)> = None; - - (from..to) - .map(|index| { - Self::cached_get_stored__(index, &mmap, stored_len, &mut decoded_page, &pages_meta) - .map(|opt| opt.unwrap()) - }) - .collect::>>() + Ok(self + .into_iter() + .skip(from) + .take(to - from) + .map(|(_, v)| v.into_inner()) + .collect::>()) } fn flush(&mut self) -> Result<()> { diff --git a/crates/brk_vec/src/variants/raw.rs b/crates/brk_vec/src/variants/raw.rs index 28479ed51..c367e8a6d 100644 --- a/crates/brk_vec/src/variants/raw.rs +++ b/crates/brk_vec/src/variants/raw.rs @@ -152,24 +152,20 @@ where } fn collect_range(&self, from: Option, to: Option) -> Result> { - if !self.is_pushed_empty() { - return Err(Error::UnsupportedUnflushedState); - } - let stored_len = self.stored_len(); - let from = from.unwrap_or_default(); let to = to.map_or(stored_len, |i| i.min(stored_len)); - if from >= stored_len { + if from >= stored_len || from >= to { return Ok(vec![]); } - let mmap = self.mmap.load(); - - (from..to) - .map(|index| self.get_stored_(index, &mmap).map(|opt| opt.unwrap())) - .collect::>>() + Ok(self + .into_iter() + .skip(from) + .take(to - from) + .map(|(_, v)| v.into_inner()) + .collect::>()) } fn flush(&mut self) -> Result<()> {