Могу ли я использовать clickhouse в качестве хранилища значений ключей? - PullRequest
0 голосов
/ 30 декабря 2018

Можно ли использовать clickhouse в качестве хранилища значения ключа, если данные регулярно перезаписываются, но редко читаются?Какой двигатель мне использовать, если это возможно?

1 Ответ

0 голосов
/ 30 декабря 2018

ClickHouse не создан для этого варианта использования, и он намеренно говорит об этом на домашней странице своего документа.

Когда НЕ использовать ClickHouse

  1. Транзакционные рабочие нагрузки(OLTP)
  2. Доступ по значению ключа с высокой частотой запросов
  3. Хранение блобов или документов
  4. Слишком нормализованные данные

ОднакоЕсли QPS низкий, вы все равно можете получить хорошие показатели задержки для точечных запросов.ClickHouse также предоставляет несколько видов словарей, которые могут лучше служить внешним хранилищем значения ключа.Также имеется движок StorageJoin, который поддерживает функцию joinGet, аналогичную операции redis 'HGET.После этого PR вы можете перезаписать существующие ключи в StorageJoin.

update

PR объединено.Вот изолированный пример.

Сначала заполните таблицу StorageJoin следующим образом:

CREATE TABLE my_fancy_kv_store (s String, x Array(UInt8), k UInt64)
ENGINE = Join(ANY, LEFT, s);

INSERT INTO my_fancy_kv_store VALUES ('abc', [0], 1), ('def', [1, 2], 2);

Затем вы можете использовать ее в качестве словаря (ключ-значение):

SELECT joinGet('my_fancy_kv_store', 'x', 'abc');
SELECT joinGet('my_fancy_kv_store', 'k', 'def');
...