RustKmer
高性能的k-mer计数和查询工具,使用Rust实现,专为现代生物信息学应用设计。
🚀 主要特性
🏆 性能优势
- 高性能查询: 优化的查询引擎,支持22,703+ queries/sec
- 排序数据库优化: 二分搜索提供384-1526倍性能提升
- 内存优化: 高效的内存管理和缓存友好的数据结构
- 大规模处理: 支持>100M k-mers的大型基因组数据集
🛠️ 核心功能
- 高性能计数: 顺序k-mer计数
- 批量查询: 高效的批量k-mer查询处理
- 🔥 模糊查询: 通配符和突变容忍搜索,支持复杂模式匹配
- 排序数据库: 二分搜索优化,无需预加载
- 标准兼容: 遵循k-mer计数的行业标准
- Python集成: 完整的Python API和示例代码
- 压缩文件支持: 自动处理.gz压缩的FASTA/FASTQ文件
- 跨平台: 支持Linux、macOS和Windows
- 内存映射: 高效的文件I/O操作
🔬 科学验证
- 准确性验证: 经过大规模真实数据测试验证
- 大规模测试: 基于OSA1 r7 assembly (381MB)的真实数据测试
- 性能分析: 详细的性能基准测试和优化建议
📦 安装
Python包 + 虚拟环境 (强烈推荐)
使用虚拟环境安装,避免与系统包冲突:
# 1. 创建虚拟环境
# 2. 激活虚拟环境
# Linux/macOS:
# Windows (Command Prompt):
# Windows (PowerShell):
# 3. 安装RustKmer
# 4. 验证安装
# 5. 完成后退出虚拟环境
使用虚拟环境的优势:
- 🛡️ 隔离性: 避免与系统Python包冲突
- 🔄 可重现: 确保项目环境一致性
- 🧹 清洁: 易于删除或重建环境
- 👥 协作: 可与团队成员共享确切环境
现代Python + uv (超快安装) ⚡
uv 是下一代Python包管理器,比pip快10-100倍:
# 1. 安装uv
# macOS/Linux:
|
# Windows PowerShell:
# 2. 创建新项目并安装RustKmer
# 3. 立即开始使用!
# 4. 创建分析脚本
# 5. 运行分析
选择uv的优势:
- 🚀 极速: 比pip快10-100倍
- 🎯 简单: 一条命令完成环境设置
- 📦 现代: 内置项目管理和依赖管理
- 🔄 可靠: 更好的缓存和依赖解析
📦 Conda环境安装 🐍
使用Conda创建隔离的Python环境,非常适合生物信息学工作流:
方法一:使用conda-forge频道 (推荐)
# 1. 安装Miniconda (如果没有conda)
# 下载: https://docs.conda.io/en/latest/miniconda.html
# 2. 创建新环境并安装RustKmer
# 3. 安装RustKmer及其依赖
# 4. 验证安装
# 5. 安装额外的数据科学工具 (可选)
方法二:从PyPI安装到Conda环境
# 1. 创建环境
# 2. 安装RustKmer及开发依赖
# 3. 验证安装
方法三:开发环境设置 (完整版)
# 1. 创建完整开发环境
# 2. 激活环境
# 3. 克隆源码并安装开发版本
# 4. 安装为可编辑包
# 5. 安装开发工具
# 6. 运行测试验证
常用Conda命令参考
# 查看环境列表
# 导出环境配置
# 从配置文件创建环境
# 删除环境
# 在环境中安装额外包
# 查看已安装包
# 更新conda和所有包
环境配置文件示例
创建 environment.yml 文件以快速设置环境:
name: rustkmer-env
channels:
- conda-forge
- defaults
dependencies:
- python=3.11
- numpy>=1.21
- matplotlib>=3.5
- pytest>=7.0
- pandas
- pip
- pip:
- rustkmer
使用方法:
Conda + Jupyter集成
# 1. 安装ipykernel
# 2. 将环境添加到Jupyter
# 3. 启动Jupyter并选择RustKmer环境
选择Conda的优势:
- 🔬 生物信息学标准: 科研领域广泛使用的环境管理工具
- 📦 依赖管理: 强大的包依赖解析和二进制分发
- 🔄 环境隔离: 完全隔离的环境,避免包冲突
- 🌍 跨平台: 统一的安装体验 (Windows/macOS/Linux)
- 🧪 实验重现: 轻松分享和重现分析环境
系统级Python安装
# 直接安装到系统(不推荐用于开发)
# 或从源码构建
从源码编译 (CLI工具) 🦀
编译后的可执行文件位于 target/release/rustkmer。
系统要求
- Python 3.8+
- Rust 1.80+ (推荐使用stable版本)
- 足够的内存处理大型数据集
- 对于大型基因组文件,建议使用SSD存储
🔧 快速开始
基本用法
# 创建排序数据库(推荐,获得最佳性能)
# 单个查询
# 批量查询(高性能)
# 🔥 模糊查询 - 通配符和突变容忍
# 数据库信息
# 合并数据库
🆕 大k-mer支持 (k > 32)
rustkmer现在支持大k-mer(k=33到64),使用u128编码:
# 使用k=33创建数据库
# 查询大k-mer
# k=64(最大支持)
# Python API中使用大k-mer
大k-mer特性:
- 支持范围: k = 1 到 64
- 存储格式: 使用16字节条目(k≤32为12字节),数据库大小增加约33%
- 性能影响: 编码性能损失<10%,查询性能损失<5%
- 内存使用: 用户可配置,无系统限制
性能关键发现
✅ 性能建议: 使用批量查询获得最佳性能:
# 推荐:高性能批量查询
# 结果:22,703 queries/sec
# 单个查询(较慢,适合少量查询)
Python集成
方式一:纯Python API(推荐)
# 导入RustKmer Python模块
# 创建k-mer计数器
=
# 处理文件(自动支持压缩格式)
# 常规FASTA文件
# 压缩FASTA文件
# 从字符串计数
# 获取统计信息
=
# 加载数据库
=
# 查询k-mer
=
方式二:PyO3高性能扩展 ⚡
# 导入PyO3扩展
# 加载数据库(高性能模式)
=
# 🔥 前缀搜索(全新功能)
=
# 🔥 混合搜索模式
=
=
# 使用专用查询引擎
=
=
🔥 模糊查询功能 (Wildcard & Mutation Tolerance)
RustKmer提供强大的模糊查询功能,支持通配符搜索和突变容忍匹配:
# 加载数据库
=
# 创建模糊查询器
=
# 通配符查询 (N = 任意碱基: A,T,C,G)
=
# 突变容忍搜索 (汉明距离)
=
# 批量模糊查询
=
=
# 结果处理
=
命令行模糊查询:
# 通配符搜索
# 突变容忍搜索
# 批量查询并导出
标准使用示例
# 计数参数
# 查询多个k-mers
# 交互式查询
📚 详细文档
完整文档和示例
- 📖 用户指南 - 完整的使用指南和最佳实践
- 🚀 快速示例 - 命令行和Python集成示例
- 📊 性能分析 - 详细的性能测试报告
- 🔥 前缀查询实现报告 - 前缀和混合搜索实现详情
- ⚡ 混合搜索指南 - 前缀和混合搜索使用说明
命令参考
count - k-mer计数
核心参数:
-k, --kmer-size <SIZE>: k-mer大小 (推荐: 21)-t, --threads <THREADS>: 线程数 (默认: CPU核心数)-o, --output <FILE>: 输出数据库文件 (必须)--sort: 创建排序数据库 (强烈推荐)-C, --canonical: 规范化k-mer计数-s, --hash-size <SIZE>: 哈希表大小 (例如: 2G, 500M)
使用示例:
# 基本计数
# 高性能排序数据库(推荐)
# 规范化计数
query - k-mer查询(高性能推荐)
核心参数:
--sequence <FILE>: 从FASTA文件批量查询-o, --output <FILE>: 输出文件 (默认: stdout)-i, --interactive: 交互式查询模式-l, --load: 强制预加载数据库 (小数据库)-L, --no-load: 禁用预加载 (大数据库推荐)
使用示例:
# 单个查询
# 批量查询(高性能)
# 交互式查询
info - 数据库信息
dump - 数据库导出
merge - 数据库合并
核心参数:
-i, --input <FILES>: 输入数据库文件 (至少2个)-o, --output <FILE>: 输出合并数据库文件 (必须)-t, --threads <THREADS>: 合并线程数 (默认: 自动检测)--check-compatibility: 仅检查兼容性,不执行合并--temp-dir <DIR>: 临时文件目录 (默认: 系统临时目录)
兼容性要求:
- 所有数据库必须具有相同的k-mer大小
- 所有数据库必须具有相同的canonical模式
- 不支持强制合并不兼容的数据库
使用示例:
# 基本合并
# 多数据库合并
# 检查兼容性
# 详细输出合并
性能优化指南
🏆 最佳性能配置
-
使用排序数据库(最重要):
-
批量查询而非单个查询:
# ✅ 推荐:批量处理 # ❌ 避免:单个查询循环 for; do done -
内存管理:
# 小数据库 (<2GB): 预加载 # 大数据库 (>2GB): 内存映射
RKDB数据库格式
RustKmer使用自定义的RKDB (RustKmer Database) 二进制格式:
文件结构:
+------------------+
| Header (42 bytes)|
+------------------+
| K-mer Entry 1 |
| - 8 bytes: k-mer |
| - 4 bytes: count |
+------------------+
| K-mer Entry 2 |
| ... |
+------------------+
Header格式:
- Magic Number (4 bytes): "RKDB"
- Version (2 bytes): 数据库版本
- K-mer Size (1 byte): k-mer长度
- Total K-mers (8 bytes): k-mer总数
- Flags (1 byte): 数据库标志 (排序、canonical等)
- Data Offset (8 bytes): 数据起始偏移
- Index Offset (8 bytes): 索引偏移 (将来使用)
性能特点:
- 排序数据库: 支持磁盘二分搜索,无需预加载
- 未排序数据库: 需要预加载到内存,适合频繁查询
- 内存映射: 使用mmap高效访问大型文件
性能优化
🏆 性能基准测试结果
大规模测试 (50,000 21-mers):
| 工具 | 查询速度 | 处理时间 | 性能提升 |
|---|---|---|---|
| RustKmer | 22,703 queries/sec | 2.20秒 | 基准 |
数据库优化效果:
| 数据库类型 | 查询速度 | 性能提升 |
|---|---|---|
| 排序数据库 | 22,703 queries/sec | 384-1526x |
| 非排序数据库 | 45 queries/sec | 基准 |
关键发现:
- ✅ 排序数据库提供巨大性能提升
- ✅ 批量查询比单个查询效率高数千倍
- ✅ 高性能 Rust 实现
🚀 快速示例
基本使用示例
# 运行基本示例
# 性能基准测试
# Python集成示例
生产环境示例
# 1. 创建高性能排序数据库
# 2. 批量查询分析
# 3. 结果统计分析
| |
# 4. 合并多个数据库
🧪 测试和验证
运行测试
# 编译和运行示例
# Python依赖安装
性能验证
我们进行了大规模性能测试,验证了以下关键发现:
- 高性能查询: 22,703+ queries/sec
- 排序数据库优化: 384-1526倍性能提升
- 准确性验证: 经过大规模测试验证
- 批量查询优化: 批量查询比单个查询效率高数千倍
详细测试报告见: 性能分析文档
🐍 Python集成示例
基本Python API
# 创建k-mer计数器
=
# 处理文件(自动支持压缩格式)
# 常规FASTA文件
# 压缩FASTA文件
# 从字符串计数
# 获取统计信息
=
# 保存到数据库
# 加载数据库
=
# 查询k-mer
=
高级分析示例
# 初始化分析器
=
# 分布分析
=
# 最丰富k-mers
=
# 序列属性分析
=
# 性能基准测试
=
安装Python依赖
Python依赖包括: pandas, numpy, matplotlib (可选), seaborn (可选)
🔬 技术细节
算法实现
- 哈希表: 使用自定义的高性能哈希表实现
- 并行处理: 基于Rayon的work-stealing并行算法
- 内存管理: 智能的内存分配和回收策略
- 文件I/O: 内存映射和缓冲I/O优化
内存效率
- k-mer编码: 2-bit编码压缩DNA序列
- 紧凑存储: 优化的数据结构布局
- 流式处理: 支持超大文件的流式读取
- 垃圾回收优化: 减少内存碎片
性能配置
# Cargo.toml 性能配置
[]
= true
= 1
= "abort"
= 3
🤝 贡献
欢迎贡献代码!请遵循以下步骤:
- Fork本项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建Pull Request
开发环境设置
# 安装开发依赖
# 运行开发服务器
# 性能分析
📄 许可证
本项目采用MIT许可证 - 详见 LICENSE 文件。
🙏 致谢
- Rust社区: 提供了高性能的系统和生物信息学库
- Rayon: 出色的并行计算框架
📂 项目结构
rustkmer/
├── src/ # Rust源代码
├── examples/ # 示例和教程
│ ├── basic_usage.sh # 基本使用示例
│ ├── performance_benchmark.sh # 性能基准测试
│ ├── python_integration.py # Python API示例
│ └── requirements.txt # Python依赖
├── specs/ # 技术规范和性能分析
│ └── 003-parallel-query/ # 21-mer性能测试报告
├── USER_GUIDE.md # 完整用户指南
└── README.md # 项目说明
📞 联系方式
- 项目主页: https://github.com/your-username/rustkmer
- 问题报告: https://github.com/your-username/rustkmer/issues
- 文档: USER_GUIDE.md
🐍 Python API
RustKmer 提供了完整的Python API,让您可以直接在Python脚本中进行高性能的k-mer分析。
安装方式
RustKmer 提供两种 Python 集成方式:
方式一:纯 Python Stubs(推荐,最稳定)✅
适用于所有环境,包括 Python 3.13:
# 1. 确保 RustKmer CLI 已安装(在 PATH 中)
# 2. 安装纯 Python 包
# 3. 验证安装
工作原理:
- Python 代码作为存根(stubs)
- 实际 k-mer 操作通过调用
rustkmerCLI 完成 - 100% 兼容所有 Python 版本(包括 3.13)
- 零编译,安装即用
方式二:可编辑开发安装(开发/修改代码)⚠️
适用于开发者或需要修改 RustKmer 代码的情况:
# 1. 克隆源码
# 2. 构建 Rust CLI 工具
# 3. 设置环境变量(重要!)
# 注意:将 /path/to/rustkmer 替换为实际的 rustkmer 项目路径
# 4. 安装 Python 包(可编辑模式)
# 5. 验证安装
# 6. 测试从不同目录导入
🔧 重要配置步骤:
- PATH 设置: 确保
rustkmer命令在系统 PATH 中 - 可编辑安装: 使用
pip install -e .而不是普通安装 - 目录无关性: 修改后的代码支持从任何目录导入
✅ 已解决的问题:
- 路径依赖: 修复了只能在特定目录下工作的问题
- PATH 查找: 优化了 Rust 二进制文件的查找逻辑
- 跨目录导入: 支持从任何工作目录导入 Database 类
⚠️ 注意事项:
- 开发环境: 适合需要修改 RustKmer 源码的场景
- 维护成本: 需要同时维护 Rust 和 Python 代码
- 兼容性: 仅在 Python 3.10+ 环境下测试过
方式三:PyO3 Rust 扩展(性能最高,功能最全)⚡
推荐用于高性能计算和完整功能访问:
# 1. 安装 Rust 工具链
|
# 2. 克隆项目
# 3. 构建 PyO3 扩展(推荐 Python 3.10-3.12)
# 4. 验证安装
✅ PyO3 扩展特性:
- 最高性能: 直接Rust绑定,无CLI开销
- 完整功能: 支持所有高级功能(模糊查询、前缀搜索、混合搜索)
- 内存效率: 直接内存访问,最小化数据复制
- Python原生: 返回Python对象,无格式转换开销
⚠️ 环境要求:
- Python版本: 推荐 3.10-3.12
- Rust工具链: stable 1.80+
- 编译环境: 需要C/C++编译器
- 内存: 编译时需要额外内存
🔧 编译选项:
# 开发模式(快速编译)
# 发布模式(最优性能)
# 指定Python解释器
# 仅构建不安装
✅ 兼容性状态:
- Python 3.10: ✅ 完全支持
- Python 3.11: ✅ 完全支持
- Python 3.12: ✅ 完全支持
- Python 3.13: ⚠️ 部分支持(PyO3版本相关)
🚀 性能对比:
# PyO3扩展 - 最高性能
=
= # 直接内存访问
**💡 **:
- ****:
- ****:
- ****:
- ****:
### 安装方式对比
| | | | | | | |
|------|---------------|----------|------|--------|----------|----------|
| ** ** | ✅ 3.8-3.13 | ⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 、 |
| **** | ✅ 3.10+ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 、 |
| ** ** | ✅ 3.10-3.12 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 、 |
### PyO3 扩展特性
:
#### 🔥 高级查询功能
```
# 1. 高性能前缀搜索
=
=
# 2. 混合搜索模式
=
=
# 3. 专用查询引擎
=
=
# 4. 批量前缀查询
=
=
📊 性能监控
# 获取详细性能指标
=
# 模糊查询性能
=
🔧 加载模式
# 预加载模式(最快查询,适合小数据库)
=
# 内存映射模式(平衡内存和性能)
=
# 延迟加载模式(最低内存,适合超大数据库)
=
快速示例
K-mer 计数
# 创建k-mer计数器
=
# 从FASTA文件计数
# 从字符串计数
# 获取统计信息
=
# 保存数据库
数据库查询
# 加载数据库
=
# 单个查询
=
# 前缀查询
=
# 检查k-mer是否存在
数据库统计
=
# 可以通过前缀查询来了解数据库大小
=
数据库导出
=
# 导出为文本格式(通过前缀查询并写入文件)
=
数据库合并
# 使用命令行工具合并数据库
# rustkmer merge -i sample1.rkdb sample2.rkdb -o merged.rkdb
# 然后在Python中加载合并后的数据库
=
性能优势
- 高性能: Rust核心实现,比纯Python实现快100倍以上
- 内存效率: 支持大型数据库的内存映射访问
- 线程安全: 可以在多线程环境中安全使用
- 兼容性: 与CLI命令行工具完全兼容
更多详细信息请查看 pyrustkmer Python 包 (pyo3/)。
🛠️ 故障排除
常见导入问题
问题1: ImportError: cannot import name 'PyDatabase'
# 检查 pyrustkmer 是否安装
|
# 如果没有安装,重新安装
问题2: 只能在特定目录下导入
# 确保使用了正确安装
# 测试从不同目录导入
问题3: ImportError: No module named 'pyrustkmer'
# 检查包是否正确安装
|
# 如果没有安装,重新安装
问题4: 无法找到 rustkmer 命令
# 检查 rustkmer 是否在 PATH 中
# 如果没有,添加 rustkmer 到 PATH
问题5: PyO3 扩展编译失败
# 检查 Rust 工具链
# 检查 Python 开发头文件
# Ubuntu/Debian 安装开发依赖
# macOS 安装 Xcode 命令行工具
# 手动编译调试
问题5.1: VIRTUAL_ENV 和 CONDA_PREFIX 环境冲突
# 错误信息示例
# 💥 maturin failed
# Caused by: Both VIRTUAL_ENV and CONDA_PREFIX are set. Please unset one of them
# CondaError: Run 'conda init' before 'conda deactivate'
# CONDA_PREFIX: /Users/forrest/miniconda3
# 解决方案1: 停用 conda 环境(推荐)
# 然后重新运行
# 解决方案2: 停用虚拟环境
# 然后重新运行
# 解决方案3: 直接清理环境变量(最有效)
# 验证清理结果
# 确认都为空后重新编译
# 解决方案4: 手动设置环境(完全控制)
# 临时禁用conda
# 然后编译
# 解决方案5: 在新的干净shell中运行
# 打开新的终端窗口或标签页
# 确保没有激活任何环境
# 然后运行
问题5.2: 清理环境后重新编译
# 清理之前的编译结果
# 确保环境干净
# 重新编译
问题5.3: 环境隔离最佳实践
# 推荐做法1: 使用纯 conda 环境
# 推荐做法2: 使用纯 virtualenv 环境
# 推荐做法3: 使用系统Python(最简单)
# 确保没有激活任何虚拟环境
||
||
# 使用系统Python直接编译
# 避免混用环境
# ❌ 不要同时激活 virtualenv 和 conda
问题5.4: conda 没有初始化时的解决方案
# 症状: CondaError: Run 'conda init' before 'conda deactivate'
# 解决方案1: 手动清理 conda 环境变量
# 清理 conda 相关的PATH
# 解决方案2: 使用绝对路径运行Python
# 完全绕过虚拟环境
# 解决方案3: 重新初始化 conda(如果需要)
# 首先清理所有环境变量
# 然后重新初始化
# 或
# 现在可以正常使用 conda
问题5.5: PyO3 链接器错误解决方案
# 症状: ld: symbol(s) not found for architecture arm64
# clang: error: linker command failed with exit code 1
# 解决方案1: 使用正确的链接器标志(macOS)
# 解决方案2: 指定正确的Python解释器
PYO3_PYTHON=/usr/bin/python3
# 解决方案3: 结合使用(最可靠)
# 解决方案4: 测试导入
问题6: PyO3 导入错误
# 验证 PyO3 扩展安装
# 测试基本功能
问题7: PyO3 性能不如预期
# 检查是否使用了正确的加载模式
# 对于小数据库,使用预加载
=
# 对于大数据库,使用内存映射
=
# 使用优化方法
# ✅ 优化方法
=
问题8: Python 3.13 兼容性问题
# Python 3.13 用户建议使用 pyrustkmer
# 或使用 Python 3.10-3.12 环境以获得完整功能
问题9: 防止环境冲突的最佳实践
# 1. 明确选择一种环境管理方式
# 方式A: 纯 conda
# 在此环境中进行所有操作
# 方式B: 纯 virtualenv
# 在此环境中进行所有操作
# 方式C: 系统Python(最简单,避免环境问题)
# 不激活任何环境,直接使用系统Python
# 2. 检查当前环境状态
|
# 3. 一键清理环境脚本
# 使用方法
# 然后运行编译
# 4. 在项目目录中创建环境检查脚本
# 5. PyO3 构建专用脚本
验证安装完整性
# 完整的安装验证脚本
"""验证 RustKmer 安装的完整性"""
# 1. 验证 pyrustkmer
# 2. 测试基本功能
# 6. PyO3 扩展已经集成到 pyrustkmer 中,无需单独验证
# 7. 系统信息检查
# 8. 性能建议
return True
# 运行验证
开发环境建议
如果您需要修改 RustKmer 的源代码,建议使用以下工作流:
# 1. 设置开发环境
# 2. 创建开发分支
# 3. 进行修改
# ... 修改 Rust 和/或 Python 代码 ...
# 4. 构建和测试
&&
# 5. 验证功能
# 6. 提交更改
🏆 项目状态
✅ 已完成功能:
- 高性能k-mer计数
- 批量k-mer查询
- 数据库合并功能
- 排序数据库优化
- 🔥 前缀查询和混合搜索
- 🔥 PyO3高性能Python扩展
- Python API集成(多种方式)
- 完整的性能测试验证
🚀 性能指标:
- 高性能查询: 22,703+ queries/sec
- 排序数据库优化: 384-1526倍性能提升
- 支持>100M k-mers大规模数据
- PyO3扩展:最高性能和完整功能访问
🛠️ Python集成选项:
- 纯Python Stubs: 广泛兼容,零编译
- 可编辑安装: 开发调试,代码修改
- PyO3扩展: 最高性能,功能最全
RustKmer: 为现代生物信息学设计的高性能k-mer分析工具。通过大规模性能测试验证,相比传统工具实现显著性能提升,是生产环境k-mer分析的理想选择。