张家口网站建设哪家服务好百度智能云建站
张家口网站建设哪家服务好,百度智能云建站,做品牌特价的网站有哪些,网站截图环境 php原文地址#xff1a;https://github.com/hash-anu/snkv
SNKV — 无查询处理器的 SQLite 键值存储
概述
SNKV 是一个轻量级、高性能、ACID 兼容的键值存储#xff0c;直接构建在 SQLite B‑Tree 层 之上。
与通过 SQL 查询使用 SQLite 不同#xff0c;SNKV 绕过了整个 SQ…原文地址https://github.com/hash-anu/snkvSNKV — 无查询处理器的 SQLite 键值存储概述SNKV是一个轻量级、高性能、ACID 兼容的键值存储直接构建在SQLite B‑Tree 层之上。与通过 SQL 查询使用 SQLite 不同SNKV绕过了整个 SQL 处理栈直接调用 SQLite 的生产就绪的 B‑Tree API来执行键值操作。其结果是一个保留了SQLite 久经考验的可靠性和持久性的数据库同时由于开销显著减少在混合 KV 工作负载70% 读20% 写10% 删除操作上性能提升约 50%。设计理念SQLite 是一个优秀的通用数据库但对于键值工作负载而言它带来了显著的开销SQL 解析和编译虚拟机执行查询优化和模式管理SNKV 完全移除了这些层只保留对键值存储至关重要的部分。使用方法SNKV 公开了一个简单的 C API 用于键值操作完全不涉及任何 SQL。一个完整的端到端使用示例在snkv/main.c中提供。该文件演示了打开数据库创建列族插入 / 查询 / 删除操作事务操作正确清理和关闭请查阅 示例 以获取有关 API 使用的更多信息。测试所有单元测试和基准测试都位于tests/目录中。架构对比图示我们移除了哪些层┌─────────────────────────────────────────────────────────────────────────────┐ │ 我们移除的栈 │ └─────────────────────────────────────────────────────────────────────────────┘ 从 SQLite 中移除的层 为什么 SNKV 不需要它们 ═══════════════════════ ═══════════════════════════ ┌──────────────────────────┐ │ SQL 接口层 │ 无 SQL → 不需要 │ - sqlite3_prepare() │ │ - sqlite3_step() │ │ - sqlite3_bind_*() │ └──────────────────────────┘ │ ▼ ┌──────────────────────────┐ │ SQL 编译器 │ 无 SQL → 无需解析或代码生成 │ - 分词器 │ │ - 解析器 │ │ - 代码生成器 │ └──────────────────────────┘ │ ▼ ┌──────────────────────────┐ │ 虚拟机 │ 无字节码执行 │ - VDBE 执行器 │ │ - 操作码解释器 │ │ - 200 操作码 │ └──────────────────────────┘ │ ▼ ┌──────────────────────────┐ │ 后端层 │ 无模式或查询规划 │ - 查询优化器 │ │ - 索引管理器 │ │ - 模式管理器 │ └──────────────────────────┘ │ ▼ ═══════════════════════════════════════════════════SNKV 保留了什么保持不变SNKV 有意地保留了SQLite 中经受最多实战考验的部分且未作改动┌──────────────────────────┐ ┌──────────────────────────┐ │ B-树引擎 │ ══════════▶ │ B-树引擎 │ │ SQLite 已验证代码 │ 保留此项 │ 相同的已验证代码 │ └──────────────────────────┘ └──────────────────────────┘ │ │ ▼ ▼ ┌──────────────────────────┐ ┌──────────────────────────┐ │ 分页模块 │ ══════════▶ │ 分页模块 │ │ 缓存日志 │ 保留此项 │ 相同代码 │ └──────────────────────────┘ └──────────────────────────┘ │ │ ▼ ▼ ┌──────────────────────────┐ ┌──────────────────────────┐ │ 操作系统接口 │ ══════════▶ │ 操作系统接口 │ │ 文件 I/O锁 │ 保留此项 │ 相同代码 │ └──────────────────────────┘ └──────────────────────────┘这意味着 SNKV 受益于崩溃安全性回滚日志原子提交页面缓存和高效 I/O经过实际测试清晰的架构图┌────────────────┐ │ 应用程序 │ └────────┬───────┘ │ │ kvstore_put(key, value) │ kvstore_get(key) → value │ kvstore_delete(key) │ kvstore_begin(), kvstore_commit(), kvstore_rollback(), ... ▼ ┌────────────────────────────────┐ │ KVStore 层 │ │ 薄封装 - 约 1600 行代码 │ │ │ │ • 简单 API │ │ • 列族 │ │ • 线程安全互斥锁 │ │ • 验证 │ │ • 统计 │ └────────────┬───────────────────┘ │ │ 直接调用无 SQL │ ▼ ┌────────────────────────────────┐ │ B-树引擎 │ │ SQLite 3.3.0 - 已验证代码 │ │ │ │ • 树操作 │ │ • 键值存储 │ │ • 游标与导航 │ └────────────┬───────────────────┘ │ │ ▼ ┌────────────────────────────────┐ │ 分页模块 │ │ SQLite 3.3.0 - 已验证代码 │ │ │ │ • 事务管理 │ │ • 回滚日志 │ │ • ACID 保证 │ └────────────┬───────────────────┘ │ │ ▼ ┌────────────────────────────────┐ │ 操作系统接口 │ │ SQLite 3.3.0 - 已验证代码 │ │ │ │ • 文件 I/O │ │ • 文件锁 │ │ • 崩溃恢复 │ └────────────┬───────────────────┘ │ │ ▼ ┌──────────────┐ │ 磁盘文件 │ │ │ │ • kvstore.db│ │ • journal │ └──────────────┘结果相同的可靠性更少的层显著更快的 KV 性能。无 SQL 解析或规划无虚拟机执行直接 B‑Tree 访问典型收益更低的内存使用量可预测的延迟与最新 SQLite 的对比下表显示了在相同工作负载50,000 条记录下SQLite基于 SQL 的 KV 访问和SNKV直接 B‑Tree KV 访问各 5 次运行的平均性能。所有数字均为每秒操作数。基准测试SQLite (平均)SNKV (平均)胜出者顺序写入68,50370,888SNKV (3.5%)随机读取48,20636,210SQLite (33%)顺序扫描1,089,0492,173,141SNKV (约 2 倍)随机更新47,33947,297持平随机删除31,93744,046SNKV (38%)存在性检查59,88436,041SQLite (66%)混合工作负载 (70读/20写/10删)50,37978,860SNKV (56%)批量插入单事务104,526133,566SNKV (28%)关键观察SNKV 在写密集和混合工作负载中占优因为零 SQL/VDBE 开销。顺序扫描在 SNKV 中快约 2 倍得益于直接游标遍历。SQLite 在点查询读取/存在性检查中胜出因为它有高度优化的 VDBE 快速路径和语句缓存。更新性能基本持平相同的 B‑Tree 分页路径。基准测试代码SQLite 基准测试源码https://github.com/hash-anu/sqlite-benchmark-kvSNKV 基准测试源码snkv/tests/test_benchmark.c何时使用 SNKVSNKV 适用于嵌入式系统低内存环境配置存储元数据库需要快速 KV 访问的 C/C 应用不需要SQL 的系统以及更多场景如果你需要连接、即席查询或分析功能 — 使用 SQLite。如果你需要快速、可靠的键值存储— 使用 SNKV。总结SNKV 证明了一个简单的理念如果不需要 SQL就不要为它付出代价。通过直接建立在 SQLite 的 B‑Tree 引擎之上SNKV 交付了一个专注、快速且可靠的键值数据库同时保持了极低的复杂度。