170 похожих чатов

Кэширование redis могу использовать но как его испольвать для

оптимизации insert update запросов?

13 ответов

26 просмотров

Никак

Aртур-It Автор вопроса
Feanorx
Никак

Всмысле никак. Серверы же как то принимают и по 1млн запросов

в бд обычно встречаются две противоречивые задачи: быстро читать (olap) и быстро писать (oltp). Для быстрого формирования выборки для чтения нужны индексы, которые мешаю быстрой записи. Таже не стоит забывать на наложенные ограничения (например уникальность записи), которые тоже могут тормозить запись. Нужно разбираться конкретно. плюс разные виды блокировок при параллельном доступе

Aртур-It Автор вопроса

Нормализация данных; вынесение чтение на реплику, чтобы мастер разгрузить; горизонтальное маштабирование. Если домен коллаборативный (т.е. N кол-во пользователей работает с одним ресурсом), то можно апдейты заменить на инсёрты (тогда пользователь будет получать результат операции позже)

Aртур It
Всмысле убрать инсерты?

Тот же вопрос. Я вроде не писал, что инсёрты надо убрать

Aртур-It Автор вопроса
John Doe
Тот же вопрос. Я вроде не писал, что инсёрты надо ...

Спутал, хотел написать всмысле апдейты убрать

Aртур It
Спутал, хотел написать всмысле апдейты убрать

В коллаборативных домене, при апдейте одной строки, будут блокировки, а соответственно, все конекшены будут выстраиваться в очередь и ждать пока блокировка отпустится. Если разрешать делать инсёрты, то блокировок не будет. Пример: 10000 пользователей одновременно пытаются купить книгу, бестселлер. Ты не можешь продать больше, чем у тебя есть. Придётся блокировать строку, которая отвечает за кол-во на складе, и уменьшать кол-во при каждой успешной покупке. Все 10000 пользователей выстроятся в очередь из-за блокировки строки (скорее всего намного меньше, потому что коннекты к бд закончатся раньше). Решение может быть таким: Убираешь апдейты строки, ответственной за кол-во книг на складе. Разрешаешь всем делать заказы т.е. инсёрты. Решение об инсёрте принимаешь на основе stale данных, которые ты отдаешь на операции чтения. Офервлоу по заказам и кол-ву книжек разрешаешь в бекграунде. Те, кто оплатил или заказал, получат уведомление с тем, что извините, закончились на складе, можете подождать новой партии, либо вернуть деньги. И да, для такого подхода надо менять бизнес процесс

Aртур It
Всмысле убрать инсерты?

Наоборот, вместо апдейта использовать инсерты. Но вот только в pgsql апдейтов под капотом не существует, для базы все изменения это инсерты :) Поэтому реально можно просто нормально настроить базу (блокировки и прочее) и получить тот же результат.

Feanorx
Наоборот, вместо апдейта использовать инсерты. Но ...

В pgsql апдейты существуют, они блокируются, и это совсем другое поведение в отличии от инсёртов. То, о чем ты говоришь это MVCC, и да, с этой стороны update похож на delete + insert. Но это не значит что апдейтов не существкет и проблемы блокировок нет. Она есть, еще и какая. При этом очередь еще может распадаться, что будет приводить к ресурсному голоданию

John Doe
В pgsql апдейты существуют, они блокируются, и это...

Они существуют, но реально реализованы внутри как ты сказал. По поводу второй части твоего комментария, я же написал, что можно настроить базу, а не что она будет также работать по умолчанию.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта