Skip to content

Latest commit

 

History

History
381 lines (279 loc) · 9.93 KB

File metadata and controls

381 lines (279 loc) · 9.93 KB

RustKmer 项目综合总结

文档版本: 1.0
创建日期: 2026-01-18
基于文档: 11个核心Markdown文件分析


📋 项目概述

RustKmer 是一个高性能的 k-mer 计数和查询库,使用 Rust 编写,提供 Python 绑定(PyO3),专为现代生物信息学应用设计。

核心特性

  • 高性能: Rust 实现,优化内存使用和查询速度
  • 跨平台: 支持 Linux、macOS、Windows
  • Python 集成: 通过 PyO3 提供完整的 Python API
  • 多种查询模式: 支持精确查询、前缀查询、模糊查询、混合模式查询
  • 自定义数据库格式: 优化的二进制 .rkdb 格式
  • 内存映射支持: 支持大基因组建库和查询

技术栈

  • 核心语言: Rust 1.80+ (stable)
  • Python 绑定: PyO3 0.22.6+
  • Python 版本: 3.10+
  • 构建工具: Cargo, maturin
  • 测试框架: pytest, pytest-benchmark

🏗️ 架构设计

项目结构

rustkmer/
├── src/                    # Rust 核心库
│   ├── cli/               # 命令行接口
│   ├── core/              # 核心功能
│   ├── database/          # 数据库操作
│   ├── fuzzy/             # 模糊查询
│   ├── hash/              # 哈希表实现
│   ├── io/                # 输入输出
│   ├── kmer/              # k-mer 操作
│   └── memory/            # 内存管理
├── pyo3/                   # Python 绑定
│   ├── src/               # PyO3 绑定代码
│   └── tests/             # Python 测试
├── docs/                   # 文档目录
├── examples/              # 示例代码
└── tests/                 # Rust 测试

核心组件

1. Rust 核心库 (src/)

  • KmerCounter: 高性能 k-mer 计数器
  • Database: 数据库加载、查询、统计
  • Query Engine: 支持多种查询模式
  • Fuzzy Query: 模糊查询和模式匹配
  • Prefix Query: 前缀查询优化

2. PyO3 Python 绑定 (pyo3/)

  • PyDatabase: 统一的数据库接口
  • PyCounter: k-mer 计数器 Python 包装
  • PyFuzzyQuery: 模糊查询引擎
  • PyPrefixQuery: 前缀查询引擎
  • LoadMode: 数据库加载模式枚举

📊 统一接口实现 (PyO3)

背景与动机

原有问题:

  • 多个独立查询类导致内存浪费(3×内存占用)
  • API 接口分散,使用复杂
  • 功能分散在多个类中

解决方案: 将 PyDatabase、PyPrefixQuery、PyFuzzyQuery 统一为单一 PyDatabase 接口

统一接口功能

核心方法

from pyrustkmer import PyDatabase, LoadMode

# 创建统一数据库接口
db = PyDatabase("database.rkdb", LoadMode.Preload)

# 精确查询
result = db.query_exact("GCCGCGG")
result = db.query_exact_batch(["GCCGCGG", "ATCCTGA"])

# 前缀查询
prefix_results = db.query_prefix("GCC")

# 混合模式查询 (支持 {N} 语法)
hybrid_results = db.query_hybrid("AAAAAA{N5}GGGGGG")

# 模糊查询
fuzzy_results = db.query_fuzzy("ATCGATCG", max_mutations=2)

# 数据库统计
stats = db.get_stats()
memory_info = db.get_memory_usage()

LoadMode 支持

模式 说明 适用场景
Preload 预加载所有数据 小型数据库,频繁查询
MemoryMapped 内存映射访问 大型数据库,内存受限
Lazy 懒加载 内存受限,查询频率低

性能优化

指标 改进前 改进后 提升
数据库实例数 3个 1个 66%减少
内存占用 显著改善
加载时间 3×加速
API复杂度 复杂 简单 大幅简化

向后兼容性

旧接口继续可用(标记为废弃):

# 旧接口(已废弃,仍可用)
db.query()          # → 推荐使用 db.query_exact()
db.fuzzy_query()    # → 推荐使用 db.query_fuzzy()

🔧 API 命名规范

统一命名原则

采用 query_[类型]_[特性] 格式:

  • query: 统一前缀
  • [类型]: exact, prefix, hybrid, fuzzy
  • [特性]: batch, optimized

方法映射

原方法名 新方法名 状态
query() query_exact() ✅ 已更新
query_batch() query_exact_batch() ✅ 已更新
extract_by_prefix() query_prefix() ✅ 已移除冗余
query_prefix_optimized() query_prefix() ✅ 已统一
extract_by_pattern() query_hybrid() ✅ 已移除冗余
fuzzy_query() query_fuzzy() ✅ 已更新

📁 文档体系

核心文档清单

1. 项目指南

  • README.md: 项目主文档,安装和使用指南
  • USER_GUIDE.md: 详细用户指南
  • INSTALL.md: 安装说明

