3个不稳定版本
0.10.0-rc | 2023年9月28日 |
---|---|
0.7.2-rc | 2023年6月7日 |
0.7.0-rc | 2022年12月22日 |
0.0.0 |
|
#1050 in 数据库接口
56KB
801 行
Eclipse Zenoh
Eclipse Zenoh:零开销的发布/订阅、存储/查询和计算。
Zenoh(发音为/zeno/)统一了动态数据、静态数据和计算。它将传统的发布/订阅与地理分布存储、查询和计算巧妙地结合在一起,同时保持了超越任何主流堆栈的时间空间效率。
InfluxDB后端
在Zenoh中,后端是一种存储技术(如DBMS、时序数据库、文件系统等),允许通过Zenoh存储键/值发布,并在查询时返回它们。有关更多信息,请参阅Zenoh文档。
此后端依赖于InfluxDB服务器来实施存储。Zenoh将依赖于以下名称(无操作系统特定前缀和扩展)来查找并加载它:zenoh_backend_influxdb
。
👉 安装最新版本:请参阅下面
👉 构建"master"分支:请参阅下面
⚠️尚不支持InfluxDB 2.x。需要InfluxDB 1.8最低版本。
⚠️旧版本0.5的文档
以下是与"master"分支中当前正在开发的0.6.x版本相关的文档。
有关旧版本,请参阅相应标记版本的README和代码
使用示例
先决条件
- 您已安装zenoh路由器(
zenohd
),并且zenoh_backend_influxdb
库文件位于~/.zenoh/lib
。 - 您有一个运行在
https://127.0.0.1:8086
上的InfluxDB服务。
您可以通过配置文件在 Zenoh 路由器启动时设置存储,也可以通过 Zenoh 管理空间在运行时设置,例如使用 REST API。
通过 JSON5 配置文件设置
- 创建一个
zenoh.json5
配置文件,例如{ plugins: { // configuration of "storage_manager" plugin: storage_manager: { volumes: { // configuration of a "influxdb" volume (the "zenoh_backend_influxdb" backend library will be loaded at startup) influxdb: { // URL to the InfluxDB service url: "https://127.0.0.1:8086", private: { // If needed: InfluxDB credentials, preferably admin for databases creation and drop //username: "admin", //password: "password" } } }, storages: { // configuration of a "demo" storage using the "influxdb" 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" // this option is optional strip_prefix: "demo/example", volume: { id: "influxdb", // the database name within InfluxDB db: "zenoh_example", // if the database doesn't exist, create it create_db: true, // strategy on storage closure on_closure: "drop_db", private: { // If needed: InfluxDB credentials, with read/write privileges for the database //username: "user", //password: "password" } } } } }, // Optionally, add the REST plugin rest: { http_port: 8000 } } }
- 使用以下命令运行 Zenoh 路由器
zenohd-c zenoh.json5
通过 curl
命令在管理空间中设置
- 运行 Zenoh 路由器,并具有写入其管理空间的权限
zenohd--adminspace-permissions rw
- 添加 "influxdb" 卷(将加载 "zenoh_backend_fs" 库),连接到位于 https://127.0.0.1:8086 的 InfluxDB 服务:
curl -X PUT -H 'content-type:application/json' -d '{url:"https://127.0.0.1:8086"}' https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/volumes/influxdb
- 使用 "influxdb" 卷添加 "demo" 存储:
curl -X PUT -H 'content-type:application/json' -d '{key_expr:"demo/example/**",volume:{id:"influxdb",db:"zenoh_example",create_db:true}}' https://127.0.0.1:8000/@/router/local/config/plugins/storage_manager/storages/demo
使用 REST API 进行测试
使用 curl
发布和查询键/值,您可以
# Put some values at different time intervals
curl -X PUT -d "TEST-1" https://127.0.0.1:8000/demo/example/test
curl -X PUT -d "TEST-2" https://127.0.0.1:8000/demo/example/test
curl -X PUT -d "TEST-3" https://127.0.0.1:8000/demo/example/test
# Retrive them as a time serie where '_time=[..]' means "infinite time range"
curl -g 'https://127.0.0.1:8000/demo/example/test?_time=[..]'
卷配置
基于 InfluxDB 的卷需要一些配置才能工作
-
"url"
(必需):InfluxDB 服务的 URL。示例:https://127.0.0.1:8086
-
"username"
(可选):InfluxDB 管理员用户名。它将被用于创建数据库、授予映射到存储的数据库的读写权限以及删除数据库和度量。 -
"password"
(可选):管理员用户的密码。
应将 username
和 password
隐藏在 private
门后面,如上面示例所示。一般来说,如果您希望配置查询时隐藏配置的一部分,您应将其隐藏在 private
门后面。
特定于卷的存储配置
依赖于基于 influxdb
的卷的存储可能通过 volume
部分进行额外的配置
-
"db"
(可选,字符串):"db"
存储将映射到的 InfluxDB 数据库名。如果没有指定,将生成随机名称,并将创建相应的数据库(即使未设置"create_db"
)。 -
"create_db"
(可选,布尔型) : 如果数据库不存在则创建InfluxDB数据库。默认情况下不会创建数据库,除非指定了"db"
属性。(值不重要,只需检查属性是否存在) -
"on_closure"
(可选,字符串) : 当Storage被移除时使用的策略。有3个选项- 未设置 或
"do_nothing"
:数据库保持不变(这是默认行为) "drop_db"
:删除数据库(即移除)"drop_series"
:删除所有系列(测量),数据库保持为空。
- 未设置 或
-
"username"
(可选,字符串) : InfluxDB用户名(通常是非管理员)。它将用于GET/PUT/DELETE zenoh操作中数据库的读写。 -
"password"
(可选,字符串) : 用户的密码。
后端的行为
映射到InfluxDB概念
每个存储将映射到InfluxDB的数据库。
要存储的每个键将映射到以从"strip_prefix"
属性中去除的键命名的InfluxDB 测量(见下文)。
放入存储的每个键/值将映射到InfluxDB的点,重用zenoh设置的戳记(但精度为纳秒)。点的字段和标签如下
"kind"
标签:zenoh更改类型(已放入值的"PUT"
,或标记键删除的"DEL"
)"timestamp"
字段:原始zenoh时间戳"encoding"
字段:值的编码标志"base64"
字段:表示值是否以base64编码的布尔值"value"
字段:作为字符串的值,可能对二进制值进行了base64编码。
删除时的行为
在删除键时,删除消息之前的所有点都会被删除。插入具有"kind"="DEL"
的点的操作(以避免在无序消息的情况下重新插入具有较旧时间戳的点)。延迟后(5秒),如果删除的键对应的测量仍然不包含任何点,则删除该测量。
GET时的行为
在GET操作中,默认情况下,存储系统只返回每个键/测量的最新数据点。这是为了与其他只存储每个键1个值的后端技术保持一致。
如果您希望获取GET操作的结果作为时间序列,您需要通过您的选择器中的"_time"
参数指定一个时间范围。
选择器的示例
# get the complete time-series
/demo/example/**?_time=[..]
# get points within a fixed date interval
/demo/example/influxdb/**?_time=[2020-01-01T00:00:00Z..2020-01-02T12:00:00.000000000Z]
# get points within a relative date interval
/demo/example/influxdb/**?_time=[now(-2d)..now(-1d)]
有关时间范围格式的完整描述,请参阅"_time"
RFC
如何安装它
要安装此后端库的最新版本,可以按照以下步骤操作
手动安装(所有平台)
所有发布包都可以从以下地址下载
每个子目录的名称对应于Rust目标。请参阅https://doc.rust-lang.net.cn/stable/rustc/platform-support.html中每个目标对应的平台
选择您的平台并下载.zip
文件。
将它解压缩到与zenohd
相同的目录,或者解压缩到任何可以找到后端库的目录(例如,/usr/lib或 ~/.zenoh/lib)
Linux Debian
将Eclipse Zenoh私有仓库添加到源列表,并安装zenoh-backend-influxdb
包
echo "deb [trusted=yes] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee -a /etc/apt/sources.list > /dev/null
sudo apt update
sudo apt install zenoh-backend-influxdb
如何构建它
⚠️ 警告 ⚠️ : Zenoh及其生态系统正在积极开发中。当您从git构建时,请确保您也使用git构建您计划使用的任何其他Zenoh仓库(例如,绑定、插件、后端等)。可能会发生git中的一些更改与最新的打包Zenoh版本不兼容(例如,deb、docker、pip)。我们在保持Zenoh项目中各种git仓库之间的兼容性方面付出了特别努力。
首先,安装Cargo和Rust。如果您已经安装了Rust工具链,请确保它已更新到
$ rustup update
⚠️ 警告 ⚠️ : 由于Rust没有稳定的ABI,后端库应使用与
zenohd
相同的Rust版本构建,并使用与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
依赖关系
~36–51MB
~1M SLoC