Временные ряды: HBase против OpenTSDB / KDB для запроса диапазона с условием - PullRequest
0 голосов
/ 29 января 2019

У меня около 100 000 пользователей.Для каждого пользователя я постоянно меняю (каждую минуту) набор значений (столбцов), хранящихся в HBase.Клавиша строки выглядит как userId-timestamp, где timestamp округляется до минуты.Набор данных непрерывно растет, поскольку каждую минуту я получаю еще 100 000 строк.

Мне нужен запрос с низкой задержкой (<0,5 мс), который выглядит следующим образом: <code>(userId, fromTimestamp, toTimestamp, step), где from - to может не содержать никакихболее 1000 наименованийПоэтому я использую запрос диапазона HBase.

Хитрость в том, что параметр step может иметь значение в [1,5,15,60,360,1440].Если step=5, запрос должен возвращать значения 5, 10, 15, ... минут.Так что step=1440 очень дорогой запрос.

Не могли бы вы объяснить, является ли OpenTSDB или KDB более быстрым для этого варианта использования и почему?

1 Ответ

0 голосов
/ 30 января 2019

Выбор системы базы данных для приложения зависит от различных факторов, поэтому не так просто ответить на ваш вопрос.

Но, учитывая предоставленные вами подробности высокого уровня, KDB определенно выглядит как один из приемлемых вариантов.

KDB - это база данных, ориентированная на столбцы временных рядов,Судя по вашим данным, ваше приложение предъявляет те же требования.

Ваш запрос в основном нацелен на 2 столбца (идентификатор пользователя и метку времени), и один из этих столбцов имеет тип данных времени.KDB имеет прямую поддержку типов данных дата / время и предназначена для обеспечения более высокой производительности таких данных.

Как правило, ориентированная на столбцы база данных будет работать лучше, чем ориентированная на строки база данных для этих случаев, так как она читает меньше данных и может управлятьи запрашивать данные более эффективно, поскольку данные имеют одинаковый тип для столбца, поэтому они могут применять другие оптимизации.

DataSize : 100000 в минуту = 6 миллионов в час.Я бы сказал, что это таблица среднего размера с точки зрения KDB.Запросы KDB не требуют много времени для выполнения таблицы такого размера, если система спроектирована правильно.

Атрибуты : KDB также поддерживает атрибуты таблиц, такие как отсортированные, уникальные, сгруппированные и разделенные.Атрибуты помогают запросам работать лучше.Например, вы можете хранить данные, отсортированные по идентификатору пользователя, а затем отсортированные по метке времени для каждого идентификатора пользователя.Сортированный атрибут заставит запрос использовать бинарный поиск вместо линейного поиска.Точно так же другие атрибуты имеют другие полезные функции.

Язык запросов: Язык запросов является важной частью любой системы баз данных.KDB использует язык «Q».Это мощный векторный язык с хорошим набором функций для работы с вектором.

Точно так же вы можете очень легко запросить ваши шаги в KDB.Но, как вы упомянули, это может быть сложной задачей, чтобы получить целевую задержку.Но существуют различные способы проектирования вашей системы для повышения производительности для этого варианта использования.

В KDB есть и другие полезные функции для управления данными, такие как распределение данных по нескольким узлам, настройка различных процессов и межпроцессное взаимодействие.

Все сводится к тому, как вы проектируете свою систему и как вы организовываете свои данные в таблицы.

Как я уже сказал в начале, выбор базы данных зависит от различных факторов.Я бы предложил настроить KDB на вашем компьютере (это очень просто) и провести тест на небольшом наборе данных, чтобы получить представление.

...