2. 技术文档

  • FINAL_UNIFIED_INTERFACE_REPORT.md: 统一接口最终实现报告
  • UNIFIED_INTERFACE_IMPLEMENTATION_REPORT.md: 实现细节报告
  • PYO3_UNIFIED_INTERFACE_PLAN.md: PyO3 绑定计划
  • analysis_current_naming.md: 命名分析文档

3. 开发文档

  • AGENTS.md: 开发指南和 Agent 规范
  • CLAUDE.md: Claude AI 集成指南
  • DOCUMENTATION_UPDATE_REPORT.md: 文档更新报告

4. 测试文档

  • pyo3_examples_test_report.md: PyO3 示例测试报告
  • unified_naming_proposal.md: 统一命名方案

文档统计

类别 文件数 主要内容
项目指南 3 安装、使用、快速开始
技术文档 4 API 设计、实现细节
开发文档 3 开发规范、AI 集成
测试报告 2 测试结果、命名方案

🧪 测试与验证

测试环境

  • PyO3 构建状态: ✅ 成功(仅警告,无错误)
  • Python 版本: 3.10+
  • 测试框架: pytest

测试结果

测试项目 状态 说明
API 可用性测试 ✅ 通过 模块导入、类检测、方法签名验证
功能验证 ✅ 通过 所有核心功能测试通过
性能验证 ✅ 通过 内存使用和查询性能显著改善
示例代码 ✅ 更新 10 个示例文件已更新

验证清单

  • ✅ PyO3 扩展成功编译
  • ✅ 所有核心功能测试通过
  • ✅ query_hybrid 功能完整保留
  • ✅ 内存优化实现(66% 减少)
  • ✅ LoadMode 三种模式支持
  • ✅ 向后兼容(传统接口继续可用)

🚀 安装与使用

系统要求

  • Rust: 1.80+ (stable)
  • Python: 3.10+
  • 操作系统: Linux, macOS, Windows
  • 内存: 建议 8GB+(大型基因组)

安装方法

1. pip 安装(推荐)

pip install rustkmer

2. 源码安装

# 克隆仓库
git clone https://github.com/zhangtaolab/rustkmer.git
cd rustkmer

# 安装 Python 包
cd pyo3
pip install -e .

# 或构建 Rust CLI
cd ..
cargo build --release

快速开始

from pyrustkmer import PyDatabase, PyCounter, LoadMode

# 1. 创建 k-mer 计数器
counter = PyCounter(21, canonical=True)
counter.add_sequence("ATGCGATGCATGCGATGCATGCGATGCAT")
counter.save_database("output.rkdb")

# 2. 加载数据库
db = PyDatabase("output.rkdb", LoadMode.Preload)

# 3. 执行查询
result = db.query_exact("ATGCGATGCTAGCGCTAGCTA")
print(f"Found: {result.found}, Count: {result.count}")

# 4. 获取统计信息
stats = db.get_stats()
print(f"Total k-mers: {stats.total_kmers}")
print(f"Unique k-mers: {stats.unique_kmers}")

📈 性能基准

内存优化

  • 数据库实例: 从 3 个减少到 1 个(66% 减少)
  • 加载时间: 从 3× 优化到 1×(3× 加速)
  • 内存占用: 显著降低

查询性能

查询类型 性能特点
精确查询 毫秒级响应
前缀查询 优化二分搜索
模糊查询 支持通配符和突变容忍
混合查询 支持 {N} 语法复杂模式

🎯 开发状态

已完成

  • ✅ PyO3 统一接口实现
  • ✅ 编译成功(无错误)
  • ✅ 功能验证通过
  • ✅ 性能优化完成(66% 内存减少)
  • ✅ 文档更新完成
  • ✅ 向后兼容性保持

进行中

  • 🔄 持续优化查询性能
  • 🔄 扩展模糊查询功能
  • 🔄 完善测试覆盖率

计划中

  • 📅 支持更大规模基因组数据
  • 📅 优化内存映射性能
  • 📅 添加更多示例和使用场景

🔗 相关资源

核心文档链接

API 文档

示例代码


📝 版本历史

版本 日期 主要变更
v0.4.0 2026-01-18 PyO3 统一接口实现,66% 内存优化
v0.3.0 2025-12-20 模糊查询功能添加
v0.2.0 2025-11-28 初始 PyO3 绑定

✅ 验证清单

在发布前请确认:

  • 所有测试通过
  • PyO3 编译成功(无错误)
  • 文档已更新
  • 示例代码可运行
  • 向后兼容性保持
  • 性能优化验证
  • 内存使用优化验证

📚 总结

RustKmer 项目成功实现了高性能 k-mer 计数和查询功能,通过 PyO3 统一接口大幅简化了 Python 使用体验。项目核心优势包括:

  1. 高性能: Rust 实现,优化内存和查询速度
  2. 统一接口: 单一 PyDatabase 类集成所有查询功能
  3. 内存优化: 66% 内存占用减少
  4. 向后兼容: 保持旧接口可用性
  5. 完整文档: 全面的使用指南和 API 文档
  6. 跨平台: 支持主流操作系统

项目已准备好进入生产环境使用。


文档维护: 项目团队
最后更新: 2026-01-18
版本: 1.0