Size: a a a

2019 December 23

ВК

Василий Кузнецов in pro.elixir
atanych
Кто в курсе, в PSQL если делать REFRESH MATERIALIZED VIEW Х раз в секунду, это плохая идея?
если для вас MATERIALIZED VIEW это приговор, который нельзя изменить, и данные не должны устаревать более чем на секунду - есть ли смысл спрашивать?
или речь о том, чтобы как то по другому оформить это?
очень мало контекста
источник

ВК

Василий Кузнецов in pro.elixir
почти всегда это будет плохая идея
источник

a

atanych in pro.elixir
задача на самом деле дико простая, есть табличка,
| user_id | points |

в эту табличку пишут 17 раз в секунду, нужна всегда актуальная position, которая берется по points

мы пока решаем в лоб, через оконные функции, но не очень быстро это, если в табл хотяб 400к записей
источник

V

V in pro.elixir
CQS в каком-либо виде рассматриваете? Т.е. отдельное вычисление значения при вставке.
источник

AB

Alexey Bolshakov in pro.elixir
ну евент сорс же. не?
источник

a

atanych in pro.elixir
нет пока, только начали оптимайзить, если бы у нас гдето был расчитана позиция, это было бы идеально, но обновление VIEW очень высокочастотное - вариант отбросили
источник

SK

S. Karpieš in pro.elixir
atanych
задача на самом деле дико простая, есть табличка,
| user_id | points |

в эту табличку пишут 17 раз в секунду, нужна всегда актуальная position, которая берется по points

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

SK

S. Karpieš in pro.elixir
S. Karpieš
Я бы это через триггеры в базе сделал, чтобы обновлять только то, что изменилось, а не всю таблицу
Главное сделать так, чтоб в фунцкции не писать никаких селектов, тогда будет летать
источник

a

atanych in pro.elixir
с тригерами скорее всего будет тоже самое, что и с ВЬЮ, если ты имеешь ввиду, чтоб расчитывать позицию и записывать в БД при каждом апдейте табл
источник

a

atanych in pro.elixir
V
CQS в каком-либо виде рассматриваете? Т.е. отдельное вычисление значения при вставке.
вот это сейчас рассмотрим, спасибо 👍
источник

Е

Евгений in pro.elixir
что за CQS?
источник

Е

Евгений in pro.elixir
Гуглится Command-query separation, но похоже, что речь не об этом.
источник

SK

S. Karpieš in pro.elixir
atanych
с тригерами скорее всего будет тоже самое, что и с ВЬЮ, если ты имеешь ввиду, чтоб расчитывать позицию и записывать в БД при каждом апдейте табл
ну зависит, как эта позиция считается, если она зависит от всех остальных записей, то да, проблема.

А всякие conters cache на триггерах работают идеально и супер-быстро
источник

V

V in pro.elixir
Евгений
что за CQS?
Command-Query Segregation. Оно-оно
источник

Е

Евгений in pro.elixir
И чем оно тут поможет?
источник

Е

Евгений in pro.elixir
По мне так вообще ортогонально вопросу. Или я чего-то не догоняю.
источник

VS

Vladimir Sekisov in pro.elixir
atanych
задача на самом деле дико простая, есть табличка,
| user_id | points |

в эту табличку пишут 17 раз в секунду, нужна всегда актуальная position, которая берется по points

мы пока решаем в лоб, через оконные функции, но не очень быстро это, если в табл хотяб 400к записей
лучше дайте запрос, которым view генерите ,
а то из такой формулировки
только один вариант возникает - в чем проблема и нафига view?
источник

a

atanych in pro.elixir
нет живого вью, но это будет примерно так
SELECT * FROM records ORDER BY points DESC
источник

V

V in pro.elixir
Евгений
И чем оно тут поможет?
Вычисляемое значение position зависит от вставляемого points. Можно вычислять position не массовым пересчётом materialized view, а точечно только для обновляемых points.
источник

a

atanych in pro.elixir
atanych
нет живого вью, но это будет примерно так
SELECT * FROM records ORDER BY points DESC
а, ну еще там будет
ROW_NUMBER() OVER (ORDER BY
источник