RealTimeDB: in-memory KV store with watch subscription, TTL expiration, and batch operations
import {
"JIA2JIA2/moonbitRealTimeDB/src/core@0.1.0",
}import { "JIA2JIA2/moonbitRealTimeDB/src/api" }
let db = @api.DB::new()
let idx = @api.IndexManager::new()let db = @core.DB::new()
// 基本操作
db.set("key", @core.Str("value"))
let value = db.get("key") // Some(@core.Str("value"))
// 带 TTL 的设置
db.set("temp", @core.Int(42), ttl=10)
// 订阅
let _ = db.watch("key", fn(e) {
println(e.to_string())
})
db.set("key", @core.Str("new")) // 触发回调
// 推进时间,清理过期键
let _ = db.advance(10)let executor = @sql_engine.create_query_executor()
executor.set_db(Some(db))
// SELECT:返回结果行
let select = @sql_engine.parse_sql("SELECT name FROM users WHERE age > 18").unwrap()
let rows = executor.execute_statement(select)
// DELETE:返回被删除记录的键
let delete = @sql_engine.parse_sql("DELETE FROM users WHERE age < 18").unwrap()
let deleted = executor.execute_statement(delete)| 方法 | 说明 |
|---|---|
| DB::new() | 创建空数据库 |
| DB::clock() | 获取当前逻辑时钟值 |
| DB::set(key, value, ttl?) | 设置键值 |
| DB::get(key) | 获取键值 |
| DB::delete(key) | 删除键 |
| DB::contains(key) | 检查键是否存在 |
| DB::size() | 键值对数量 |
| DB::keys() | 所有键 |
| DB::values() | 所有值 |
| DB::entries() | 所有键值对 |
| DB::advance(n) | 推进逻辑时钟并清理过期键 |
| DB::expire_now() | 手动清理过期键 |
| 方法 | 说明 |
|---|---|
| watch(key, callback) | 订阅特定键 |
| watch_prefix(prefix, callback) | 订阅前缀匹配的所有键 |
| watch_all(callback) | 订阅所有键变更 |
| unwatch(id) | 取消订阅 |
| watcher_count() | 活跃订阅数 |
| 方法 | 说明 |
|---|---|
| mset(pairs, ttl?) | 批量设置 |
| mget(keys) | 批量获取 |
| mdelete(keys) | 批量删除 |
| 方法 | 说明 |
|---|---|
| incr(key, delta?) | 原子增加 |
| decr(key, delta?) | 原子减少 |
| touch(key, ttl) | 重置过期时间 |
| persist(key) | 移除 TTL |
| setnx(key, value, ttl?) | 仅当键不存在时设置 |
| clear() | 清空所有键 |
| 方法 | 说明 |
|---|---|
| TransactionManager::new(timeout) | 创建事务管理器 |
| TransactionManager::begin(isolation_level, clock) | 开始新事务 |
| TransactionManager::commit(tx_id) | 提交事务 |
| TransactionManager::rollback(tx_id) | 回滚事务 |
| TransactionManager::check_timeouts(clock) | 检查超时事务 |
| 方法 | 说明 |
|---|---|
| WAL::new(file_path, threshold) | 创建 WAL 实例 |
| WAL::append(operation) | 追加写入日志 |
| WAL::sync() | 同步到磁盘 |
| WAL::replay(callback) | 重放日志 |
| Snapshot::create(data, version) | 创建快照 |
| Snapshot::load(data, metadata) | 加载快照 |
| 方法 | 说明 |
|---|---|
| Monitor::new(interval) | 创建监控器 |
| Monitor::register(metric) | 注册指标 |
| Monitor::update(name, value) | 更新指标值 |
| Monitor::expose() | 暴露 Prometheus 格式 |
| 方法 | 说明 |
|---|---|
| ConnectionPool::new(max_connections) | 创建连接池 |
| ConnectionPool::get(addr, time) | 获取连接 |
| ConnectionPool::return_connection(conn) | 归还连接 |
| ConnectionPool::reclaim(timeout, time) | 回收超时连接 |
| 方法 | 说明 |
|---|---|
| IndexManager::new() | 创建索引管理器 |
| IndexManager::create_index(name, paths, type, unique) | 创建索引 |
| IndexManager::drop_index(name) | 删除索引 |
| IndexManager::rebuild_index(name, mode) | 重建索引 |
| QueryEngine::index_query(name, field, value) | 等值查询 |
| QueryEngine::index_range(name, field, start, end) | 范围查询 |
| QueryEngine::index_prefix(name, field, prefix) | 前缀查询 |
| 方法 | 说明 |
|---|---|
| PipelineManager::new() | 创建管道管理器 |
| PipelineManager::create_pipeline(name, config) | 创建管道 |
| PipelineManager::start_pipeline(name) | 启动管道 |
| PipelineManager::stop_pipeline(name) | 停止管道 |
| PipelineManager::process_event(name, event) | 处理事件 |
| 方法 | 说明 |
|---|---|
| parse_sql(sql) | 解析 SQL 语句,返回 SqlStatement |
| QueryOptimizer::optimize(statement) | 生成查询计划 |
| QueryExecutor::set_db(db) | 绑定待查询的数据库 |
| QueryExecutor::execute_statement(statement) | 执行 SELECT / DELETE 语句 |
| QueryExecutor::execute_select_statement(select) | 执行 SELECT,返回结果行 |
| QueryExecutor::execute_delete_statement(delete) | 执行 DELETE,返回被删除记录的键 |
| QueryExecutor::execute(plan) | 按查询计划执行 |
moon test # 运行全部测试(当前 399 个)
moon coverage analyze > uncovered.log # 查看未覆盖代码moonbitRealTimeDB/
├── moon.mod # 模块定义(名称/版本/依赖)
└── src/ # 全部代码统一目录
├── core/ # 核心数据库引擎(realtime_db.mbt + 测试)
├── api/ # 统一 API 门面包
├── transaction/ # 事务支持
├── persistence/ # 持久化(WAL + 快照)
├── monitor/ # 监控指标
├── connection/ # 连接池
├── perf_pipeline/ # 高性能数据管道
├── index/ # 二级索引
├── stream_engine/ # 实时数据流引擎
├── cluster/ # 分布式集群
├── multi_tenant/ # 多租户管理
├── sql_engine/ # SQL 查询引擎
├── lake_integration/ # 数据湖集成
├── replication/ # 跨集群复制
├── feature_store/ # 特征存储
├── graphql/ # GraphQL 接口
├── versioning/ # 数据版本控制
├── timeseries/ # 时间序列引擎
├── vector_search/ # 向量检索引擎
└── cmd/main/ # CLI 入口import { "JIA2JIA2/moonbitRealTimeDB/src/api" }
let db = @api.DB::new()
let idx = @api.IndexManager::new()门面包仅重导出核心类型与各模块的主 Manager 类型,避免跨模块同名类型 (如 Snapshot、Pipeline)冲突。需要更多类型时按需直接导入对应模块。
| 文件名 | 用途 |
|---|---|
| moon.pkg | 包定义与依赖声明(每个包必需) |
| {module}_types.mbt | 公共类型与错误定义 |
| {module}_*.mbt | 功能实现 |
| {module}_test.mbt | 黑盒单元测试 |
| {module}_wbtest.mbt | 白盒单元测试(可选) |
| pkg.generated.mbti | 自动生成的接口文件,勿手改 |
import {
"JIA2JIA2/moonbitRealTimeDB/src/core" @realtime_db,
"JIA2JIA2/moonbitRealTimeDB/src/persistence",
}///|
/// 类型文档注释
pub(all) struct MyType {
/// 字段文档
field : String
}
///|
/// 函数文档注释
pub fn MyType::my_method(self : MyType, param : String) -> Result[String, MyError] {
// 实现
}moon check # 类型检查(CI 门禁,要求 0 error / 0 warning)
moon fmt # 格式化代码(moon fmt --check 只检查不改动)
moon test # 运行测试
moon info # 重新生成 pkg.generated.mbti
moon build # 构建
moon run src/cmd/main -- "help" # 运行 CLI(每条命令作为一个带引号参数)| 指标 | 目标值 |
|---|---|
| 读写延迟 | ≤ 1ms(P99) |
| 事务提交延迟 | ≤ 5ms(P99) |
| 吞吐量 | ≥ 100,000 QPS |
| 批量导入 | ≥ 500,000 条/秒 |
| 流式处理延迟 | ≤ 100μs(P99) |
| 索引查询延迟 | ≤ 100μs(P99) |
| 可用性 | ≥ 99.99% |
| RPO | ≤ 1s |
| RTO | ≤ 30s |
Install
Download zipRealTimeDB: in-memory KV store with watch subscription, TTL expiration, and batch operations