pub struct PartitionMetrics { /* private fields */ }Expand description
Partition monitoring for detecting hot partitions and skew (SierraDB pattern)
§Design Pattern
Uses atomic operations for lock-free metric updates per partition. Tracks event counts, write latencies, and error rates per partition.
§SierraDB Context
SierraDB uses fixed partitions (32 for single-node, 1024+ for clusters). Detecting hot partitions is critical for:
- Load balancing decisions
- Identifying skewed hash functions
- Capacity planning
- Performance troubleshooting
§Imbalance Detection
A partition is considered imbalanced if it has >2x the average load. This threshold is based on SierraDB’s experience with production workloads.
§Example
let partition_metrics = PartitionMetrics::new(32);
// Record write to partition 5
let start = Instant::now();
// ... write operation ...
partition_metrics.record_write(5, start.elapsed());
// Check for imbalances
let alerts = partition_metrics.detect_partition_imbalance();
for alert in alerts {
tracing::warn!("Partition imbalance: {}", alert.message);
}Implementations§
Source§impl PartitionMetrics
impl PartitionMetrics
Sourcepub fn new(partition_count: u32) -> Self
pub fn new(partition_count: u32) -> Self
Create a new partition metrics tracker
§Arguments
partition_count- Number of partitions (default: 32 for single-node)
Sourcepub fn with_default_partitions() -> Self
pub fn with_default_partitions() -> Self
Create partition metrics with default partition count (32)
Sourcepub fn record_write(&self, partition_id: u32, latency: Duration)
pub fn record_write(&self, partition_id: u32, latency: Duration)
Record a successful write to a partition
§Arguments
partition_id- The partition ID (0 to partition_count-1)latency- The write latency
Sourcepub fn record_error(&self, partition_id: u32)
pub fn record_error(&self, partition_id: u32)
Sourcepub fn record_batch_write(
&self,
partition_id: u32,
count: u64,
latency: Duration,
)
pub fn record_batch_write( &self, partition_id: u32, count: u64, latency: Duration, )
Record a batch write to a partition
§Arguments
partition_id- The partition ID (0 to partition_count-1)count- Number of events in the batchlatency- Total latency for the batch write
Sourcepub fn get_partition_stats(&self, partition_id: u32) -> Option<PartitionStats>
pub fn get_partition_stats(&self, partition_id: u32) -> Option<PartitionStats>
Get statistics for a specific partition
Sourcepub fn get_all_partition_stats(&self) -> Vec<PartitionStats>
pub fn get_all_partition_stats(&self) -> Vec<PartitionStats>
Get statistics for all partitions
Sourcepub fn detect_partition_imbalance(&self) -> Vec<PartitionImbalanceAlert>
pub fn detect_partition_imbalance(&self) -> Vec<PartitionImbalanceAlert>
Detect partition imbalance (hot partitions)
Returns alerts for any partition with >2x average event count. This is the SierraDB pattern for detecting skew and hot partitions.
§Returns
Vector of alerts for imbalanced partitions
Sourcepub fn partition_count(&self) -> u32
pub fn partition_count(&self) -> u32
Get partition count
Sourcepub fn total_events(&self) -> u64
pub fn total_events(&self) -> u64
Get total events across all partitions
Sourcepub fn total_errors(&self) -> u64
pub fn total_errors(&self) -> u64
Get total errors across all partitions
Sourcepub fn encode(&self) -> Result<String, Box<dyn Error>>
pub fn encode(&self) -> Result<String, Box<dyn Error>>
Encode metrics in Prometheus text format
Sourcepub fn get_distribution(&self) -> HashMap<u32, u64>
pub fn get_distribution(&self) -> HashMap<u32, u64>
Get partition distribution as a map