6个版本
0.0.6 | 2020年1月7日 |
---|---|
0.0.5 | 2019年12月19日 |
0.0.3 | 2019年11月7日 |
0.0.2 | 2019年10月25日 |
#1641 在 数据库接口
120KB
2.5K SLoC
Cerberus
一个事件存储管理工具。
EventStore 是一个开源函数式数据库。
目标
Cerberus旨在在我们的喜爱的终端中提供对EventStore数据库的便捷访问。
特性列表
以下特性列表并非按实现顺序排列。
- 显示数据库节点/集群版本。
- 数据库健康检查(包括集群模式)。
- 全面的事件列表。
- 全面的流列表。
- 全面的投影列表。
- 全面的持久订阅列表。
- 创建持久订阅。
- 更新持久订阅。
- 删除持久订阅。
- 创建投影。
- 提供打包版本供Linux(APT安装,.deb等)、OSX(Homebrew)和Windows上使用的任何软件包管理器。
- 显示集群信息。
- 公开节点统计信息。
- 全面的数据迁移。
- 全面的数据导出(作为JSON文件或其他可读格式)。
- 创建备份存档。
- 应用或检查数据库合规性(如果数据库包含所有必要的持久订阅、投影或其他要求)
- 功能丰富的TUI界面。
- 本地安装EventStore。
安装
目前,我们不提供编译的二进制文件。但是,我们旨在通过操作系统软件包管理器提供安装cerberus
的方法
- APT 用于基于debian的Linux发行版(也将提供.deb文件)。
- OSX的Homebrew配方。
- Windows上的任何软件包管理器。
从源代码
Cerberus
是用Rust编写的。要安装Rust开发工具,请访问:https://rustup.rs/
从Crates.io
$ cargo install cerberus-es
程序将在 ~/.cargo/bin
从源代码库
克隆 https://github.com/YoEight/cerberus.git git代码库。一旦您处于 cerberus
目录,请运行
$ cargo build --release
二进制文件将在 target/release/
目录中。
常见用法
以下用法示例并未展示所有参数变化或所有命令。您需要运行 cerberus --help
来获取所有支持的命令,或运行 cerberus [COMMAND] --help
来获取一个命令的所有支持参数。
某些命令可能需要一个具有正确权限的数据库用户。在这种情况下,您只需提供 --login
和 --password
参数。
检查数据库连接
$ cerberus check
Cerberus 将自动检查节点是否属于集群。如果节点确实属于一个集群,Cerberus 还将检查构成集群的节点是否可访问。
Cerberus 还将返回每个节点的版本。
列出事件
$ cerberus list-events --stream foo
此命令列出 foo
流的每个事件。
$ cerberus list-events --stream foo --recent
此命令将执行相同操作,但只获取最后 50 个 foo
的事件。
$ cerberus list-events --stream foo --group-id my_group
此命令列出属于针对 foo
流和 my_group
组的持久订阅的所有已停放事件。
$ cerberus list-events --stream foo --group-id my_group --checkpoint
此命令与上一个类似,但将列出所有持久订阅的检查点。
$ cerberus list-events --by-type user-created
此命令列出所有类型为 user-created
的事件。
列出流
$ cerberus list-streams
此命令列出所有用户定义的流以及删除和元数据流。
$ cerberus list-streams --by-category user
此命令列出所有以 user-
开头的流。
创建一个投影
# You will have to use an user with admin right to use that command.
$ cerberus --login=boogie_man --password=******* create-projection -k onetime --name amazing-proj --enabled /path/to/projection.js
名称参数是可选的。在这种情况下,由于 --enabled
标志,名为 amazing-proj
的投影将立即开始。
备份
Cerberus 支持数据库备份。此功能需要 rsync
在 $PATH
中。目前,在集群配置中,Cerberus 不会备份所有节点,也不会选择主节点。我们可能会根据用户需求实现上述功能。
用法
cerberus --host=1.2.3.4 backup --remote-user=yoeight --source-directory=/var/eventstore/db --destination-directory=/home/yoeight/es-backup
合规性检查
合规性检查确保数据库设置根据合规性文件正确配置。合规性文件使用 TOML 格式。在合规性文件中,您可以确保
- 持久订阅已创建,并且其所有配置都最新。
- 用户定义的投影已创建,并且其所有配置都最新。
- 通用数据库配置(版本、集群配置等)WIP。
合规性文件示例
[[projection]]
name = "foo-bar-indexing"
path = "path/to/my/amazing/code.js" # Absolute or relative filepath.
type = "continuous" # [possibilities: "continuous", "one-time"]
# Optional settings
emit = true # Optional [default: false]. Enable the ability for the
# projection to write to streams.
enabled = true # Optional [default: false]. Indicates if the projection
# will start right away when created.
checkpoints = true # Optional [default: false]
# [when projection's type is "continuous", forced at true]
# Enable persisting projection progress.
track_emitted_streams = true # Optional [default: false]
# Write the name of the streams the projection is
# managing to a separate stream:
# $projections-{projection-name}-emittedstreams
[[subscription]] # Think persistent subscription.
stream = "the_world" # The stream doesn't need to exist when creating the subscription.
group = "illuminatis"
start_from = 0 # Event number.
# Optional settings
resolve_link = false # Optional [default: false]
extra_stats = false # Optional [default: false]
msg_timeout_in_ms = 10_000 # Optional [default: 10_000]
max_retry_count = 10 # Optional [default: 10]
live_buffer_size = 500 # Optional [default: 500]
buffer_size = 500 # Optional [default: 500]
read_batch_size = 20 # Optional [default: 20]
checkpoint_after_in_ms = 1_000 # Optional [default: 1_000]
min_checkpoint_count = 10 # Optional [default: 10]
max_checkpoint_count = 500 # Optional [default: 500]
max_subscriber_count = 10 # Optional [default: 10]
strategy = "round-robin" # Optional [default: "round-robin"] [possibilities: "round-robin", "dispatch-to-single", "pinned"]
用法
# You will have to use an user with admin right to use that command.
cerberus --login=boogie_man --password=******* apply-compliance --file=compliance.toml
注意:如果您只想查看数据库配置是否最新,而无需更新数据库本身,请使用 --dry-run
标志。您将获得一份完整的报告,而不会对数据库进行任何更改。
注意
此二进制文件已在 Linux 和 OSX 上进行了测试。欢迎贡献和错误报告!
MIT 许可证。
依赖项
~22–33MB
~586K SLoC