@dba_ru

Страница 493 из 718
Dmitrii
28.04.2018
15:50:18
Ага

Ну я типа PoC сделал

Ilia
28.04.2018
15:50:31
OVER ( PARTITION BY request_id ORDER BY timestamp ASC) AS next_action, LEAD(timestamp, 1, timestamp) OVER ( PARTITION BY request_id ORDER BY timestamp ASC) AS next_timestamp ты вот уверен, что это правильно написано?

Dmitrii
28.04.2018
15:50:54
А почему нет? Я на бумажке посчитал, функция тоже самое выводит

Google
Dmitrii
28.04.2018
15:52:00
2-й и 3-й аргументы явно объявлены чтобы убрать NULL значения когда заканчивается временной ряд интервалов

Таким образом next_timestamp будет равен timestamp и его разница будет равна нулю

Ilia
28.04.2018
15:52:26
ну я как-то совсем не уверен

Dmitrii
28.04.2018
15:52:43
Так а что тебя конкретно смущает? Я проверю

Ilia
28.04.2018
15:52:54
а оконные фукнции для PG надо вспоминать, я не знаю их так хорошо.

Меня смущает, что нет никакого значения.

OVER ( PARTITION BY request_id ORDER BY timestamp ASC) AS next_action вот поле, вычисляемое оконной функцией. А ГДЕ то, что собственно берётся за значение ?

Dmitrii
28.04.2018
15:53:59


Так LEAD же

Первый арг

В первом случае там action следующей строки, а второй LEAD это timestamp следующей строки

Цифровые пары ­— это возможные переходы (валидные) состояния которые надо затрекать (суммировать)

Ilia
28.04.2018
15:57:14
SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;

Google
Al
28.04.2018
15:57:14
представь как все было бы проще если просто прочитал посчитал проапдейтил сумма выбирается автоматом

Ilia
28.04.2018
15:57:29
вот пример валидного запроса с оконной функцией.

Al
28.04.2018
15:57:40
но тут явно не нужно проще.

Dmitrii
28.04.2018
15:58:04
вот пример валидного запроса с оконной функцией.
Ну у меня вместо avg(salary) — lead(action, 1, action)

Ilia
28.04.2018
15:58:07
Dmitrii
28.04.2018
15:58:32
Тебя видимо 3 аргумента для оконной функции с толку сбило?

Я там просто там от NULL значений избавился и все

Это был самый простой способ

Плюс архитектура append only мне нравится куда больше

Al
28.04.2018
16:01:17
Ну а сейчас просто "вставил в базу", "you are awesome"
нее сейчас не просто вставил в базу. сейчас у тебя куча гемороя. и когда ты захочешь что то добавить убавить то получишь хрен по всей морде и переделку

Dmitrii
28.04.2018
16:01:42
Ну подожи, какой бизнес кейс у удаления в трекере?

Это как какахи пальцами из попы начать вытаскивать

Ilia
28.04.2018
16:03:07
А EXTRACT(EPOCH FROM (next_timestamp - timestamp))) что делает?

Dmitrii
28.04.2018
16:03:15
И кстати, даже если мне надо что-то поменять то замена будет только одной записи по pk

Кол-во секунд итоговое

Al
28.04.2018
16:05:43
Кол-во секунд итоговое
гыыыы. то есть в твоем представлени примерно так "время занимает только отправка запроса, база ЛЮБОЙ запрос обрабатывает МНОГНОВЕННО"

Ilia
28.04.2018
16:06:06
Ну ладно, главное-то не это всё, а запустить этот запрос и получить данные. И проверить, насколько быстро СУБД его выполняет. Тут если сделать индекс по (request_id,timestamp) потенциально это может работать быстро. Если будет, ок, можно и так оставлять. Если нет — надо сначала выгрызать данные

Dmitrii
28.04.2018
16:06:34
гыыыы. то есть в твоем представлени примерно так "время занимает только отправка запроса, база ЛЮБОЙ запрос обрабатывает МНОГНОВЕННО"
Ну нет же. Это надо для биллинга (точный расчет) и при первой загрузке трекера, дальше оно JS'ом

Google
Ilia
28.04.2018
16:07:00
Кол-во секунд итоговое
экстракт ЭПОК из даты — получаются секунды?

Dmitrii
28.04.2018
16:07:12
Ага, такой вот постгрес

Al
28.04.2018
16:07:17
Ну нет же. Это надо для биллинга (точный расчет) и при первой загрузке трекера, дальше оно JS'ом
ой все.. хорош. я уже под столом. продолжай. это еще и билинг гыыы

Ilia
28.04.2018
16:07:23
Ну ладно это в общем не важно

Al
28.04.2018
16:07:43
экстракт ЭПОК из даты — получаются секунды?
так оно ж всю таблицу перелопачивает

Dmitrii
28.04.2018
16:08:02
так оно ж всю таблицу перелопачивает
Где всю то? Вы план запроса можете составить в уме?

Там выбрка идет по owner_id, request_id сначала

