Milvus开发环境搭建与测试指南
前言
Milvus作为一款开源的向量数据库系统,其开发环境搭建和测试流程对于开发者而言至关重要。本文将详细介绍如何在本地环境中搭建Milvus开发环境,并运行各类测试,帮助开发者快速上手Milvus的开发工作。
开发环境搭建
硬件要求
建议开发环境满足以下硬件配置:
- 内存:8GB及以上
- 磁盘空间:50GB可用空间
操作系统支持
Milvus支持在多种操作系统上进行开发,包括:
- Linux发行版(推荐Ubuntu 20.04或更新版本)
- MacOS(x86_64和Apple Silicon架构)
软件依赖安装
基础工具链
-
编译器:
- Linux:GCC 7.5或更高版本
- MacOS:LLVM 15或更高版本
-
构建工具:
- CMake 3.18或更高版本
- Make工具
验证安装:
gcc --version
make --version
cmake --version
依赖管理工具
-
Conan:
- 版本要求:1.61(注意:2.x版本暂不支持)
- 安装命令:
pip install conan==1.64.1
-
Go语言环境:
- 版本要求:1.21或更高
- 配置GOPATH和GOBIN环境变量
- 验证安装:
go version
-
Docker环境:
- 用于运行依赖服务(etcd、Pulsar、MinIO)
- 安装Docker和Docker Compose
一键安装依赖
在Milvus项目根目录下运行:
./scripts/install_deps.sh
项目构建
完整构建
make
跳过第三方依赖检查(网络不佳时使用)
make SKIP_3RDPARTY=1
生成Proto文件
make generated-proto-go
运行Milvus
构建成功后,可执行文件位于bin/milvus
,运行命令:
LD_LIBRARY_PATH=./internal/core/output/lib:lib:$LD_LIBRARY_PATH ./bin/milvus
测试流程
预提交验证
运行所有预提交检查:
make verifiers
单元测试
准备测试环境
-
启动依赖服务:
cd deployments/docker/dev docker compose up -d cd ../../../
-
运行所有单元测试:
make unittest
特定测试
-
仅运行C++测试:
make test-cpp
-
仅运行Go测试:
make test-go
-
运行单个测试用例(示例):
source scripts/setenv.sh && go test -v ./internal/proxy/ -test.run TestSearchTask
代码覆盖率
生成代码覆盖率报告:
make codecov
报告路径:
- Go:
go_coverage.html
- C++:
cpp_coverage/index.html
端到端测试
-
启动Milvus服务:
- 集群模式:
./scripts/start_cluster.sh
- 单机模式:
./scripts/start_standalone.sh
- 集群模式:
-
运行E2E测试:
cd tests/python_client pip install -r requirements.txt pytest --tags=L0 -n auto
常见问题解决方案
MacOS特定问题
-
Go构建失败(Apple Silicon):
- 确认安装ARM64架构的Go版本
-
链接错误(-lSystem):
sudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install
-
Rocksdb编译警告:
- 通过系统更新安装最新命令行工具
系统页大小问题
当系统使用大内存页时(如64KB),需在编译时明确声明:
-
检查页大小:
getconf PAGESIZE
-
修改构建配置(
scripts/core_build.sh
):+ -DMILVUS_JEMALLOC_LG_PAGE=16 \
其他问题
- Conan版本不兼容:使用1.61版本
- Python模块缺失:降级到Python 3.11
- Brew连接问题:调整git配置:
git config --global http.postBuffer 1M
开发建议
- IDE配置:使用VSCode时,可配置C++和Go的集成开发环境
- 代码风格:遵循项目代码规范,使用gofumpt格式化工具
- 测试覆盖:确保新代码有足够的测试覆盖率
通过本文的指导,开发者应该能够顺利搭建Milvus开发环境,并运行各类测试。如在开发过程中遇到其他问题,建议查阅项目文档或与社区交流获取支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考