This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

开发手册

1 - 支持平台

作为一个开源的数据库,HoraeDB 可以部署在基于英特尔 /ARM 架构的服务器,以及常见的虚拟环境。

OSstatus
Ubuntu LTS 16.06 or later
CentOS 7.3 or later
Red Hat Enterprise Linux 7.3 or later 7.x releases
macOS 11 or later
Windows
  • 生产环境下 , Linux 是首选平台。
  • macOS 主要用在开发环境。

2 - 编译

为了编译 HoraeDB, 首先需要安装相关的依赖(包括 Rust 的工具链)。

依赖

Ubuntu

假设我们的开发环境是 Ubuntu20.04, 可以执行如下命令来安装所需的依赖。

1
sudo apt install git curl gcc g++ libssl-dev pkg-config protobuf-compiler

macOS

如果你的开发环境是 MacOS ,可以使用如下命令手动安装这些依赖项的高版本。

  1. 安装命令行工具:
1
xcode-select --install
  1. 安装 protobuf:
1
brew install protobuf

Rust

Rust 可以使用 rustup 来安装。 安装 Rust 后,进入 HoraeDB 工程目录,根据工具链文件指定的 Rust 版本会被自动下载。

执行后,你需要添加环境变量来使用 Rust 工具链。只要把下面的命令放到你的~/.bashrc~/.bash_profile中即可。

1
source $HOME/.cargo/env

编译运行

horaedb-server

在项目根目录下,执行如下命令编译 horaedb-server:

cargo build

之后可以用下面命令运行它:

1
./target/debug/horaedb-server --config ./docs/minimal.toml

常见问题

在 macOS 上编译时,可能会遇到下面的错误:

IO error: while open a file for lock: /var/folders/jx/grdtrdms0zl3hy6zp251vjh80000gn/T/.tmpmFOAF9/manifest/LOCK: Too many open files

or

error: could not compile `regex-syntax` (lib)
warning: build failed, waiting for other jobs to finish...
LLVM ERROR: IO failure on output stream: File too large
error: could not compile `syn` (lib)

可以通过下面的命令来解决:

1
2
ulimit -n unlimited
ulimit -f unlimited

horaemeta-server

编译 horaemeta-server 前需要安装 Golang,要求 Golang 版本 >= 1.21。

horaemeta 目录下,执行:

1
go build -o bin/horaemeta-server ./cmd/horaemeta-server/main.go

可以使用如下命令运行它:

1
bin/horaemeta-server

3 - 性能诊断

CPU 剖析

HoraeDB 提供 CPU 剖析 http 接口 debug/profile/cpu.

例子:

// 60s CPU 采样数据
curl 0:5000/debug/profile/cpu/60

// 产出文件
/tmp/flamegraph_cpu.svg

内存剖析

HoraeDB 提供内存剖析 http 接口 debug/profile/heap.

安装依赖

sudo yum install -y jemalloc-devel ghostscript graphviz

例子:

// 开启 malloc prof
export MALLOC_CONF=prof:true

// 运行 horaedb-server
./horaedb-server ....

// 60s 内存采样数据
curl -L '0:5000/debug/profile/heap/60' > /tmp/heap_profile
jeprof --show_bytes --pdf /usr/bin/horaedb-server /tmp/heap_profile > profile_heap.pdf

jeprof --show_bytes --svg /usr/bin/horaedb-server /tmp/heap_profile > profile_heap.svg

4 - RoadMap

v0.1.0

  • 支持基于本地磁盘的 Standalone 版本
  • 支持分析存储格式
  • 支持 SQL

v0.2.0

  • 静态路由的分布式版本
  • 远端存储支持阿里云 OSS
  • 支持基于 OBKV的 WAL

v0.3.0

  • 发布多语言客户端,包括 Java, Rust 和 Python
  • 支持使用 HoraeMeta 的静态集群
  • 混合存储格式基本实现

v0.4.0

  • 实现更复杂的集群方案,增强 HoraeDB 的可靠性和可扩展性
  • 构建日常运行的、基于 TSBS 的压测任务

v1.0.0-alpha (Released)

  • 基于 Apache Kafka 实现分布式 WAL
  • 发布 Golang 客户端
  • 优化时序场景下的查询性能
  • 支持集群模式下表的动态转移

v1.0.0

  • 正式发布 HoraeDB 和相关 SDK,并完成所有的 breaking changes
  • 完成分区表的主要工作
  • 优化查询性能,特别是云原生集群模式下,包括:
    • 多级缓存
    • 多种方式减少从远端获取的数据量(提高 SST 数据过滤精度)
    • 提高获取远程对象存储数据的并发度
  • 通过控制合并时的资源消耗,提高数据写入性能

Afterwards

随着对时序数据库及其各种使用情况的深入了解,我们的大部分工作将聚焦在性能、可靠性、可扩展性、易用性以及与开源社区的合作方面

  • 增加支持 PromQL, InfluxQL, OpenTSDB 协议
  • 提供基础的运维工具。特别包括如下:
    • 适配云基础设施的部署工具,如 Kubernetes
    • 加强自监控能力,特别是关键的日志和指标
  • 开发多种工具,方便使用 HoraeDB,例如,数据导入和导出工具
  • 探索新的存储格式,提高混合负载(分析和时序负载)的性能