This is the multi-page printable view of this section. Click here to print.
开发手册
1 - 支持平台
作为一个开源的数据库,HoraeDB 可以部署在基于英特尔 /ARM 架构的服务器,以及常见的虚拟环境。
OS | status |
---|---|
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, 可以执行如下命令来安装所需的依赖。
|
|
macOS
如果你的开发环境是 MacOS
,可以使用如下命令手动安装这些依赖项的高版本。
- 安装命令行工具:
|
|
- 安装 protobuf:
|
|
Rust
Rust
可以使用 rustup 来安装。
安装 Rust
后,进入 HoraeDB 工程目录,根据工具链文件指定的 Rust
版本会被自动下载。
执行后,你需要添加环境变量来使用 Rust
工具链。只要把下面的命令放到你的~/.bashrc
或~/.bash_profile
中即可。
|
|
编译运行
horaedb-server
在项目根目录下,执行如下命令编译 horaedb-server:
cargo build
之后可以用下面命令运行它:
|
|
常见问题
在 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)
可以通过下面的命令来解决:
|
|
horaemeta-server
编译 horaemeta-server 前需要安装 Golang,要求 Golang 版本 >= 1.21。
在 horaemeta
目录下,执行:
|
|
可以使用如下命令运行它:
|
|
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,例如,数据导入和导出工具
- 探索新的存储格式,提高混合负载(分析和时序负载)的性能