-
Сущность/Entity
-
Каждая сущность = отдельная таблица
-
Название сущности = inTheLowerCase(название таблицы)
-
Название свойств сущности = название столбцов
-
Каждая сущность, которая работает через ClickHouse, должна имплементировать интерфейс ClickHouseEntityInterface (необходимо для нормализации и денормализации).
-
-
Репозиторий/Repository
- Каждый репозиторий должен наследоваться от ClickHouseRepository (является базовым репозиторием и имеет дефолтный функционал) и интерфейс репозитория, аналогично, должен быть унаследован от ClickHouseRepositoryInterface.
- (Perhaps) Конструктор базового/абстрактного репозитория принимает 3 аргумента:
normalizer, denormalizer, entityClass
. Если в процессе работы возникают ошибки при записи, возможно, вам стоит изменить формат данных или же проверить, как ваша сущность выглядит в нормализованном виде и правильно ли она маппится на таблицу. При необходимости, смотреть в ClickHouseEntityNormalizer.
-
Клиент/Adapter
-
Паттер адаптер, который закрывает взаимодствеие с ClickHouse через интерфейс с методами select, insert, query и ping. Реализует прямой доступ к HTTP интерфейсу ClickHouse.
-
!!!Важно: в коде, мы должны везде закрываться не реализацией, т.е. типом самого класса адаптера, а его интерфейсом, для возможности подмены реализации.
-
!!!Важно: в частности, ClickHouseClientAdapter реализует метод
query
, который третьим аргументом(isAwaitableQuery
) принимает логическое значение и если оно истинно, то добавляет в запрос уникальный ключ и возвращает как результат инстас ClickHouseSyncResponse (подробнее о Response|SyncResponse в следующем пункте #4).
-
-
Ответ/Response
Из любого метода адаптера, кроме метода
ping
мы получаем экземпляр класса ClickHouseResponse или же ClickHouseSyncResponse.- ClickHouseSyncResponse - обертка для класса Statement, реализующая дополнительный функционал по ожиданию запросов (
ALTER TABLE t DELETE|UPDATE
- в ClickHouse выполняются в background-e, т.е. операция полностью не завершена, но ответ уже пришел). Данный класс позволяет вам с помощью методовawait
иisDone
явно дождаться ответа и фиксации данных.await
- ожидает, пока запрос не завершится, залипает в цикле, максимум на 10 минут (конфигурируется через параметр).isDone
- единоразовая проверка без залипания, полезно, если ждем фиксацию + выполняем какую-то доп. обработку или т.п..
- ClickHouseResponse - простая обертка для ответа из ClickHouse, является родителем для ClickHouseSyncResponse (советуется использовать метод
isSyncable
для определения, является ли экземляр сихронизируемым). Простой proxy-класс скрывающий реализацию.
- ClickHouseSyncResponse - обертка для класса Statement, реализующая дополнительный функционал по ожиданию запросов (
-
Примесь/Trait
-
ClickHouseClientTrait - единственный функционал, который позволяет получить вышеописанный Adapter для работы с ClickHouse.
-
Требования для использования trait-a:
- Класс, в котором подключается trait, должен имплементировать интерфейс ClickHouseClientTraitInterface, либо же вы получите соответствующее исклчюение.
-
-
Миграция/Migration
- Должна имплементировать ClickHouseMigrationInterface и
использовать вышеописанный trait явно (
$this->clickhouse()->(select|insert|query|ping)(...);
).
- Должна имплементировать ClickHouseMigrationInterface и
использовать вышеописанный trait явно (
-
Тест/Test
-
Если тест нуждается/взаимодействует с ClickHouse, то данный тест нужно унаследовать от ClickHouseSetUpTestCase, далее, использовать по усмотрению, явно через trait или же через репозиторий, который можно получить черзе EntityManager в любом тесте.
-
!!!Важно: если вы переопределяете методы
setUp
илиtearDown
, нужно вызвать родительский метод (parent::(tearDown|setUp)();
), либо явно очистить таблицы в тестовой БД в ClickHouse ($this->clearTables();
). !!!Важно: очистка таблиц не произойдет и будет выброшено исключение, если вы пытаетесь использовать этот метод не в тестовой среде. -
На данный момент для сущностей, которые работают с ClickHouse нельзя создать фикстуры (в дальнейшем, возможно, этот функционал будет реализован). Загрузку данных, можно реализовать явно, создав отдельный метод в тесте.
-
-
Исключение/Exception
- Все исключения, которые возникают при работе с ClickHouse, имплементируют ClickHouseExceptionInterface и наследуются от ClickHouseException.
Соответственно, могут быть перехвачены базовым интефейсом
\Throwable
.
- Все исключения, которые возникают при работе с ClickHouse, имплементируют ClickHouseExceptionInterface и наследуются от ClickHouseException.
Соответственно, могут быть перехвачены базовым интефейсом
-
Запрос/Request (only syncable)
- В данном кейсе нужно отметить, что если вы попытаетесь отправить запрос типа
Sync
, т.е. указавisAwaitableQuery
параметр в значениеtrue
и в переданом SQL-e не будет условияWHERE
, то получите соотвествующее исклчюение и том, что запросы данного вида не разрешены. Вы должны всегда явно указыватьWHERE {condition}
для запросов типаSync
.
- В данном кейсе нужно отметить, что если вы попытаетесь отправить запрос типа
-
Notifications
You must be signed in to change notification settings - Fork 0
Borislavv/symfony-clickhouse-adapter
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
ClickHouse implementation for PHP projects
Topics
Resources
Stars
Watchers
Forks
Packages 0
No packages published