DDB 版本 2
一个高性能、安全的SQL接口,用于处理CSV和分隔符文件。
使用完整的SQL功能查询平面文件——无需数据库服务器。用Rust构建,以实现最大性能和安全性。
SELECT u.name, COUNT(o.id) as orders, SUM(o.total) as revenue
FROM users.csv u
INNER JOIN orders.csv o ON u.id = o.user_id
GROUP BY u.name
HAVING revenue > 10000
ORDER BY revenue DESC为何选择DDB v2?
- 🚀 表情符号“🚀”在中文中通常被翻译为“火箭”或直接保留为“🚀”(因其本身已具象化为火箭形状),用以表达快速、前进或创新等含义。在无具体语境时,可简化为“火箭”来传达其核心意象。 快速 - 零拷贝解析,流式架构,编译性能
- 🔒(锁形图标,通常表示安全、保密或锁定状态) 安全 - 内存安全的Rust,文件锁定,无SQL注入
- 💪(强健、力量的象征) 强大的 - 完整SQL:JOIN、GROUP BY、HAVING、UPSERT、101+个函数
- 🤖 机器人 AI就绪 - 内置用于Claude及其他AI助手的MCP服务器
- 📦(包裹/箱子) 便携式 - 单一二进制文件,无依赖,随处可用
- 🎯(目标) 简单 - 无需数据库服务器,无需复杂的设置
这是 DDB v2(可译为“DDB第二版”或根据具体上下文调整为更贴切的表述,如“DDB 2.0版本”等) - 用Rust语言全面重写。在保持使用SQL查询分隔文件的核心功能的同时,提供了更好的性能、内存安全性和安全性。
用例
非常适合:
- 📊 对CSV/TSV导出数据进行特定分析
- 🔄 ETL数据转换,无需设置数据库
- 🧪 使用扁平文件数据进行测试和原型制作
- 📝 日志文件分析与报告
- 🤖 人工智能助手查询结构化数据文件
- 🚀 在容器/持续集成环境中实现无服务器数据处理
- 💼 数据审计与合规检查
示例场景:
# Analyze web server logs
ddb --query "SELECT ip, COUNT(*) FROM access.log GROUP BY ip ORDER BY count DESC LIMIT 10"
# Join sales data from multiple CSV exports
ddb --query "
SELECT r.region, SUM(s.amount) as total_sales
FROM sales.csv s
JOIN regions.csv r ON s.region_id = r.id
GROUP BY r.region
"
# Update customer records in place
ddb --query "UPDATE customers.csv SET status = 'premium' WHERE total_purchases > 10000"当前实施状态
✅ 已全面实施(v0.1.0):
- SQL查询支持:
- 使用以下内容完成SELECT语句的实现: - JOIN 操作 (内连接,左连接,右连接,全外连接) - GROUP BY(按...分组) 使用聚合函数 - HAVING(在SQL中,用于指定分组条件的子句,可翻译为“具有”或根据上下文具体翻译为“基于”等,但单独使用时,通常保持为HAVING以符合SQL语法习惯) 过滤聚合子句 - 带有复杂条件(AND、OR、比较运算符)的WHERE子句评估 - 按(升序/降序,多列)排序 - LIMIT 和 OFFSET - 不同的;独特的 - 聚合函数(COUNT,SUM,AVG,MIN,MAX,STDDEV,VARIANCE)
- 数据修改操作:
- 插入 - 在表格中添加新行 - 更新 - 使用WHERE条件修改现有行 - 删除 - 使用WHERE条件删除行 - UPSERT(在数据库操作中,通常指“更新或插入”操作,即如果记录存在则更新,否则插入) - 根据键列插入或更新 - 文件锁定以确保安全并发操作
- 101+ 个 SQL 函数:
- 数学:ABS(绝对值)、ROUND(四舍五入)、SQRT(平方根)、POW(幂运算)、MOD(取模)、CEIL(向上取整)、FLOOR(向下取整)等。 - 字符串函数:CONCAT(连接)、UPPER(转大写)、LOWER(转小写)、TRIM(修剪)、SUBSTR(子串)、LENGTH(长度)、LIKE(模式匹配)等。 - 日期/时间:NOW(当前时间)、DATEDIFF(日期差)、DATEADD(日期加减)、YEAR(年份)、MONTH(月份)、DAY(天数)等。 - 条件函数:IF(如果)、IFNULL(如果为空)、COALESCE(合并空值)、CASE(条件表达式)、NULLIF(如果相等则返回空值) - 实用工具:BASE64、HASH、REGEXP、SPLIT_PART、UUID 等。
- 系统变量:
- MSSQL风格 @@VARIABLE 语法 - 变量: @@VERSION, @@DB_NAME, @@DB_TYPE等。
- 输出格式:
- JSON、YAML、CSV、XML、终端表格
- 演出
- 4大主要优化: 1. 基于堆的LIMIT - ORDER BY LIMIT 查询速度提升 7%-11% 1. 用于JOIN操作的哈希索引 - 等值连接速度提升100至1000倍(从O(n×m)优化至O(n+m)) 1. 内存映射输入/输出(Memory-mapped I/O) - 大文件(>=10MB)的读取速度提高2-3倍 1. 并行聚合 - 在多核处理器上,SUM/AVG/STDDEV 的速度提升 2-4 倍(针对 >=1K 行数据) - 流式架构(内存高效) - 零拷贝解析 nom - LIKE 模式优化(速度提升19.6倍) - 看见 BENCHMARKS.md 翻译为中文是:基准测试文件.md(或“基准指标文件.md”,具体翻译可能根据上下文有所调整,但“基准测试”是较为常见的翻译) 附带图表的详细性能指标
- MCP 服务器:
- 人工智能助手的模型上下文协议集成 - 3个工具(支持完整的CRUD操作),2个资源,2个提示 - 通过……激活 --mcp 旗帜
- DDL 操作:
- 创建表 - 使用SQL定义表模式(替代YAML) - 删除表 - 删除表定义 - SET(可译为“集合”或根据上下文具体含义翻译,如“设置”等,但此处直接保留原英文缩写) - 配置会话变量 - 基于SQL的模式定义,支持完整类型
📋(清单/待办事项列表) 尚未实现:
- 事务支持(BEGIN,COMMIT,ROLLBACK)
- 子查询和CTE(公共表表达式)
- 窗口函数
- 创建索引,修改表
快速入门
# 1. Build DDB
cargo build --release
# 2. Create configuration directory
mkdir -p ~/.ddb/schemas
# 3. Create main config file
cat > ~/.ddb/config.yaml ~/.ddb/schemas/users.sql 5
"特点/特性
安全第一
- 内存安全的Rust实现
- 无SQL注入漏洞(使用了参数化查询)
- 全程妥善处理错误
- 文件锁定可防止并发写入冲突
演出
- 零拷贝解析
nom - 基于流/迭代器的文件读取(低内存占用)
- 使用链接时优化(LTO)和优化选项编译的二进制文件
- 对大文件的内存映射文件支持
兼容性
- 与Python DDB相同的配置格式
- 支持类似的SQL方言
- 多种输出格式
建筑;大楼
# Development build
cargo build
# Release build (optimized)
cargo build --release
# Run tests
cargo test
# Run benchmarks
cargo bench使用方法
CLI 使用方法
# Execute a SQL query
./target/release/ddb --query "SELECT * FROM users WHERE id = 123"
# With debug output
./target/release/ddb --query "SELECT * FROM test" --debug
# Specify config directory
./target/release/ddb --query "SELECT * FROM test" --config ./config
# Show version
./target/release/ddb versionSQL 示例
使用 JOIN 的 SELECT:
SELECT u.name, o.order_id, o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE o.total > 100
ORDER BY o.total DESC使用 HAVING 的 GROUP BY:
SELECT category, COUNT(*) as total, AVG(price) as avg_price
FROM products
GROUP BY category
HAVING COUNT(*) > 5 AND AVG(price) > 50
ORDER BY total DESC插入数据:
INSERT INTO users (id, name, email, age)
VALUES (101, 'John Doe', 'john@example.com', 30)更新记录:
UPDATE users
SET age = 31, email = 'newemail@example.com'
WHERE name = 'John Doe'删除记录:
DELETE FROM users WHERE age 50000
ORDER BY avg_salary DESCMCP服务器(AI集成)
DDB 包含一个 MCP(模型上下文协议)服务器,用于与 Claude 等人工智能助手实现无缝集成。
# Build (MCP included by default)
cargo build --release
# Run the MCP server
./target/release/ddb --mcpMCP服务器提供:
- 3个工具:
- execute_query - 完全支持CRUD操作(带JOIN/GROUP BY/HAVING的SELECT,INSERT,UPDATE,DELETE,UPSERT) - list_tables - 列出所有已配置的表 - describe_table - 获取表架构和元数据
- 2. 资源类型配置和表模式
- 2 个提示查询生成和数据分析模板
见 MCP_SERVER.md 翻译成中文是:“MCP服务器.md”(注:这里的“.md”通常表示Markdown文件格式,但在中文语境下,我们通常直接保留“.md”以指明文件类型,不进行翻译) 以获取完整文档。
配置
DDB 使用位于(指定路径或位置的)配置文件 ~/.ddb/ (或者通过自定义目录 --config)。
主要配置(~/.ddb/config.yaml)
default_database: main
schema_dir: ~/.ddb/schemas
default_delimiter: ','
data_starts_on: 0 # Line where data starts (0 = after header)
comment_char: '#' # Optional: lines starting with this are ignored
default_output_format: table表模式(~/.ddb/schemas/users.sql)
现在使用SQL CREATE TABLE语句来定义表:
CREATE TABLE IF NOT EXISTS users (
id INTEGER NOT NULL,
name STRING NOT NULL,
email STRING,
age INTEGER,
created_at DATETIME NOT NULL
)
FILE '/path/to/users.csv'
DELIMITER ','
DATA_STARTS_ON 1
COMMENT_CHAR '#'
QUOTE_CHAR '"';创建表 Options:
IF NOT EXISTS- 如果表已存在,则不要报错FILE 'path'- 数据文件的路径DELIMITER 'char'- 字段分隔符(默认:,)DATA_STARTS_ON n- 数据开始的行号COMMENT_CHAR 'char'- 以这个开头的行将被忽略QUOTE_CHAR 'char'- 用于引用字段的字符
支持的数据类型
Integer- 64位有符号整数Float- 64位浮点数String- UTF-8 文本Boolean- 真/假Date- 仅日期(YYYY-MM-DD)DateTime- 日期和时间Time- 仅时间(HH:MM:SS)
目录结构
~/.ddb/
├── config.yaml # Main configuration
└── schemas/
├── users.sql # Table definition (CREATE TABLE statement)
├── orders.sql # Table definition (CREATE TABLE statement)
├── products.sql # Table definition (CREATE TABLE statement)
└── ...建筑学
src/
├── lib.rs # Main library entry point
├── error.rs # Error types and Result alias
├── lexer/ # Tokenization
│ ├── mod.rs
│ ├── types.rs # Token types
│ └── tokenizer.rs # SQL tokenizer
├── parser/ # SQL parsing
│ ├── mod.rs
│ └── ast.rs # Abstract syntax tree
├── config/ # Configuration management
│ └── mod.rs # Database, Table, Column structs
├── file_io/ # File operations
│ ├── locking.rs # File locking for concurrency
│ └── reader.rs # Streaming line reader
├── engine/ # Query execution
├── methods/ # SQL operations (SELECT, INSERT, etc.)
├── functions/ # SQL functions
├── output/ # Output formatters
├── mcp/ # Model Context Protocol server
│ ├── mod.rs
│ ├── server.rs # MCP server implementation (JSON-RPC over stdio)
│ ├── tools.rs # MCP tools (3 tools)
│ ├── resources.rs # MCP resources (2 types)
│ └── prompts.rs # MCP prompts (2 prompts)
└── bin/
└── ddb.rs # CLI binary (includes --mcp mode)设计原则
- 内存效率逐行流式传输数据,绝不将整个文件加载到内存中
- 安全利用Rust的类型系统在编译时防止错误
- 演出使用零拷贝解析,避免不必要的内存分配
- 正确性全面测试与错误处理
- 人体工程学简洁的API和良好的错误提示信息
依赖项
nom- 用于SQL分词的快速解析器组合器serde- 序列化/反序列化chrono- 日期/时间函数fs2- 文件锁定以实现并发访问memmap2- 对于大文件的内存映射文件I/Orayon- 聚合操作中的数据并行性clap- CLI 参数解析thiserror/anyhow- 错误处理regex- 用于LIKE操作的模式匹配uuid- UUID生成
基准(或标准)
运行基准测试以验证性能:
# Run all benchmarks
cargo bench
# View detailed results
open target/criterion/report/index.html性能亮点:
- 分词(或标记化)简单SELECT操作的延迟约为0.5微秒(0.0000005秒)(约200万次查询/秒)
- 全表扫描吞吐量约为1.2百万行/秒
- 聚合~1.9百万行/秒(计数/求和/平均值)
- JOINs(在编程或数据库语境中,通常翻译为“连接”或“连接操作”,具体根据上下文可能有所不同)使用哈希索引优化后,速度提升100-1000倍(时间复杂度从O(n×m)降至O(n+m))
- 批量插入每行处理速度比单条插入快36倍(对于100行批次,速度约为280万行/秒)
见 BENCHMARKS.md 翻译为中文是:“基准测试.md” 提供包含详细性能图表和易于人类理解的时间转换的全面基准测试结果。
贡献
欢迎贡献!未来发展的重点领域:
- 子查询 - 嵌套的SELECT语句
- 交易支持 - 开始(BEGIN),提交(COMMIT),回滚(ROLLBACK)
- 窗口函数 - ROW_NUMBER(行号)、RANK(排名)、LAG(滞后值)、LEAD(超前值)等。
- CTEs(Common Table Expressions,公用表表达式) - 公共表表达式(WITH 子句)
- 创建索引 - 创建索引以加快查找速度
- ALTER TABLE(在SQL中,此语句用于修改数据库表的结构) - 模式修改
- 附加测试 - 更高的单元测试和集成测试覆盖率
- 查询规划 - 针对复杂查询的成本优化器
许可证
知识共享署名-非商业性使用-相同方式共享(CC-BY-NC-SA-4.0)
