loranger / questdb-client
使用 Influx Line Protocol 的简单 PHP QuestDB 客户端
Requires
- php: >=7
- ext-sockets: >=7
Requires (Dev)
- pestphp/pest: ^1.23
README
使用 Influx Line Protocol 的简单 PHP QuestDB 客户端。
格式化 ILP 查询字符串,关于 QuestDB 数据类型 提供的格式
需求
PHP 7+ 服务器,并启用 sockets
扩展。
安装
克隆此存储库或使用 composer
composer require loranger/questdb-client
用法
提供了 \QuestDB\Client
包装器作为单例类。
服务器配置
调用 setServer
方法来定义您的 QuestDB 主机。
\QuestDB\Client::setServer('questdb_server', 9009);
发送数据
您可以使用 ping
方法,通过提供 ILP 查询字符串或关联数组向您的 QuestDB 服务器发送数据
ILP 语法
使用 ILP 语法 发送数据
\QuestDB\Client::ping('trades,symbol=BTC-USD,side=sell');
ILP 查询构建器
您可以使用 ILP 查询构建器从数组值生成查询字符串
new \QuestDB\ILPQueryBuilder(string $table, array $values, int $timestamp = null);
$ilp_query = new \QuestDB\ILPQueryBuilder('trades', [ 'symbol' => 'BTC-USD', 'side' => 'sell' ]); echo $ilp_query; // trades,symbol=BTC-USD,side=sell \QuestDB\Client::ping($ilp_query);
ping
方法与 ILPQueryBuilder
构造函数签名兼容,因此您可以直接将参数传递给 ping
方法
\QuestDB\Client::ping('trades', [ 'symbol' => 'BTC-USD', 'side' => 'sell' ], time());
给定的值自动被视为符号数据类型,但如果需要更高精度,您可以指定任何 QuestDB 类型
\QuestDB\Client::ping('trips', [ 'cab_type:symbol' => 'yellow', 'passenger_count:int' => 3, 'trip_distance:double' => 6.3, 'payment_type' => 'cash', ]);
这将构建与以下相同的 IPL 查询
echo (new \QuestDB\ILPQueryBuilder('trips', [ 'cab_type:symbol' => 'yellow', 'passenger_count:int' => 3, 'trip_distance:double' => 6.3, 'payment_type' => 'cash', ])); // trips,cab_type=yellow,payment_type=cash passenger_count=3i,trip_distance=6.300000
Docker
提供了一个 docker compose 文件,用于在本地运行一个包含 questdb 服务器的简短演示。
容器由以下部分组成
- 一个 php 7 镜像(在本地构建,包含其 sockets 扩展)
- 一个继承自 php 镜像的 composer 镜像
- 一个继承自 php 镜像的 pest 镜像
- 一个 dockerized questdb 服务器
PHP 镜像运行 内置服务器 并暴露端口 80
(但也可以与 traefik 一起使用)。
composer 镜像在容器启动时应立即退出。它只提供一个在容器中运行 composer 命令的便捷方式:docker-compose run --rm composer show --platform
pest 镜像是本地安装的 pest 二进制文件的快捷方式。它提供了一个运行测试的快捷方式:docker-compose run --rm pest --version
questdb 镜像运行最新的官方 docker 镜像,并暴露端口 9000
和 9009
(但也可以与 traefik 一起使用)。
cp .env.example .env cp docker-compose.example docker-compose.yml docker compose up