версия клика
никак. mysql engine не хранит данные в себе. а делает запрос в mysql каждый раз
имеется ввиду table ENGINE=MySQL(...)? если да, то там нет никакого sync, там запрос с WHERE пробрасывается непосредственно на MySQL а GROUP BY и ORDER BY делаются на стороне clickhouse или MaterializedMySQL() ? он работает как MySQL slave и данные в него прилетают по replication протоколу там тоже никакого sync нет, если репликация сломалась, придется заново все данные перекачивать ( удалять и создавать базу данных)
Спасибо за ответы @BloodJazMan @unamedrus а если внешний словарь? Какой-то из вариантов делает возможным реплику (с периодическими апдейтами) и чтобы все последующие операции шли только в кх?
внешний словарь с ssd_cache layout у вас какой объем таблицы в MySQL?
ну можно словарь засунуть, но это не real time sync это периодическая синхронизация
Direct можно заюзать как движок для словаря
он нормально применим скорее для REDIS Для MySQL получится шторм из SQL запросов 1 запрос на 1 dictGet...
а если словарь из mysql строить так, чтобы ключ словаря в Clickhouse был первичным ключом в таблице mysql? по логике тогда сложность запросов таких будет O(1), не так ли?
ну только для DIRECT layout у вас latency на запрос будет нефиговый такой захотите выбрать допустим 100 тыс dictGet и получите 100 тыс коротких SQL запросов которые MySQL даже в несколько десятков коннектов прососет секунд за 5-10 не меньше... это REDIS может до миллиона запросов через MGET в секунду делать key\value (multi threading имплементации) хотя кстати с MySQL вроде тоже может быть SQL запрос WHERE id IN (...) но это не o(1) это o(n) сложность все равно... и парсер MySQL запроса на MySQL сервере для o(1) будет 90% времени занимать... вот кстати как вариант можно Oracle MySQL MEMCACHE plugin какой нибудь попробовать использовать ;) Но clickhouse не умеет memcache в качестве источника
Спасибо большое за пояснение
Обсуждают сегодня