r4j4h/php-druid-query

围绕 Druid 查询的实验性 PHP 包装器

0.2.3 2016-02-13 10:38 UTC

README

PHP 包装器,用于执行对 Druid 的 HTTP 请求。通常这将是用于查询,但也可以用于其他目的(如 摄取)。

概览

包装器位于 DruidFamiliar 命名空间中。Druid 本身是以 D&D 角色的精神命名的,而这个角色可以有一个伙伴 - 一个精神上相连的动物伙伴。这个包装器在某种意义上就像是 Druid 的伙伴,因此得名。

我认为仓库名应该反映命名空间以保持清晰,目前它是 php-druid-query,而命名空间是 DruidFamiliar。这将是一个相当大的改动,并将留待以后进行。如果您对项目或命名空间的命名有其他建议,请在此之前自由提出。

变更日志

0.2.1

  • 添加了 DruidTime/Interval 类,以便更容易处理各种时间输入到与 Druid 兼容的时间输出。

0.2.0 主要重构

  • 查询和响应处理分离。所有接口都重命名和重新设计。
    • IDruidConnection 现在是 IDruidQueryExecutor
    • IDruidQuery 分割成 IDruidQueryGeneratorIDruidQueryParametersIDruidQueryResponseHandler
    • BaseQuery 不再需要,许多类似的类已被弃用或删除。
    • DruidNodeConnection 现在是 DruidNodeDruidQueryExecutor

0.1.0 初始发布

  • 为早期分享而做的快速草图。

典型用法

总的来说,这个包装器的目的是通过封装 Druid 的 HTTP 特性和查询配置中的分析语法来简化查询的执行。

  1. 创建一个连接,配置为连接到 Druid 端点。
  2. 为所需的查询创建一个查询生成器对象。
  3. 创建一个查询参数对象,配置所需的查询参数。
  4. 创建一个结果处理器来格式化结果(否则使用 DoNothingResponseHandler
  5. 将连接、查询、参数和响应处理器组合在一起执行,从结果处理器获取结果。

从接口上看,这看起来像

  1. 创建一个配置为连接到 Druid 端点的 IDruidQueryExecutor
  2. 创建一个 IDruidQueryGenerator
  3. 创建一个配置了参数的 IDruidQueryParameters
  4. 创建一个 IDruidQueryResponseHandler
  5. 使用 IDruidQueryGeneratorIDruidQueryParametersIDruidQueryResponseHandler 运行 IDruidQueryExecutorexecuteQuery 函数,从 IDruidQueryResponseHandler 获取结果。

从实现的角度来看,这可以看起来像

  1. 创建一个配置为连接到 Druid 端点的 DruidNodeDruidQueryExecutor
  2. 创建一个 SegmentMetadataDruidQuery
  3. 创建一个配置了参数的 SegmentMetadataDruidQueryParameters
  4. 创建一个 SegmentMetadataResponseHandler
  5. 使用在前面步骤中创建的类运行 DruidNodeDruidQueryExecutorexecuteQuery 函数,从 SegmentMetadataResponseHandler 获取结果。

如何安装

目前还没有标记版本。为了准备好它到来时的版本,已经设置了分支别名。

  • 稳定分支:~1.0@dev
  • 尖端:~1.1@dev

安装时建议使用Composer。如果您已经安装了它,那么在composer.json中的以下说明应该足以让您开始

{
    "require": {
        "r4j4h/php-druid-query": "~1.0@dev"
    }
}

一旦安装,运行composer installcomposer update应该就可以工作了。

运行这些命令后,需要引入Composer的自动加载器,然后您就可以开始了,或者说就像它的树环一样(糟糕的德鲁伊引用)

  1. require 'vendor/autoload.php';
  2. $yay = new \DruidFamiliar\Query\TimeBoundaryDruidQuery('my-cool-data-source');
  3. 请参考上面的典型用法部分。

如何测试

一旦composer install完成,从命令行终端中,在根目录下运行

vendor/bin/phing

或者

vendor/bin/phpunit tests

生成文档

从根目录,在命令行终端中运行:php vendor/bin/phing docs

示例

示例位于\examples文件夹。

它们从_examples-config.php中共享连接信息。根据您的Druid实例的连接信息进行修改。

目前大部分都是通过CLI运行设计的,但如果一个运行PHP的服务器在浏览器中提供服务,它们也可以在浏览器中工作。

输出HTML的那些应该将查询结果打印到HTML中

Example HTML TimeBoundary Output

它如何工作以及如何扩展

请参考此图,了解其底层的概述。

Sequence Diagram

(从动态LucidChart源URL

一般来说,要添加对新查询的支持,您只需创建一个新类,该类实现了IDruidQuery

您想在哪里创建新类,可以是这个仓库的分支,或者在外部使用这个仓库的接口。这由您决定。 :)

参考

A.1 不依赖于Packagist.org的composer.json示例

{
    "repositories": [
        {
            "type": "vcs",
            "url": "git@github.com:r4j4h/php-druid-query"
        }
    ],
    "require": {
        "r4j4h/php-druid-query": "~1.0@dev"
    }
}