跳转到正文

CLI

命令行
vendor/bin/storh stats <root> [collection] [doc|log|queue]
vendor/bin/storh verify <root> [collection] [doc|log|queue]
vendor/bin/storh compact <root> [collection] [doc|log]
vendor/bin/storh reindex <root> [collection]

<root> 是引擎打开时使用的存储根目录,也就是 StorageRoot::resolve() 返回的路径:基目录加上命名空间。在 StorageRoot::resolve(__DIR__ . '/var/storh', 'app') 下打开的存储位于 var/storh/app 下:

命令行
vendor/bin/storh stats var/storh/app pages doc
vendor/bin/storh verify var/storh/app events log
vendor/bin/storh compact var/storh/app events log
vendor/bin/storh reindex var/storh/app pages

仅传入基目录(var/storh)时,命令会指向尚不存在的集合,因此会报告集合为空,而不是报错。

当 storh 作为依赖安装时,vendor/bin/storh 需要使用 storh 0.5.2 或更高版本。早期版本只会查找软件包自身 vendor/ 目录中的 Composer 自动加载器,因此会报 require 错误。

CLI 会输出稳定的 JSON,因此可用于 cron 任务和部署健康检查。集合默认为 default;对于 stats、verify 和 reindex,引擎默认为 doc;对于 compact,则默认为 log。

命令所调用的维护方法

所有引擎都提供 CLI 调用的维护方法:

PHP
$store->stats();
$store->health();
$store->verify();
$store->repair();

DocStore 还提供:

PHP
$docs->reindex();
$docs->compact(); // no-op report for API symmetry

SegmentedLog 还提供:

PHP
$log->compact();
$log->recover();
$log->state_index();

对于 DocStore,verify() 会检查记录是否能正确解析,并验证等值、范围和复合索引是否与完整记录扫描结果一致。repair() 会将损坏的记录文件隔离到 .storh/corrupt/ 下,并根据有效记录重建索引。

对于 SegmentedLog,verify() 会解码分段行,并将当前派生状态索引与新执行的分段重放结果进行比较。repair() 会重建派生状态,并截断末尾不完整的行。

对于 Queue,verify() 会解码每个持久化事件,并将待处理、处理中、已完成、负载和认领顺序状态与新执行的 queue.log 重放结果进行比较。repair() 会从日志重建队列状态,并将超时的处理任务重新入队。