mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-05-01 09:59:59 -07:00
global: MASSIVE snapshot
This commit is contained in:
@@ -6,7 +6,7 @@ use super::Vecs;
|
||||
use crate::{indexes, ComputeIndexes};
|
||||
|
||||
impl Vecs {
|
||||
pub fn compute(
|
||||
pub(crate) fn compute(
|
||||
&mut self,
|
||||
indexer: &Indexer,
|
||||
indexes: &indexes::Vecs,
|
||||
|
||||
@@ -6,7 +6,7 @@ use super::Vecs;
|
||||
use crate::{ComputeIndexes, indexes};
|
||||
|
||||
impl Vecs {
|
||||
pub fn compute(
|
||||
pub(crate) fn compute(
|
||||
&mut self,
|
||||
indexer: &Indexer,
|
||||
indexes: &indexes::Vecs,
|
||||
|
||||
@@ -6,7 +6,7 @@ use super::Vecs;
|
||||
use crate::{indexes, internal::TxDerivedFull};
|
||||
|
||||
impl Vecs {
|
||||
pub fn forced_import(db: &Database, version: Version, indexes: &indexes::Vecs) -> Result<Self> {
|
||||
pub(crate) fn forced_import(db: &Database, version: Version, indexes: &indexes::Vecs) -> Result<Self> {
|
||||
Ok(Self(TxDerivedFull::forced_import(
|
||||
db,
|
||||
"input_count",
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::StoredU64;
|
||||
use derive_more::{Deref, DerefMut};
|
||||
use vecdb::{Rw, StorageMode};
|
||||
|
||||
use crate::internal::TxDerivedFull;
|
||||
|
||||
#[derive(Clone, Deref, DerefMut, Traversable)]
|
||||
pub struct Vecs(pub TxDerivedFull<StoredU64>);
|
||||
#[derive(Deref, DerefMut, Traversable)]
|
||||
pub struct Vecs<M: StorageMode = Rw>(pub TxDerivedFull<StoredU64, M>);
|
||||
|
||||
@@ -9,7 +9,7 @@ use super::{CountVecs, SpentVecs, Vecs};
|
||||
use crate::indexes;
|
||||
|
||||
impl Vecs {
|
||||
pub fn forced_import(
|
||||
pub(crate) fn forced_import(
|
||||
parent_path: &Path,
|
||||
parent_version: Version,
|
||||
indexes: &indexes::Vecs,
|
||||
|
||||
@@ -5,18 +5,18 @@ mod compute;
|
||||
mod import;
|
||||
|
||||
use brk_traversable::Traversable;
|
||||
use vecdb::Database;
|
||||
use vecdb::{Database, Rw, StorageMode};
|
||||
|
||||
pub use count::Vecs as CountVecs;
|
||||
pub use spent::Vecs as SpentVecs;
|
||||
|
||||
pub const DB_NAME: &str = "inputs";
|
||||
|
||||
#[derive(Clone, Traversable)]
|
||||
pub struct Vecs {
|
||||
#[derive(Traversable)]
|
||||
pub struct Vecs<M: StorageMode = Rw> {
|
||||
#[traversable(skip)]
|
||||
pub(crate) db: Database,
|
||||
|
||||
pub spent: SpentVecs,
|
||||
pub count: CountVecs,
|
||||
pub spent: SpentVecs<M>,
|
||||
pub count: CountVecs<M>,
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use brk_error::Result;
|
||||
use brk_indexer::Indexer;
|
||||
use brk_types::{Sats, TxInIndex, TxIndex, TxOutIndex, Vout};
|
||||
use tracing::info;
|
||||
use vecdb::{AnyStoredVec, AnyVec, Database, Exit, GenericStoredVec, TypedVecIterator, VecIndex};
|
||||
use vecdb::{AnyStoredVec, AnyVec, Database, Exit, WritableVec, ReadableVec, VecIndex};
|
||||
|
||||
use super::Vecs;
|
||||
use crate::ComputeIndexes;
|
||||
@@ -10,7 +10,7 @@ use crate::ComputeIndexes;
|
||||
const BATCH_SIZE: usize = 2 * 1024 * 1024 * 1024 / size_of::<Entry>();
|
||||
|
||||
impl Vecs {
|
||||
pub fn compute(
|
||||
pub(crate) fn compute(
|
||||
&mut self,
|
||||
db: &Database,
|
||||
indexer: &Indexer,
|
||||
@@ -39,19 +39,20 @@ impl Vecs {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let mut outpoint_iter = indexer.vecs.inputs.outpoint.iter()?;
|
||||
let mut first_txoutindex_iter = indexer.vecs.transactions.first_txoutindex.iter()?;
|
||||
let mut value_iter = indexer.vecs.outputs.value.iter()?;
|
||||
let mut entries: Vec<Entry> = Vec::with_capacity(BATCH_SIZE);
|
||||
let first_txoutindex_reader = indexer.vecs.transactions.first_txoutindex.reader();
|
||||
let value_reader = indexer.vecs.outputs.value.reader();
|
||||
let actual_total = target - min;
|
||||
let mut entries: Vec<Entry> = Vec::with_capacity(actual_total.min(BATCH_SIZE));
|
||||
|
||||
let mut batch_start = min;
|
||||
while batch_start < target {
|
||||
let batch_end = (batch_start + BATCH_SIZE).min(target);
|
||||
|
||||
let outpoints = indexer.vecs.inputs.outpoint.collect_range_at(batch_start, batch_end);
|
||||
|
||||
entries.clear();
|
||||
for i in batch_start..batch_end {
|
||||
let txinindex = TxInIndex::from(i);
|
||||
let outpoint = outpoint_iter.get_unwrap(txinindex);
|
||||
for (j, outpoint) in outpoints.into_iter().enumerate() {
|
||||
let txinindex = TxInIndex::from(batch_start + j);
|
||||
entries.push(Entry {
|
||||
txinindex,
|
||||
txindex: outpoint.txindex(),
|
||||
@@ -67,7 +68,7 @@ impl Vecs {
|
||||
if entry.txindex.is_coinbase() {
|
||||
break;
|
||||
}
|
||||
entry.txoutindex = first_txoutindex_iter.get_unwrap(entry.txindex) + entry.vout;
|
||||
entry.txoutindex = first_txoutindex_reader.get(entry.txindex.to_usize()) + entry.vout;
|
||||
}
|
||||
|
||||
entries.sort_unstable_by_key(|e| e.txoutindex);
|
||||
@@ -75,7 +76,7 @@ impl Vecs {
|
||||
if entry.txoutindex.is_coinbase() {
|
||||
break;
|
||||
}
|
||||
entry.value = value_iter.get_unwrap(entry.txoutindex);
|
||||
entry.value = value_reader.get(entry.txoutindex.to_usize());
|
||||
}
|
||||
|
||||
entries.sort_unstable_by_key(|e| e.txinindex);
|
||||
|
||||
@@ -5,7 +5,7 @@ use vecdb::{Database, ImportableVec, PcoVec};
|
||||
use super::Vecs;
|
||||
|
||||
impl Vecs {
|
||||
pub fn forced_import(db: &Database, version: Version) -> Result<Self> {
|
||||
pub(crate) fn forced_import(db: &Database, version: Version) -> Result<Self> {
|
||||
Ok(Self {
|
||||
txoutindex: PcoVec::forced_import(db, "txoutindex", version)?,
|
||||
value: PcoVec::forced_import(db, "value", version)?,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
use brk_traversable::Traversable;
|
||||
use brk_types::{Sats, TxInIndex, TxOutIndex};
|
||||
use vecdb::PcoVec;
|
||||
use vecdb::{PcoVec, Rw, StorageMode};
|
||||
|
||||
#[derive(Clone, Traversable)]
|
||||
pub struct Vecs {
|
||||
pub txoutindex: PcoVec<TxInIndex, TxOutIndex>,
|
||||
pub value: PcoVec<TxInIndex, Sats>,
|
||||
#[derive(Traversable)]
|
||||
pub struct Vecs<M: StorageMode = Rw> {
|
||||
pub txoutindex: M::Stored<PcoVec<TxInIndex, TxOutIndex>>,
|
||||
pub value: M::Stored<PcoVec<TxInIndex, Sats>>,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user