pub struct PropertyStorage<Id: EntityId = NodeId> { /* private fields */ }Expand description
Thread-safe columnar property storage.
Each property key (“name”, “age”, etc.) gets its own column. This layout is great for analytical queries that filter on specific properties - you only touch the columns you need.
Generic over Id so the same storage works for nodes and edges.
§Example
use grafeo_core::graph::lpg::PropertyStorage;
use grafeo_common::types::{NodeId, PropertyKey};
let storage = PropertyStorage::new();
let alice = NodeId::new(1);
storage.set(alice, PropertyKey::new("name"), "Alice".into());
storage.set(alice, PropertyKey::new("age"), 30i64.into());
// Fetch all properties at once
let props = storage.get_all(alice);
assert_eq!(props.len(), 2);Implementations§
Source§impl<Id: EntityId> PropertyStorage<Id>
impl<Id: EntityId> PropertyStorage<Id>
Sourcepub fn with_compression(mode: CompressionMode) -> Self
pub fn with_compression(mode: CompressionMode) -> Self
Creates a new property storage with compression enabled.
Sourcepub fn set_default_compression(&mut self, mode: CompressionMode)
pub fn set_default_compression(&mut self, mode: CompressionMode)
Sets the default compression mode for new columns.
Sourcepub fn set(&self, id: Id, key: PropertyKey, value: Value)
pub fn set(&self, id: Id, key: PropertyKey, value: Value)
Sets a property value for an entity.
Sourcepub fn enable_compression(&self, key: &PropertyKey, mode: CompressionMode)
pub fn enable_compression(&self, key: &PropertyKey, mode: CompressionMode)
Enables compression for a specific column.
Sourcepub fn compress_all(&self)
pub fn compress_all(&self)
Compresses all columns that have compression enabled.
Sourcepub fn force_compress_all(&self)
pub fn force_compress_all(&self)
Forces compression on all columns regardless of mode.
Sourcepub fn compression_stats(&self) -> FxHashMap<PropertyKey, CompressionStats>
pub fn compression_stats(&self) -> FxHashMap<PropertyKey, CompressionStats>
Returns compression statistics for all columns.
Sourcepub fn memory_usage(&self) -> usize
pub fn memory_usage(&self) -> usize
Returns the total memory usage of all columns.
Sourcepub fn get(&self, id: Id, key: &PropertyKey) -> Option<Value>
pub fn get(&self, id: Id, key: &PropertyKey) -> Option<Value>
Gets a property value for an entity.
Sourcepub fn remove(&self, id: Id, key: &PropertyKey) -> Option<Value>
pub fn remove(&self, id: Id, key: &PropertyKey) -> Option<Value>
Removes a property value for an entity.
Sourcepub fn remove_all(&self, id: Id)
pub fn remove_all(&self, id: Id)
Removes all properties for an entity.
Sourcepub fn get_all(&self, id: Id) -> FxHashMap<PropertyKey, Value>
pub fn get_all(&self, id: Id) -> FxHashMap<PropertyKey, Value>
Gets all properties for an entity.
Sourcepub fn column_count(&self) -> usize
pub fn column_count(&self) -> usize
Returns the number of property columns.
Sourcepub fn keys(&self) -> Vec<PropertyKey>
pub fn keys(&self) -> Vec<PropertyKey>
Returns the keys of all columns.
Sourcepub fn column(&self, key: &PropertyKey) -> Option<PropertyColumnRef<'_, Id>>
pub fn column(&self, key: &PropertyKey) -> Option<PropertyColumnRef<'_, Id>>
Gets a column by key for bulk access.
Sourcepub fn might_match(
&self,
key: &PropertyKey,
op: CompareOp,
value: &Value,
) -> bool
pub fn might_match( &self, key: &PropertyKey, op: CompareOp, value: &Value, ) -> bool
Checks if a predicate might match any values (using zone maps).
Returns false only when we’re certain no values match - for example,
if you’re looking for age > 100 but the max age is 80. Returns true
if the property doesn’t exist (conservative - might match).
Sourcepub fn zone_map(&self, key: &PropertyKey) -> Option<ZoneMapEntry>
pub fn zone_map(&self, key: &PropertyKey) -> Option<ZoneMapEntry>
Gets the zone map for a property column.
Sourcepub fn rebuild_zone_maps(&self)
pub fn rebuild_zone_maps(&self)
Rebuilds zone maps for all columns (call after bulk removes).