powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Поиск: Искать ответы на сообщение: #500271  
16 сообщений из 16, страница 1 из 1
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500271
Тень на плетень
Скрыть профиль Поместить в игнор-лист
Участник
Кусь  07.08.2023, 13:50
[игнорируется]
Тень на плетень  07.08.2023, 13:01
[игнорируется]
Green  07.08.2023, 12:54
[игнорируется]
Что такое RRD?
Round Robin Database. Циклические БД. Так чтобы они гарантированно хранили данные только за неделю например. Без необходимости дополнительно стирать старые данные. Они просто затираются новыми. Сама БД при этом фиксированного обьема и не растет.
Разбей таблицу на партиции, по дням например, и повесь на эту таблицу view c условием: WHERE <your_date> >= CURRENT_DATE - interval '7 day'.
Раз в день можешь грохать устаревшие партиции по cron-у и добавлять новые на будущее.
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
...
Кто в предыдущие годы набил карманы за счет всяких "процессов" в экономике 90-х годов, они точно не элита, а кусок говна.
Изменено: 07.08.2023, 19:28 - Тень на плетень
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500425
Кусь
Скрыть профиль Поместить в игнор-лист
Участник
Тень на плетень  07.08.2023, 19:25
[игнорируется]
Кусь  07.08.2023, 13:50
[игнорируется]
Тень на плетень  07.08.2023, 13:01
[игнорируется]
Green  07.08.2023, 12:54
[игнорируется]
Что такое RRD?
Round Robin Database. Циклические БД. Так чтобы они гарантированно хранили данные только за неделю например. Без необходимости дополнительно стирать старые данные. Они просто затираются новыми. Сама БД при этом фиксированного обьема и не растет.
Разбей таблицу на партиции, по дням например, и повесь на эту таблицу view c условием: WHERE <your_date> >= CURRENT_DATE - interval '7 day'.
Раз в день можешь грохать устаревшие партиции по cron-у и добавлять новые на будущее.
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
ТОгда тебе надо просто SQL запускать по расписанию в конце дня и делать там:
DELETE from table WHERE <your_date> > CURRENT_DATE - interval '7 day'
Можно и без партиций.

Если DBA запускает VACUUM время от времени, то таблица В РАЗМЕРАХ расти не будет.
...
Изменено: 07.08.2023, 21:46 - Кусь
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500429
Кусь
Скрыть профиль Поместить в игнор-лист
Участник
W  07.08.2023, 21:47
[игнорируется]
Кусь  07.08.2023, 21:46
[игнорируется]
Тень на плетень  07.08.2023, 19:25
[игнорируется]
Кусь  07.08.2023, 13:50
[игнорируется]
Тень на плетень  07.08.2023, 13:01
[игнорируется]
...
Разбей таблицу на партиции, по дням например, и повесь на эту таблицу view c условием: WHERE <your_date> >= CURRENT_DATE - interval '7 day'.
Раз в день можешь грохать устаревшие партиции по cron-у и добавлять новые на будущее.
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
ТОгда тебе надо просто SQL запускать по расписанию в конце дня и делать там:
DELETE from table WHERE <your_date> > CURRENT_DATE - interval '7 day'
Можно и без партиций.

