loranger/questdb-client

使用 Influx Line Protocol 的简单 PHP QuestDB 客户端

1.0.0 2024-03-09 18:33 UTC

This package is auto-updated.

Last update: 2024-09-09 19:41:18 UTC


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 镜像,并暴露端口 90009009(但也可以与 traefik 一起使用)。

cp .env.example .env
cp docker-compose.example docker-compose.yml
docker compose up