Crate开发者命令行工具集合
项目描述
为Crate开发人员(以及可能的用户)提供命令行工具集合。
目录
为什么是cr8? 🤔
安装 💾
使用命令行工具需要 Python >= 3.7。
使用 pip 进行安装。
python3 -m venv venv venv/bin/python -m pip install cr8
这将把 cr8 安装到 venv/bin 目录。另一种方法是下载单个 zipapp 文件,可以从 发布页面 获取。
用法
主二进制文件名为 cr8,其中包含几个子命令。
使用 cr8 -h 或 cr8 <subcommand> -h 获取更详细的用法描述。
下面更详细地描述了包含的子命令
提示:
任何带有 --hosts 参数的 <subcommand> 都支持像这样进行密码认证
cr8 <subcommand> --hosts http://username:password@localhost:4200 <remaining args>
Shell完成
cr8 通过 argcomplete 在 bash 和 zsh 中支持命令补全。
安装 argcomplete
运行 activate-global-python-argcomplete
确保您使用的是 argcomplete > 3.0。在较旧版本的 argcomplete 中,需要在 zsh 中使用 bashcompinit 兼容层,并通过 eval "$(register-python-argcomplete cr8)" 注册应用程序。有关详细信息,请参阅上游文档。
子命令
timeit 🕐
一个可以用来测量在集群上给定 SQL 语句运行时间的工具
>>> echo "select name from sys.cluster" | cr8 timeit --hosts localhost:4200 Runtime (in ms): mean: ... ± ... min/max: ... → ... Percentile: 50: ... ± ... (stdev) 95: ... 99.9: ...
插入假数据
一个可以用来用随机数据填充表的工具。脚本将使用 faker 生成记录。
例如,给定以下表
create table x.demo ( id int, name text, country text );
可以使用以下命令插入 1000 条记录
>>> cr8 insert-fake-data --hosts localhost:4200 --table x.demo --num-records 200 Found schema: { "country": "text", "id": "integer", "name": "text" } Using insert statement: insert into "x"."demo" ("id", "name", "country") values ($1, $2, $3) Will make 1 requests with a bulk size of 200 Generating fake data and executing inserts <BLANKLINE>
它将自动从表中读取模式,并将列映射到 faker providers,并插入指定数量的记录。
(目前仅支持顶级列)
生成随机记录的另一种方法是使用 mkjson,它可以与 insert-json 一起使用。
插入JSON
insert-json 可以用来从 JSON 文件中插入记录
>>> cat tests/demo.json | cr8 insert-json --table x.demo --hosts localhost:4200 Executing inserts: bulk_size=1000 concurrency=25 Runtime (in ms): mean: ... ± 0.000
或者简单地从 JSON 字符串中打印生成的插入语句
>>> echo '{"name": "Arthur"}' | cr8 insert-json --table mytable ('insert into mytable ("name") values ($1)', ['Arthur']) ...
从SQL插入
从一个 CrateDB 集群或 PostgreSQL 服务器复制数据到另一个。
>>> cr8 insert-from-sql \ ... --src-uri "postgresql://crate@localhost:5432/doc" \ ... --query "SELECT name FROM x.demo" \ ... --hosts localhost:4200 \ ... --table y.demo \ INSERT INTO y.demo ("name") VALUES ($1) Runtime (in ms): ...
该命令的 concurrency 选项仅影响并发写操作的数量。始终只有一个读取操作,因此复制操作可能受限于读取性能。
运行规范
一个可以对集群进行基准测试并将结果存储在另一个集群中的工具。基准测试本身是在一个规范文件中定义的,该文件定义了 setup、benchmark 和 teardown 指令。
指令本身只是 SQL 语句(或包含 SQL 语句的文件)。
在 specs 文件夹中有一个示例规范文件。
用法
>>> cr8 run-spec specs/sample.toml localhost:4200 -r localhost:4200 # Running setUp # Running benchmark <BLANKLINE> ## Running Query: Name: count countries Statement: select count(*) from countries Concurrency: 2 Duration: 1 Runtime (in ms): mean: ... ± ... min/max: ... → ... Percentile: 50: ... ± ... (stdev) 95: ... 99.9: ... ... ## Skipping (Version ... Statement: ... # Running tearDown <BLANKLINE>
-r 是可选的,可以用来将基准测试结果保存到集群中。如果不存在,将创建一个名为 benchmarks 的表。
也支持使用 Python 编写规范文件。
>>> cr8 run-spec specs/sample.py localhost:4200 # Running setUp # Running benchmark ...
运行Crate
启动一个 Crate 实例
> cr8 run-crate 0.55.0
这需要 Java 8。
run-crate 支持使用 -- 连接额外的命令。在 run-crate 的上下文中,任何主机 URL 都可以使用 {node.http_url} 格式字符串进行格式化。
>>> cr8 run-crate latest-stable -- timeit -s "select 1" --hosts '{node.http_url}' # run-crate =========== <BLANKLINE> ... Starting Crate process CrateDB launching: PID: ... Logs: ... Data: ... <BLANKLINE> ... Cluster ready to process requests <BLANKLINE> <BLANKLINE> # timeit ======== <BLANKLINE> <BLANKLINE> <BLANKLINE> <BLANKLINE>
在上面的例子中,timeit 是一个 cr8 特定的子命令。但也可以通过在命令前加上 @ 来使用任意命令。
cr8 run-crate latest-nightly -- @http '{node.http_url}'
脚本重现
这个功能的一个常见用途是快速重现错误报告。
cr8 run-crate latest-nightly -- @crash --hosts {node.http_url} <<EOF create table mytable (x int); insert into mytable (x) values (1); refresh mytable; ... EOF
查找回归
另一个用例是将 run-crate 与 run-spec 和 git bisect 结合使用。
git bisect run cr8 run-crate path/to/crate/src \ -- run-spec path/to/spec.toml '{node.http_url}' --fail-if '{runtime_stats.mean} > 15'
这也可以与 timeout 结合使用。
性能分析
这也可以与 Java 飞行记录器结合使用,以进行性能分析。
cr8 run-crate latest-nightly \ -e CRATE_HEAP_SIZE=4g \ -e CRATE_JAVA_OPTS="-Dcrate.signal_handler.disabled=true -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+UnlockCommercialFeatures -XX:+FlightRecorder" \ -s discovery.type=single-node \ -- run-spec path/to/specs/example.toml {node.http_url} --action setup \ -- @jcmd {node.process.pid} JFR.start duration=60s filename=myrecording.jfr \ -- run-spec path/to/specs/example.toml {node.http_url} --action queries \ -- @jcmd {node.process.pid} JFR.stop
创建CrateDB集群
cr8 不包含用于启动 CrateDB 集群的专用命令。但可以通过运行 cr8 run-crate <version> -s cluster.name=<name> 来启动多个节点。如果集群名称匹配,它将形成一个集群。
运行跟踪
一个运行 .toml 跟踪文件的工具。跟踪是节点版本、配置和规范文件的矩阵定义。
对于每个版本和配置,都会启动一个 Crate 节点,并执行所有规范。
>>> cr8 run-track tracks/sample.toml # Version: latest-testing ## Starting Crate latest-testing, configuration: default.toml ### Running spec file: sample.toml # Running setUp # Running benchmark ...
重新索引
一个命令,用于重新索引集群中所有在先前主版本中创建的表。因此,如果您正在运行 3.x CrateDB 集群,所有 2.x 的表都将被重新创建。
>>> cr8 reindex --help usage: cr8 reindex [-h] --hosts HOSTS ...
协议
cr8 支持使用 HTTP 或 postgres 协议。
请注意,使用 postgres 协议会导致 cr8 测量往返时间而不是服务时间。因此,测量结果将不同。
要使用 postgres 协议,必须在主机 URI 中使用 asyncpg 方案。
>>> echo "select 1" | cr8 timeit --hosts asyncpg://:5432 Runtime (in ms): ...
开发 ☢
要获得带有所有依赖项的沙盒环境,请使用 venv。
python -m venv .venv source .venv/bin/activate
使用 pip 安装 cr8 包。
python -m pip install -e .
运行 cr8。
cr8 -h
测试使用 python -m unittest 运行。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
cr8-0.27.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b7b0c6940cf58a81d2f2278d20935f2ce9b07fbc2cc0e5304eff19c09bec146f |
|
MD5 | 922a75c479cb9c43009d3d56c600aa21 |
|
BLAKE2b-256 | 37ed7a8073747406b3f9a45efd9ec3e960bd71255b9c027feb85831aa72bb692 |
cr8-0.27.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 68d5588da8a1b0da5f6b1cacfe9fdeb8d7691af7a64a9a8e0f5e49b8468a1a16 |
|
MD5 | 5c4aca5e8b171dbda98b503d704400ca |
|
BLAKE2b-256 | 3f154ed56feac32aef43e942225e45e4be929eeba9d63743788693e473d7f6e6 |