Size: a a a

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

2020 October 05

СХ

Саддам Хусейн... in Архитектура ИТ-решений
Peter Tugolukov
У меня есть таблица с товарами с примерно следующими столбцами:
- id; // unique
- sku // not unique
- avaiable // true|false
- reserved // true|false
- project_id // not unique
Может быть много строк с одинаковыми sku, project_id.
Когда хотим зарезервировать товар для нужного project_id, делает SELECT FOR UPDATE с условием по available = 1, project_id = XXX и reserved = 0. Апдэйтим reserved.
Select for update limit 1
источник

СХ

Саддам Хусейн... in Архитектура ИТ-решений
Peter Tugolukov
Какие еще варианты кто знает?
А если так?
Update set reserved=1 where reserved=0 limit 1
источник

СХ

Саддам Хусейн... in Архитектура ИТ-решений
Саддам Хусейн
А если так?
Update set reserved=1 where reserved=0 limit 1
Там ещё как-то через last insert id можно получить id затронутой записи
источник

AT

Al T in Архитектура ИТ-решений
Peter Tugolukov
Окей, рассмотрю этот вариант, спасибо.
write-through cache никто не предлагал еще? ))
источник

PT

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

PT

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

AT

Al T in Архитектура ИТ-решений
ну это когда данные на запись пишутся в кеш (допустим редис) и потом в базу, а читаются всегда только из кеша... в кеше обновления по ключу как правило O(1) а в базу нагрузки соответственно тоже меньше и проблема с локами не так актуальна
источник

AT

Al T in Архитектура ИТ-решений
есть write-back cache а есть write-through
источник

PD

Phil Delgyado in Архитектура ИТ-решений
А какая сейчас нагрузка? Я не совсем понимаю, почему тормоза при схеме с select for update.
Ну висит блокировка, но она же недолго висеть-то должна. Вряд ли там по 100 экземпляров одного товара в секунду продаете?
А на меньшем никаких тормозов не должно быть.
Какой движок используется?
источник

LV

Leonid Vygovskiy in Архитектура ИТ-решений
По поводу моделей нашел и понравилось.

The University of Cambridge economist Joan Robinson (1962) emphasized the disutility of 1:1 maps and other overly detailed models: "A model which took account of all the variation of reality would be of no more use than a map at the scale of one to one."
источник

DZ

Denis Zarin in Архитектура ИТ-решений
Leonid Vygovskiy
По поводу моделей нашел и понравилось.

The University of Cambridge economist Joan Robinson (1962) emphasized the disutility of 1:1 maps and other overly detailed models: "A model which took account of all the variation of reality would be of no more use than a map at the scale of one to one."
Сорри за занудство, но на каждую метафору есть.. другая метафора)).

Норберт Винер говорил, что "хорошая модель кошки -- это другая кошка, а ещё лучше -- та же самая".
источник

DZ

Denis Zarin in Архитектура ИТ-решений
(В оригинале -- The best material model of a cat is another, or preferably the same, cat.)
источник

E

Eugene in Архитектура ИТ-решений
Peter Tugolukov
Какие еще варианты кто знает?
Добавить новое поле - а-ля статус со значениями New, sold. И при попытке приобретения билета делать update ticket set status=sold where id=:pId and status=New. Если update не прошёл, значит билетик к моменту update уже продан, берём новый.
источник
2020 October 06

E

Eugene in Архитектура ИТ-решений
Тут только ид. билетов надо выделять с учётом конкуренции и не бояться повторить update с другим ид., если таки случилось пересечение.
источник

VS

Vsevolod Shulaev in Архитектура ИТ-решений
Eugene
Тут только ид. билетов надо выделять с учётом конкуренции и не бояться повторить update с другим ид., если таки случилось пересечение.
Насколько я понял в примере билеты не уникальны. Там ID товара + количество остатка. Т.е. на 100 билетов условного спортлото будет одна строчка: id спортлото, кол-во 100.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Vsevolod Shulaev
Насколько я понял в примере билеты не уникальны. Там ID товара + количество остатка. Т.е. на 100 билетов условного спортлото будет одна строчка: id спортлото, кол-во 100.
Нет. На каждый билет будет своя строка в бд. Пользователю нужно увидеть, что это за билет.
источник

PT

Peter Tugolukov in Архитектура ИТ-решений
Phil Delgyado
А какая сейчас нагрузка? Я не совсем понимаю, почему тормоза при схеме с select for update.
Ну висит блокировка, но она же недолго висеть-то должна. Вряд ли там по 100 экземпляров одного товара в секунду продаете?
А на меньшем никаких тормозов не должно быть.
Какой движок используется?
Билетов может быть порядка 10 лямов. Производительности хотелось бы добиться порядка 150 rps.
источник

VS

Vsevolod Shulaev in Архитектура ИТ-решений
Peter Tugolukov
Нет. На каждый билет будет своя строка в бд. Пользователю нужно увидеть, что это за билет.
Т.е. для условных 100 билетов спортлото будет 100 записей?
источник

PT

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

PT

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