Size: a a a

Архитектура ИТ-решений

2020 October 05

PT

Peter Tugolukov in Архитектура ИТ-решений
Не вижу, как это решит проблему большого конкурентного доступа к одним и тем же строкам.
источник

OF

Oleg Fedyakin in Архитектура ИТ-решений
так доступа  к одним и тем же строкам не будет.
источник

OF

Oleg Fedyakin in Архитектура ИТ-решений
по крайней мере в той большой таблице с 10млн записями, в случае резервирования.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Можем на примере расписать?
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Что бы для некоторых тупых понятней стало :)
источник

OF

Oleg Fedyakin in Архитектура ИТ-решений
а какие запросы при отргрузке происходят? тоже выбираются конкретные id, а не любой с таким же sku?
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Так, у вас к этой таблице идут запросы только для обновления/получения статуса reserved?
Товар, который нужно зарезервировать можно уникально идентифицировать по ID?
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Gennadiy Kruglov
Так, у вас к этой таблице идут запросы только для обновления/получения статуса reserved?
Товар, который нужно зарезервировать можно уникально идентифицировать по ID?
Да, только для получения ID товара и обновления у него статуса reserved. Клиенту надо отдать id товара, который зарезервировали.
Id уникальный, да.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Oleg Fedyakin
а какие запросы при отргрузке происходят? тоже выбираются конкретные id, а не любой с таким же sku?
Никаких. Только резервирование, отдача клиенту ID товара и все.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Peter Tugolukov
Да, только для получения ID товара и обновления у него статуса reserved. Клиенту надо отдать id товара, который зарезервировали.
Id уникальный, да.
Тогда зачем выполнять такой запрос: SELECT FOR UPDATE с условием по available = 1, project_id = XXX и reserved = 0.

Почему нельзя сделать запрос с условием id=XXX?
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Oleg Fedyakin
так доступа  к одним и тем же строкам не будет.
Как я понял, надо сначала проверить сумму, а потом записать. И все это в соседней таблице. Но при чтении и параллельной записи надо лочить, что бы избежать ситуации, когда товары кончились, но их уже кто то забронировал.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Gennadiy Kruglov
Тогда зачем выполнять такой запрос: SELECT FOR UPDATE с условием по available = 1, project_id = XXX и reserved = 0.

Почему нельзя сделать запрос с условием id=XXX?
Пользователю нужен любой товар определенного project id.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
У пользователя нет ID.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Peter Tugolukov
Пользователю нужен любой товар определенного project id.
Нужен для чего? Вам же нужно просто проставить флаг резерва.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Ага.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Только у одного товара.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Ну так выбирайте по ID и проставляйте. Зачем усложнять уловие?
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Я привел плохой пример. Ща напишу другой, чтобы понятнее было.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Надо написать сервис, который будет продавать лотерейные билеты.
В сервисе может быть несколько проектов ("спортлото", "кубышка", и т.д.).
У каждого проекта может быть большая куча лотерейных билетов.
Приходит пользователь - ему надо выдать ровно один билет, и пометить этот билет как "использованый". И этот билет уже не надо выдавать другим юзерам.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Да не важно, на самом деле. Я клоню к тому, что вам возможно нужно ещё больше нормализовать таблицы. ID+признак резерва, всё.
источник