10个版本 ()
1.0.0-alpha.6 | 2024年8月6日 |
---|---|
1.0.0-alpha.5 | 2024年7月26日 |
1.0.0-alpha.2 |
|
0.11.0 | 2024年6月4日 |
0.7.0-rc | 2022年12月22日 |
#131 in 数据库接口
每月下载量257次
35KB
432 行
Eclipse Zenoh
Eclipse Zenoh:零开销的发布/订阅、存储/查询和计算。
Zenoh(发音为 /zeno/)统一了运动中的数据、静态数据和计算。它将传统的发布/订阅与地理分布式存储、查询和计算巧妙地结合在一起,同时保持了超越任何主流堆栈的时间空间效率。
RocksDB后端
在Zenoh中,后端是一种存储技术(如数据库管理系统、时序数据库、文件系统等),允许存储通过Zenoh发布的键/值,并在查询时返回它们。有关更多信息,请参阅Zenoh文档。
此后端依赖于RocksDB来实现存储。Zenoh将依赖于其库的名称(不包含特定于操作系统的前缀和扩展名)来找到它并加载它:zenoh_backend_rocksdb
。
👉 安装最新版本:请参阅以下内容
👉 构建"main"分支:请参阅以下内容
使用示例
先决条件
- 您已安装Zenoh路由器(
zenohd
),并且zenoh_backend_rocksdb
库文件位于~/.zenoh/lib
中。 - 将环境变量
ZENOH_BACKEND_ROCKSDB_ROOT
声明为您想要存储RocksDB数据库的目录。如果您没有声明它,将使用~/.zenoh/zenoh_backend_rocksdb
目录。
您可以通过配置文件在Zenoh路由器启动时设置存储,也可以在运行时通过Zenoh管理空间设置,例如使用REST API。
通过JSON5配置文件设置
- 创建一个包含以下内容的
zenoh.json5
配置文件{ plugins: { // configuration of "storages" plugin: storage_manager: { volumes: { // configuration of a "rocksdb" volume (the "zenoh_backend_rocksdb" backend library will be loaded at startup) rocksdb: {} }, storages: { // configuration of a "demo" storage using the "rocksdb" volume demo: { // the key expression this storage will subscribes to key_expr: "demo/example/**", // this prefix will be stripped from the received key when converting to database key. // i.e.: "demo/example/a/b" will be stored as "a/b" strip_prefix: "demo/example", volume: { id: "rocksdb", // the RocksDB database will be stored in this directory (relative to ${ZENOH_BACKEND_ROCKSDB_ROOT}) dir: "example", // create the RocksDB database if not already existing create_db: true } } } }, // Optionally, add the REST plugin rest: { http_port: 8000 } } }
- 使用以下命令运行zenoh路由器:
zenohd-c zenoh.json5
通过管理空间中的curl
命令在运行时设置
- 运行zenoh路由器,并具有对其管理空间的写权限
zenohd--adminspace-权限 rw
- 添加“rocksdb”后端(将加载“zenoh_backend_rocksdb”库)
curl -XPUT -H 'content-type:application/json' -d '{}'https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/volumes/rocksdb
- 使用“rocksdb”后端添加“demo”存储
curl -XPUT -H 'content-type:application/json' -d '{key_expr:"demo/example/**",strip_prefix:"demo/example",volume: {id: "rocksdb",dir: "example",create_db: true}}'https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/storages/demo
使用REST API进行测试
使用curl
发布和查询键/值,你可以
# Put values that will be stored in the RocksDB database
curl -X PUT -d "TEST-1" https://127.0.0.1:8000/demo/example/test-1
curl -X PUT -d "B" https://127.0.0.1:8000/demo/example/a/b
# Retrive the values
curl https://127.0.0.1:8000/demo/example/**
特定卷的存储配置
依赖于RocksDB后端的存储必须在上面显示的附加配置
-
"dir"
(必需,字符串) :RocksDB数据库存储的目录名称。绝对路径将是${ZENOH_BACKEND_ROCKSDB_ROOT}/<dir>
。 -
"create_db"
(可选,布尔值) :如果数据库不存在,则创建RocksDB数据库。默认不设置。(值不重要,只检查属性存在) -
"read_only"
(可选,布尔值) :存储将仅响应GET查询。它将不接受任何PUT或DELETE消息,并且不会在RocksDB数据库中放入任何内容。默认不设置。(值不重要,只检查属性存在) -
"on_closure"
(可选,字符串) :存储被移除时使用的策略。有两种选项- unset:数据库保持不变(这是默认行为)
"destroy_db"
:销毁数据库(即删除)
后端的行为
映射到RocksDB数据库
每个 存储 将映射到存储在目录中的RocksDB数据库: ${ZENOH_BACKEND_ROCKSDB_ROOT}/<dir>
,其中
${ZENOH_BACKEND_ROCKSDB_ROOT}
是在zenoh路由器启动前指定的环境变量。如果没有指定此变量,则使用${ZENOH_HOME}/zenoh_backend_rocksdb
(其中${ZENOH_HOME}
的默认值是~/.zenoh
)。<dir>
是存储创建时指定的"dir"
属性。每个放入存储的zenoh key/value 将映射到数据库中的2个 key/values- 对于两者,数据库键是zenoh键,从存储创建时指定的
"strip_prefix"
属性中提取出来的。 - 在
"default"
列族中,键与zenoh编码的值一起作为值存储。 - 在
"data_info"
列族中,键按照以下顺序存储一个字节缓冲区的编码- 时间戳编码为:8个字节的时钟时间 + 16个字节的HLC ID
- "已删除"标志编码为1个字节的布尔值
- 编码前缀标志编码为ZInt(可变长度)
- 编码后缀编码为字符串(字符串长度为ZInt + 字符串字节(不包括结束
\0
))
删除行为
在删除键时,相应的键将从"default"
列族中删除。在"data-info"
列族中插入一个条目,其中“删除”标志设置为true,并包含删除时间戳(以避免在未排序的消息的情况下重新插入较旧时间戳的点)。
定期,一个任务会从"data-info"
列族中清理旧的条目和设置“删除”标志为true的条目
GET行为
在GET操作中
- 如果选择器是唯一键(即不包含任何
'*'
):直接从2个列族中通过get
RocksDB操作检索对应键的值及其编码和时间戳。 - 如果选择器是键表达式:存储将搜索匹配的键,如果可能的话,利用RocksDB的前缀搜索以最小化要检查的条目数量。
如何安装它
要安装此后端库的最新版本,您可以按照以下步骤操作
手动安装(所有平台)
所有发布包都可以从以下网址下载
每个子目录的名称与Rust目标相对应。有关每个目标对应的平台,请参阅https://doc.rust-lang.net.cn/stable/rustc/platform-support.html
选择您的平台,并下载.zip
文件。
将其解压缩到与zenohd
相同的目录中,或者解压缩到任何可以找到后端库的目录(例如,/usr/lib或~/.zenoh/lib)
Linux Debian
将Eclipse Zenoh私有仓库添加到源列表,并安装zenoh-backend-rocksdb
包
echo "deb [trusted=yes] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list.d/zenoh.list > /dev/null
sudo apt update
sudo apt install zenoh-backend-rocksdb
如何构建它
⚠️ 警告 ⚠️ : Zenoh及其生态系统正在积极开发中。当您从git构建时,请确保您还从git构建您计划使用的任何其他Zenoh存储库(例如,绑定、插件、后端等)。可能会发生git中的某些更改与最新的包装Zenoh版本不兼容(例如,deb、docker、pip)。我们在维护Zenoh项目中不同git存储库之间的兼容性方面投入了特别努力。
首先,安装 Clang 和 Cargo 和 Rust。如果您已经安装了 Rust 工具链,请确保它与以下版本兼容。
$ rustup update
⚠️ 警告 ⚠️ : 由于 Rust 没有稳定的 ABI,后端库应该使用与
zenohd
完全相同的 Rust 版本构建,并使用与 'zenohd' 相同的版本(或提交号)的zenoh
依赖项。否则,在zenohd
和库之间共享类型的内存映射中的不兼容性可能导致"SIGSEV"
崩溃。
要了解 zenohd
构建的 Rust 版本,请使用 --version
选项。
示例
$ zenohd --version
The zenoh router v0.6.0-beta.1 built with rustc 1.64.0 (a55dd71d5 2022-09-19)
在这里,zenohd
使用 rustc 版本 1.64.0
构建。
使用以下命令安装并使用此工具链
$ rustup default 1.64.0
并且 zenohd
版本对应于 id 为 1f20c86
的未发布提交。使用以下命令更新 Cargo.lock 中的 zenoh
依赖项
$ cargo update -p zenoh --precise 1f20c86
然后使用以下命令构建后端
$ cargo build --release --all-targets
依赖项
~63MB
~1M SLoC