Если DBA запускает VACUUM время от времени, то таблица расти не будет.
это если там хуй да нихуя нагрузки/данных. за такое "решение" от дба можно и поебалу получить
тогда делаем партишны по колонке даты и ебало будет целым.
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500598
Tosh
Скрыть профиль Поместить в игнор-лист
Участник
Тень на плетень  07.08.2023, 19:25
[игнорируется]
Кусь  07.08.2023, 13:50
[игнорируется]
Тень на плетень  07.08.2023, 13:01
[игнорируется]
Green  07.08.2023, 12:54
[игнорируется]
Что такое RRD?
Round Robin Database. Циклические БД. Так чтобы они гарантированно хранили данные только за неделю например. Без необходимости дополнительно стирать старые данные. Они просто затираются новыми. Сама БД при этом фиксированного обьема и не растет.
Разбей таблицу на партиции, по дням например, и повесь на эту таблицу view c условием: WHERE <your_date> >= CURRENT_DATE - interval '7 day'.
Раз в день можешь грохать устаревшие партиции по cron-у и добавлять новые на будущее.
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
Для данного конкретного вопроса можно просто собрать первичный ключ, который будет вычисляться исходя из номера дня в неделе и номера измерения в дне, заполнить таблицу "пустыми" значениями, а во время измерений вместо вставки записей делать просто изменение данных по вычисленному значению ключа
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500624
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
Tosh  08.08.2023, 09:13
[игнорируется]
Тень на плетень  07.08.2023, 19:25
[игнорируется]
Кусь  07.08.2023, 13:50
[игнорируется]
Тень на плетень  07.08.2023, 13:01
[игнорируется]
Green  07.08.2023, 12:54
[игнорируется]
...
Round Robin Database. Циклические БД. Так чтобы они гарантированно хранили данные только за неделю например. Без необходимости дополнительно стирать старые данные. Они просто затираются новыми. Сама БД при этом фиксированного обьема и не растет.
Разбей таблицу на партиции, по дням например, и повесь на эту таблицу view c условием: WHERE <your_date> >= CURRENT_DATE - interval '7 day'.
Раз в день можешь грохать устаревшие партиции по cron-у и добавлять новые на будущее.
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
Для данного конкретного вопроса можно просто собрать первичный ключ, который будет вычисляться исходя из номера дня в неделе и номера измерения в дне, заполнить таблицу "пустыми" значениями, а во время измерений вместо вставки записей делать просто изменение данных по вычисленному значению ключа
Самое здравое предложение, ибо вполне возможно, что если какая-то строка сегодня не обновлялась, то она должна иметь старые данные.
Предположение сделано на том основании, что скорее всего кедруле это надо для его awr отчота, зачастую в таких отчётах важна динамика, а так же возможны пропуски сбора статы по различным причинам.
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500632
Кусь
Скрыть профиль Поместить в игнор-лист
Участник
Tosh  08.08.2023, 09:13
[игнорируется]
Тень на плетень  07.08.2023, 19:25
[игнорируется]
Кусь  07.08.2023, 13:50
[игнорируется]
Тень на плетень  07.08.2023, 13:01
[игнорируется]
Green  07.08.2023, 12:54
[игнорируется]
...
Round Robin Database. Циклические БД. Так чтобы они гарантированно хранили данные только за неделю например. Без необходимости дополнительно стирать старые данные. Они просто затираются новыми. Сама БД при этом фиксированного обьема и не растет.
Разбей таблицу на партиции, по дням например, и повесь на эту таблицу view c условием: WHERE <your_date> >= CURRENT_DATE - interval '7 day'.
Раз в день можешь грохать устаревшие партиции по cron-у и добавлять новые на будущее.
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
Для данного конкретного вопроса можно просто собрать первичный ключ, который будет вычисляться исходя из номера дня в неделе и номера измерения в дне, заполнить таблицу "пустыми" значениями, а во время измерений вместо вставки записей делать просто изменение данных по вычисленному значению ключа
А если "статистику" решат потом немного расширить с недели до скажем 10 дней, то привязка к дням недели сразу идёт по пизде
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500637
Кусь
Скрыть профиль Поместить в игнор-лист
Участник
Горбатый ёж  08.08.2023, 10:05
[игнорируется]
Tosh  08.08.2023, 09:13
[игнорируется]
Тень на плетень  07.08.2023, 19:25
[игнорируется]
Кусь  07.08.2023, 13:50
[игнорируется]
Тень на плетень  07.08.2023, 13:01
[игнорируется]
...
Разбей таблицу на партиции, по дням например, и повесь на эту таблицу view c условием: WHERE <your_date> >= CURRENT_DATE - interval '7 day'.
Раз в день можешь грохать устаревшие партиции по cron-у и добавлять новые на будущее.
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
Для данного конкретного вопроса можно просто собрать первичный ключ, который будет вычисляться исходя из номера дня в неделе и номера измерения в дне, заполнить таблицу "пустыми" значениями, а во время измерений вместо вставки записей делать просто изменение данных по вычисленному значению ключа
Самое здравое предложение, ибо вполне возможно, что если какая-то строка сегодня не обновлялась, то она должна иметь старые данные.
Предположение сделано на том основании, что скорее всего кедруле это надо для его awr отчота, зачастую в таких отчётах важна динамика, а так же возможны пропуски сбора статы по различным причинам.
Если говорить про AWR, он основан на dba_hist_active_sess_history views, где снапшоты хранятся определённый период времени, потом удаляются и похую что там не менялось.
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500643
Tosh
Скрыть профиль Поместить в игнор-лист
Участник
Кусь  08.08.2023, 10:17
[игнорируется]
Tosh  08.08.2023, 09:13
[игнорируется]
Тень на плетень  07.08.2023, 19:25
[игнорируется]
Кусь  07.08.2023, 13:50
[игнорируется]
Тень на плетень  07.08.2023, 13:01
[игнорируется]
...
Разбей таблицу на партиции, по дням например, и повесь на эту таблицу view c условием: WHERE <your_date> >= CURRENT_DATE - interval '7 day'.
Раз в день можешь грохать устаревшие партиции по cron-у и добавлять новые на будущее.
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
Для данного конкретного вопроса можно просто собрать первичный ключ, который будет вычисляться исходя из номера дня в неделе и номера измерения в дне, заполнить таблицу "пустыми" значениями, а во время измерений вместо вставки записей делать просто изменение данных по вычисленному значению ключа
А если "статистику" решат потом немного расширить с недели до скажем 10 дней, то привязка к дням недели сразу идёт по пизде
Если немного подумать - можно рассчитать алгоритм вычисления значения первичного ключа так, чтобы не было необходимости иметь привязку к дню недели.
В общем: кому надо - понял, кому найти готовое решение - может искать готовое монструозное решение с применением большого количества костылей
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500647
Кусь
Скрыть профиль Поместить в игнор-лист
Участник
Tosh  08.08.2023, 10:30
[игнорируется]
Если немного подумать - можно рассчитать алгоритм вычисления значения первичного ключа так, чтобы не было необходимости иметь привязку к дню недели.
Если немного подумать - это такой же костыль.
Каждый выберет свой
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500649
Tosh
Скрыть профиль Поместить в игнор-лист
Участник
Кусь [игнорируется] 
Если нет "родного" решения "из коробки", я предпочитаю обходиться минимумом зависимостей.
А так - каждый выбирает грабли по себе
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500652
Кусь
Скрыть профиль Поместить в игнор-лист
Участник
Tosh [игнорируется] 
Если нет "родного" решения "из коробки", решение должно быть оптимальным, а не костылить ещё какой-нибудь алгоритм "без привязки и с привязкой", вместо простого удаления.
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500680
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
Кусь  08.08.2023, 10:57
[игнорируется]
Tosh [игнорируется] 
Если нет "родного" решения "из коробки", решение должно быть оптимальным, а не костылить ещё какой-нибудь алгоритм "без привязки и с привязкой", вместо простого удаления.
Решение с партиционированием может быть не то что не оптимальным, оно может быть неверным, если углубиться в проблематику вопроса. Не думаю, что в данном случае мы увидели исчерпывающие требования по ТЗ.
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500687
Кусь
Скрыть профиль Поместить в игнор-лист
Участник
Горбатый ёж  08.08.2023, 11:42
[игнорируется]
Кусь  08.08.2023, 10:57
[игнорируется]
Tosh [игнорируется] 
Если нет "родного" решения "из коробки", решение должно быть оптимальным, а не костылить ещё какой-нибудь алгоритм "без привязки и с привязкой", вместо простого удаления.
Решение с партиционированием может быть не то что не оптимальным, оно может быть неверным, если углубиться в проблематику вопроса.
Как и любое другое, если нет нормальной постановки задачи.

