Создать разделение базы данных для анализа временных рядов
У меня 100 000 источников / датчиков / символов. Из каждого я читаю значение ежедневно.
Я загружаю таблицу базы данных с этими ежедневными данными / значениями. Одна строка для каждого значения И символа, то есть 100 000 строк в день.
Query1:
Поскольку я хочу анализировать ежедневные данные по всем символам, я делю базу данных на год, месяц, неделю, день.
Query2:
Но я также хочу проанализировать тренды / статистику по времени для каждого символа, считывая данные до 24 месяцев назад на символ.
Query2 находится вдоль другого измерения (временная ось), и я не хочу делать запросы к нескольким разделам (y,m,w,d), оптимизированным для query1.
Какой дизайн вы предлагаете?
1 ответ
100 тысяч строк в день - это не так уж много. Вы создаете только один раздел на год. но если вы также хотите оптимизировать производительность запросов, работая только на отдельных разделах - давайте предположим, что вы разбиваете по месяцам.
Кроме того, давайте предположим, кластер из трех узлов. так что вы, вероятно, захотите создать таблицу с 6 осколками, что даст в общей сложности 6*12 осколков в год. если у вас настроена одна реплика - 6*12*2 осколков - что выглядит хорошо.
если вы укажете раздел в предложении where - crate автоматически разбудит только эти осколки. но у вас все еще видны все данные.
Кстати: вот удобная ссылка на разделение по времени: https://crate.io/a/generated-columns-in-crate/