ScyllaDB开发指南:从环境搭建到代码贡献全流程

ScyllaDB开发指南:从环境搭建到代码贡献全流程

scylladb ScyllaDB是一个高性能、高度可扩展的NoSQL数据库,设计上兼容Cassandra API,主打低延迟、高并发写入,适用于大规模互联网应用。 scylladb 项目地址: https://gitcode.com/gh_mirrors/sc/scylladb

前言

ScyllaDB是一个高性能的分布式NoSQL数据库,采用C++编写,兼容Apache Cassandra接口。本文将详细介绍ScyllaDB的开发环境搭建、代码编译、测试流程以及贡献代码的规范,帮助开发者快速上手ScyllaDB的开发工作。

开发环境准备

源码获取与初始化

ScyllaDB使用Git子模块管理其依赖项,包括Seastar框架等核心组件。获取源码时需要特别注意子模块的初始化:

git clone <scylla-repo-url>
cd scylla
git submodule update --init --recursive

依赖管理

ScyllaDB对构建环境有严格要求,需要较新版本的C++23编译器及大量工具链支持。开发者有两种选择:

  1. 本地环境安装

    • 运行./install-dependencies.sh脚本安装所需依赖
    • 仅适用于较新的Linux发行版(如Fedora 32+)
  2. 容器化构建工具链(推荐):

    • 使用./tools/toolchain/dbuild脚本在容器中构建
    • 确保环境一致性,也是官方发布使用的构建方式

容器化构建示例:

./tools/toolchain/dbuild ./configure.py
./tools/toolchain/dbuild ninja build/release/scylla

构建系统详解

构建配置

ScyllaDB使用Ninja作为构建系统,通过Python脚本configure.py生成构建配置:

./configure.py
ninja-build

重要构建选项:

  • --enable-dpdk:启用DPDK支持(高性能网络包处理)
  • --split-dwarf:启用调试信息分离,加速链接过程

构建模式

ScyllaDB支持多种构建模式,各有特点:

  1. Debug模式

    • 启用AddressSanitizer等检查
    • 无优化,适合调试
    • 生成较大的二进制文件
  2. Release模式

    • 启用优化
    • 保留调试信息
    • 适合性能测试
  3. Dev模式

    • 无优化和调试信息
    • 编译速度最快
    • 适合快速迭代

构建目标指定

可以指定特定目标构建,节省时间:

ninja-build build/release/tests/schema_change_test
ninja-build build/release/service/storage_proxy.o

测试流程

单元测试

测试代码位于/tests目录,使用Boost.Test框架编写。运行测试的方式:

  1. 使用测试包装器:
./test.py --mode=release
  1. 直接运行测试可执行文件:
build/release/tests/row_cache_test -- -c1 -m1G

测试参数说明

  • -c1:限制使用1个CPU核心
  • -m1G:限制使用1GB内存

代码贡献规范

补丁提交流程

  1. 分支管理

    • 为每个功能/修复创建独立分支
    • 命名规范:<开发者缩写>/<功能描述>/v<版本号>
  2. 补丁格式

    • 配置Git使用.gitorderfile
    git config diff.orderfile .gitorderfile
    
  3. 变更说明

    • 在补丁中包含测试结果
    • 多版本补丁需包含变更摘要

代码审查

  1. 使用scripts/find-maintainer脚本查找合适的审查者:
./scripts/find-maintainer cql3/statements/create_view_statement.hh
  1. 审查建议:
    • 使用内联引用回复评论
    • 参考Linux内核补丁提交规范

运行ScyllaDB实例

基本配置

  1. 创建开发环境目录结构:
mkdir -p $HOME/scylla $HOME/scylla/conf
cp conf/scylla.yaml $HOME/scylla/conf/scylla.yaml
  1. 修改配置文件:
    • 调整数据目录路径
    • 开发模式下可放宽性能要求

启动参数

开发推荐参数:

SCYLLA_HOME=$HOME/scylla build/release/scylla --overprovisioned --developer-mode=yes

重要参数说明:

  • --overprovisioned:适用于资源受限环境
  • --developer-mode=yes:放宽系统要求

高级开发技巧

分布式编译优化

  1. 工具组合

    • ccache:缓存编译结果
    • distcc:分布式编译
  2. 配置示例:

export CCACHE_PREFIX="distcc"
ninja-build -j20

链接优化

  1. 使用gold链接器替代GNU ld:
sudo alternatives --config ld
  1. 调试信息分离:
    • 通过--split-dwarf选项启用
    • 显著减少链接时间

Seastar开发集成

当需要同时修改Seastar和ScyllaDB时,可通过本地远程仓库实现:

cd seastar
git remote add local /path/to/seastar/repo

开发工具推荐

IDE支持

  1. CLion配置

    • 使用CMake项目支持
    • 配置工具链:
      • CMake: cmake
      • Build Tool: ninja
      • 编译器: clang
  2. 其他选项

    • KDevelop
    • QtCreator
    • Eclipse CDT(有限支持)

分支策略

  • master分支:主开发分支
  • branch-x.y分支:版本维护分支(如branch-1.5
  • scylla-x.y.z标签:发布版本标记

重要补丁从mastercherry-pick到维护分支。

结语

本文全面介绍了ScyllaDB的开发环境搭建、代码构建、测试方法和贡献流程。通过遵循这些指南,开发者可以更高效地参与ScyllaDB的开发工作。对于性能敏感的开发任务,特别推荐使用容器化工具链和分布式编译技术来提升开发效率。

scylladb ScyllaDB是一个高性能、高度可扩展的NoSQL数据库,设计上兼容Cassandra API,主打低延迟、高并发写入,适用于大规模互联网应用。 scylladb 项目地址: https://gitcode.com/gh_mirrors/sc/scylladb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪赫逊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值