По тому что было озвучено, объёмы там небольшие и можно обойтись без партишнов вообще.
...
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500804
Тень на плетень
Скрыть профиль Поместить в игнор-лист
Участник
Tosh  08.08.2023, 10:30
[игнорируется]
Кусь  08.08.2023, 10:17
[игнорируется]
Tosh  08.08.2023, 09:13
[игнорируется]
Тень на плетень  07.08.2023, 19:25
[игнорируется]
Кусь  07.08.2023, 13:50
[игнорируется]
...
По партициям то понятно, но это не совсем то. Собственно предположим вам нужно собирать какую то метрику 10 раз в день. То есть в день всего 10 строк. Но хранить ее нужно четко неделю.

Как это все работает в RRD?

Пошел понедельник, Вторник, и т.д. Воскресенье. Когда начался новый понедельник, первая запись предыдущего понедельника должна затереться первой записью нового понедельника. И так все в цикле.

В чем профит? Таблица всегда с фиксированным количеством строк. Она не растет и значит не требует обслуживания.
Для данного конкретного вопроса можно просто собрать первичный ключ, который будет вычисляться исходя из номера дня в неделе и номера измерения в дне, заполнить таблицу "пустыми" значениями, а во время измерений вместо вставки записей делать просто изменение данных по вычисленному значению ключа
А если "статистику" решат потом немного расширить с недели до скажем 10 дней, то привязка к дням недели сразу идёт по пизде
Если немного подумать - можно рассчитать алгоритм вычисления значения первичного ключа так, чтобы не было необходимости иметь привязку к дню недели.
В общем: кому надо - понял, кому найти готовое решение - может искать готовое монструозное решение с применением большого количества костылей
Вот это правильно. Глубина хранения - это именно формат первичного ключа.
...
Кто в предыдущие годы набил карманы за счет всяких "процессов" в экономике 90-х годов, они точно не элита, а кусок говна.
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500807
Тень на плетень
Скрыть профиль Поместить в игнор-лист
Участник
Кусь  08.08.2023, 11:49
[игнорируется]
Горбатый ёж [игнорируется] 