Ilia
28.04.2018
16:08:18
Ну нет же. Это надо для биллинга (точный расчет) и при первой загрузке трекера, дальше оно JS'ом
Ну и гляди, ты тут жёстко прописываешь пары предыдущая -следующая запись. Типы событий. А ВДРУГ они не такие ?

Dmitrii
28.04.2018
16:08:32
Высекается ну максимум в худшем случае для наркоманов 50 записей

Ilia
28.04.2018
16:08:48
Ну и я бы НЕ ПИСАЛ оконку, взял бы просто self-JOIN.

Dmitrii
28.04.2018
16:10:18
Я конечно всякого в базе повидал, понимаю о чем ты но все же

Ilia
28.04.2018
16:11:40
Как они могут оказаться не такие?
Да хрен знает... НУ, ПОТЕРЯЛОСЬ....

?

Dmitrii
28.04.2018
16:12:06
Значит в этом случае я буду тем парнем из авито

Который отключает fsync в PG ради скорости вопреки риску потери данных (какой-то части)

Т.к. это будет дешевле восстановить с точки зрения бизнеса через саппорт

Ilia
28.04.2018
16:13:30
Ладно, я полагаю, что вопрос исчерпан, если ты добьешься от этого запросика приемлимой производительности (или другой напишешь), То и ОК, если нет — думаю, тебе надо БЕЖАТЬ ВВЕРХ И ВЫДЕЛЯТЬ ЦЕПОЧКИ СОБЫТИЙ. Я вот лично по таким подобным задачам ВСЕГДА в конце приходил к тому, что выделял.

Dmitrii
28.04.2018
16:14:41
Это ты к чему?
Ну в Авито DBA отключают на дисках fsync чтобы PG быстрее работал

Google
Dmitrii
28.04.2018
16:14:45
Дает им прирост скорости

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

И вот этот проеб данных последние Х-минут восстановить через саппорт дешевле чем купить 10 новых серверов для PG (условно) чтобы покрыть прирост произовдительности когда они вырубили fsync

Звучит дико )

Dmitrii
28.04.2018
16:16:47
А, ну это я к тому, что если цепочка внезапно разломается

Dmitrii
28.04.2018
16:17:00
И какой-то интервал не забиллится

Ilia
28.04.2018
16:17:23
А

Admin
ERROR: S client not available

Dmitrii
28.04.2018
16:17:24
Мы просто возьмем и руками его восстановим )

Ilia
28.04.2018
16:17:28
ну ок

Dmitrii
28.04.2018
16:17:47
AI наверное плачет )

Ладно, теперь реально сложный вопрос

Кто-нибудь делал расписания в базе? Как хранить "два-через-два"

Ilia
28.04.2018
16:19:05
Логику прописывать.

никаких секретов

Al
28.04.2018
16:20:16
Логику прописывать.
нене. погоди. мы кажется нашли того мистического говнокодера который делает что то потому что ему понравилось написаное в статье а не то что реально подходит под его задачи

Dmitrii
28.04.2018
16:20:31
Просто вот например есть таблица в которой хранится расписание но в текущем виде это типа расписание на одну абстрактную неделю

И туда "два-через-два" никак не сохранить

Google
Ilia
28.04.2018
16:21:07
ОПисываешь правила типа ДВА ЧЕРЕЗ ДВА, делаешь календарь, запоняешь его на скажем год вперёд, применяешь правила, которые к этому календарю что-то привязывают. И уже в фиксированных датах намечаешь события.

Dmitrii
28.04.2018
16:21:13
Может есть бест-практис схемы?

Ilia
28.04.2018
16:21:33
нет. ТЗ у всех разные. НЕ бывает общих

Dmitrii
28.04.2018
16:21:39
Т.е. основной посыл — заполнять на год вперед?

Ilia
28.04.2018
16:21:53
можно не на год

Dmitrii
28.04.2018
16:22:15
Эта пре-генерация довольно straightforward так сказать

Мне бы опять же без пред-заполнения

Ilia
28.04.2018
16:23:36
суть в том что у тебя будет N разных типов правил. ТИпа как иерархия объектов в ООП, Каждое будет там как-то находить времена вычислять и привязываеться к конкретным датам. полиморфно на этой иерархии правил

Мне бы опять же без пред-заполнения
Ну а как ты правила эти без предзаполнения, типа КАЖДЫЙ ВТОРОЙ ДЕНЬ а откуда второй ?

Dmitrii
28.04.2018
16:25:26
Ну вот схему такую и сделать

Перелопачивать календать на полгода из пользовательского интерфейса это как то не оч

Ilia
28.04.2018
16:26:42
Ну как бы и по логике предметной области все эти правила они как бы декларативные. но всё равно можно и как бы императивно всегда назначить что-то на вполне определённое время.

Короче я запарился объяснять домой хочу.

Dmitrii
28.04.2018
16:27:28
Ну вот пользователь заходит в календать и там херовина "Два-через-два"

Не буду же я добавлять в базу записей на полгода сразу )

А если он передумает? Удалять?

Тлен

Ilia
28.04.2018
16:28:05
Хочешь делай, не хочешь — думай сам. Я такое делал раза три наверное, удобно, логично, производительно

полгода это вшивых 180 записей

Страница 493 из 718