borislav/clickhouse

PHP项目的ClickHouse实现

1.0.0 2022-10-10 09:46 UTC

This package is auto-updated.

Last update: 2024-09-10 13:58:08 UTC


README

  1. 实体/Entity

    1. 每个实体 = 单独的表

    2. 实体名称 = inTheLowerCase(表名)

    3. 实体属性名称 = 列名

    4. 每个通过ClickHouse工作的实体必须实现接口ClickHouseEntityInterface用于规范化和解规范化)。

  2. 存储库/Repository

    1. 每个存储库必须继承自ClickHouseRepository是基本存储库,具有默认功能),并且存储库接口也必须从ClickHouseRepositoryInterface继承。
    2. (也许)基本/抽象存储库构造函数接受3个参数:normalizer, denormalizer, entityClass。如果在写入过程中出现错误,可能需要更改数据格式或检查实体在规范化形式下的外观是否正确,以及它是否正确映射到表上。如果需要,请查看ClickHouseEntityNormalizer
  3. 客户端/适配器

    1. 适配器模式,通过接口实现与ClickHouse的交互,具有select、insert、query和ping方法。直接实现访问ClickHouse的HTTP接口。

    2. !!!重要:在代码中,我们必须使用接口而不是实现(即适配器类的类型)来关闭,以便能够替换实现。

    3. !!!重要:特别是,ClickHouseClientAdapter实现了方法query,该方法以第三个参数(isAwaitableQuery)接受布尔值,如果为真,则向请求添加唯一键并返回结果实例ClickHouseSyncResponse(关于Response|SyncResponse的更多信息见下一条#4)。

  4. 响应/Response

    从除了ping方法以外的任何适配器方法中,我们都会得到一个ClickHouseResponseClickHouseSyncResponse实例。

    1. ClickHouseSyncResponse是对Statement类的包装,实现等待请求的额外功能(在ClickHouse中,ALTER TABLE t DELETE|UPDATE操作在后台执行,即操作并未完全完成,但响应已经到来)。该类允许您通过awaitisDone方法显式等待响应和数据的固定。
      1. await - 等待请求完成,最多循环10分钟(通过参数配置)。
      2. isDone - 单次检查,不循环,当等待固定+执行某些附加处理时很有用。
    2. ClickHouseResponse - ClickHouse响应的简单包装器,是ClickHouseSyncResponse的父类(建议使用isSyncable方法来确定实例是否可同步)。简单的代理类,用于隐藏实现。
  5. 混合/特性

    1. ClickHouseClientTrait - 允许获取用于操作ClickHouse的上述适配器的唯一功能。

    2. 使用特性要求

      1. 使用特性的类必须实现接口ClickHouseClientTraitInterface,否则会抛出相应的异常
  6. 迁移/Migration

    1. 必须实现接口ClickHouseMigrationInterface并明确使用上述特性($this->clickhouse()->(select|insert|query|ping)(...);)。
  7. 测试/Test

    1. 如果测试需要与ClickHouse交互,则需要从ClickHouseSetupTestCase继承,然后根据需要显式地通过特性或通过EntityManager在任何测试中获取仓库。

    2. !!!重要: 如果您重写了setUptearDown方法,则需要调用父方法(parent::(tearDown|setUp)();),或者在ClickHouse的测试数据库中明确清除表($this->clearTables();)。!!!重要: 如果您在非测试环境中尝试使用此方法,则不会清除表并抛出异常

    3. 目前,对于与ClickHouse交互的实体,无法创建固定值(将来可能会实现此功能)。可以通过在测试中创建单独的方法来显式实现数据的加载。

  8. 异常/Exception

    1. 所有在操作ClickHouse时发生的异常都实现了接口ClickHouseExceptionInterface并继承自ClickHouseException。因此,它们可以由基本接口\Throwable捕获。
  9. 请求/Request(仅同步)

    1. 在此情况下,需要指出的是,如果您尝试发送类型为Sync的请求,即设置isAwaitableQuery参数为true,并且传递的SQL中不包含WHERE条件,则会收到相应的异常,并且此类请求是不允许的。对于类型为Sync的请求,您必须始终明确指定WHERE {condition}