Как и любое другое, если нет нормальной постановки задачи.

По тому что было озвучено, объёмы там небольшие и можно обойтись без партишнов вообще.
Секционирование не нужно. Тут объем данных несколько гб.

Правда в Постгресе есть специфика.

Если по ключу ты нашёл нужную строку чтобы ее апдейтить, он ее все равно сначала удалит, а потом создаст новую. То есть вакуум нужен.
...
Кто в предыдущие годы набил карманы за счет всяких "процессов" в экономике 90-х годов, они точно не элита, а кусок говна.
Рейтинг: 0 / 0
Просто Трёп / Как сделать RRD в PostgreSQL?
    #500927
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
Тень на плетень  08.08.2023, 15:54
[игнорируется]
Если по ключу ты нашёл нужную строку чтобы ее апдейтить, он ее все равно сначала удалит, а потом создаст новую.
Специализд!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Поиск: Искать ответы на сообщение: #500271  
Пользователи онлайн (123): Анонимы (108), Green, prostozevs, Yandex Bot, MaksRoman0w, IT-Клоп, S Baltiki 1 мин., Гарыныч 2 мин., Ветер 3 мин., Bing Bot 4 мин., ShuraNOSQL 4 мин., Сталкер 5 мин., Blondin 6 мин., anonymous 7 мин., Буся 7 мин., ElenaG 8 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]