#事件存储 #事件溯源 #事件 #ges

app cerberus-es

一个事件存储管理工具

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数据库接口

MIT 许可证

120KB
2.5K SLoC

Cerberus

Crates.io Crates.io Discord Crates.io

一个事件存储管理工具。

EventStore 是一个开源函数式数据库。

在我们的专用Discord服务器上讨论和交流想法

目标

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