#database #nosql #clickhouse
#База данных #nosql #clickhouse
Вопрос:
В настоящее время я использую ClickHouse для хранения нескольких миллиардов данных каждую неделю. Мы используем агрегированные таблицы для извлечения данных, пока все хорошо. Теперь необходимо извлечь одну строку из этой базы данных.
ClickHouse не предназначен для такого случая, хотя после применения некоторой оптимизации, рекомендованной ClickHouse, однорядный выбор по-прежнему выполняется как-то медленно (несколько секунд).).
чтобы прояснить это немного больше, эта таблица индексируется по столбцам a, b, c и d, а также разбивается на разделы ежемесячно (в таблице есть еще несколько столбцов). Новая служба должна запрашивать эту таблицу, тогда как знает только a, b и z (столбец UUID). Однако средний отклик составляет от 3 до 10 секунд для 10 миллиардов данных.
У меня есть возможность добавить дополнительный уровень хранилища данных, чтобы я мог хранить данные в дополнительной базе данных для этой необходимости.
Теперь актуальный вопрос: какая база данных может быть лучшей для такого случая, когда нам нужно прочитать только одну строку из миллиардов данных?
P.S:
- Из-за стоимости хранилища и сети мы не можем использовать Redis
- Мы не можем добавить больше столбцов в запрос выбора для оптимизации запроса
Комментарии:
1. попробуйте поиграть с индексами, пропускающими данные .
Ответ №1:
Кассандра?
Вы можете использовать дополнительную таблицу и материализованное представление для эмуляции инвертированного индекса.
Эта дополнительная таблица должна быть отсортирована по z и содержать столбцы pk (a, b, c, d) из основной таблицы.
Затем запросите основную таблицу, например
select ... from main_table where (a,b,c,d) in
( select a,b,c,d from additional_table where z= ... )
and z = ...
дополнительная таблица может быть автоматически заполнена материализованным представлением из main_table.