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

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

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

13 ответов

9 просмотров

Никак

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

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

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

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

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

Aртур-It Автор вопроса
Aртур It
Всмысле убрать инсерты?

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

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

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

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

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

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

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

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

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

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

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

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

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

Скажите, можно ли как-то "переместить" динамический массив из одной переменной в другую? Скажем, переместить из TList<> в TArray<>. Именно переместить, а не скопировать. Если ...
Eugene Krasnikov (ᴊɪɴ x)
37
Вот еще криповенькая штука. uMain.pas(517,3) Warning: Case statement does not handle all possible cases И ЧО? 😂
Александр (Rouse_) Багель
20
комрады, че-та лыжы не едут var tmpFont: TFont; begin tmpFont:= TFont.Create; try case rgFontColor.ItemIndex of 0: tmpFont.Color:= clWindowText; 1: tmpFo...
Ed Doc
34
Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
.model small .stack 100h .data a db 'Hello, World!', '$' ; исходная строка b db 20 dup(?) ; строка b с запасом на максимальную длину .code main: ...
Алексей -man
3
вопрос, кого посмотреть в ютубе или где почитать про указатели чтобы раз и навсегда запомнить зачем они нужны и как правильно ими пользоваться? поделитесь хорошими ресурсами, ...
-
14
М-да. Почему бы просто со stringlist не работать?
Michael Longneck
23
Is there a digital way to cut the electricity from a usb in linux? It sounds weird, but it's exactly what I need to do. I tried to simulate the unplug/replug but is not the ...
Eduard Rivas
15
Редактор листа Excel, по сути двумерный массив ячеек. Ячейка - это экземпляр класса, у нее всякие свойства, методы. Проблема в том, что количество используемых строк и колоно...
Sergey Bodrov
2
Всем привет. Подскажите пожалуйста, как решить вопрос с подсветкой синтаксиса в vscode. Уже и разные плагины установил, и пробовал пошаманить в json settings, ничего не получ...
EEv9ENN 🤖
6
Карта сайта