starshard

Starshard

Build crates.io docs.rs License Downloads

English 简体中文

Starshard 是一个高性能、延迟初始化分片的并发 HashMap

它面向真实生产场景,重点解决:

当前状态

已达到生产可用(v2.2.0)。

v2.2.0 已交付的 Roadmap 主能力:

安装

[dependencies]
starshard = { version = "2.2.0", features = ["async", "rayon", "serde", "lifecycle", "advanced"] }
# 最小依赖:
# starshard = "2.2.0"

5 分钟上手路径

  1. 先用默认同步 map:ShardedHashMap::new(64)
  2. 如果在 Tokio 运行时内,切换到 AsyncShardedHashMap
  3. 如果快照调用频繁,先尝试 SnapshotMode::Cached,再评估 SnapshotMode::Cow
  4. 如果分片数量来自用户输入或外部配置,优先用严格构造器(try_with_*)。

迁移说明:

特性开关

Feature 能力 典型场景
async AsyncShardedHashMap(Tokio RwLock 异步服务与任务系统
rayon 快照迭代并行扁平化 大规模扫描/导出
serde 同步版序列化/反序列化 + 异步快照序列化辅助 持久化与数据导出
lifecycle per_shard_loadmemory_statsdrain 运维观测与维护
advanced 事务/CAS/复制/诊断 API 高级并发控制与控制面

快速上手(同步)

use starshard::ShardedHashMap;

let m: ShardedHashMap<String, i32> = ShardedHashMap::new(64);
m.insert("k1".into(), 10);
assert_eq!(m.get(&"k1".into()), Some(10));
assert_eq!(m.len(), 1);

快速上手(异步)

#[cfg(feature = "async")]
#[tokio::main]
async fn main() {
    use starshard::AsyncShardedHashMap;

    let m: AsyncShardedHashMap<String, i32> = AsyncShardedHashMap::new(64);
    m.insert("k1".into(), 10).await;
    assert_eq!(m.get(&"k1".into()).await, Some(10));
}

常用操作速查

目标 同步 API 异步 API
插入/更新 insert(k, v) insert(k, v).await
读取 get(&k) get(&k).await
删除 remove(&k) remove(&k).await
批量插入 batch_insert(items) batch_insert(items).await
批量读取 batch_get(&keys) batch_get(&keys).await
条件更新 compute_if_present(&k, f) compute_if_present(&k, f).await
条件插入 compute_if_absent(k, f) compute_if_absent(k, f).await
指标/内省 shard_stats() / memory_stats() shard_stats().await / memory_stats().await

构造器选型

按“安全边界 + 控制度”选择:

自适应重平衡(v2.2.0

停顿式重平衡

use starshard::{RebalanceOptions, ShardedHashMap};

let m: ShardedHashMap<String, i32> = ShardedHashMap::new(8);
let report = m.rebalance_to(32, RebalanceOptions::default()).unwrap();
assert_eq!(report.from_shards, 8);
assert_eq!(report.to_shards, 32);

在线渐进迁移

use starshard::ShardedHashMap;

let m: ShardedHashMap<String, i32> = ShardedHashMap::new(8);
m.start_rebalance_online(32).unwrap();

while m.rebalance_status().state == "migrating" {
    m.advance_rebalance(2);
}

assert_eq!(m.rebalance_status().state, "idle");

语义说明:

快照模式(v2.2.0

SnapshotMode 支持按负载选择:

use starshard::{ShardedHashMap, SnapshotMode};

let clone_map: ShardedHashMap<String, i32> =
    ShardedHashMap::with_snapshot_mode(64, SnapshotMode::Clone);
let cached_map: ShardedHashMap<String, i32> =
    ShardedHashMap::with_snapshot_mode(64, SnapshotMode::Cached);
let cow_map: ShardedHashMap<String, i32> =
    ShardedHashMap::with_snapshot_mode(64, SnapshotMode::Cow);

模式选择建议

负载画像 推荐模式
高写入 + 低快照频率 Clone
中写入 + 中快照频率 Cached
低写入 + 高频快照读取 CowCached

一致性模型

性能建议

Serde 语义

示例与基准

示例:

基准入口:

验证建议

发布前或升级后建议执行:

cargo fmt --all
cargo test --all-features
cargo check --all-features

当前边界

License

双许可证:

你可以任选其一。

免责声明