|
|
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Добрый день. Мой вопрос касается логики использования одиночного ресурса в многопользовательской среде. Возможно тема стара как мир, но это даже лучше, потому что не придется выдумывать велосипед, а воспользоваться коллективным человеческим опытом. В таблице лежат остатки товаров, которые подвергаются продаже... На кассах в момент продажи создается документ ЧЕК, в который накидываются позиции товаров исходя из текущих остатков, то есть непосредственного наличия. При добавлении позиции указывается требуемое покупателем количество. По логике вещей акт продажи должен представлять собой единую транзакцию. Суть проблемы в том чтобы одну и ту же позицию в остатках могли использовать несколько продавцов, но при этом остатки не должны уйти в минуса, или в общем говоря расходиться с реальным наличием. Поскольку незавершенная транзакция не позволяет увидеть другой транзакции сколько реально осталось в остатках с учетом резерва этой самой незавершенной транзакции, то тут и возникает вопрос: как лучше построить межтранзакционное взаимодействие, чтобы найти золотую середину между масштабируемостью и постоянной консистенцией данных. Буду благодарен за любые идеи Модератор: Тема перенесена из форума "Oracle". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 13:16 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Если товар продается по факту (т.е. физически присутствует), то запрещать "продажу в минус" не стоит. Правда можно предупреждать кассира, что товар в нулях. При проведении чека товар проверяется на наличие и если есть "минусы", то следует предпринять к-л действия (разрешить, дооприходовать, удалить из чека и пр.). Как вариант - попадание в чек "резервирует" товар и его уже нельзя вбить в параллельный чек. Проведение - транзакция, списывающая остатки. зы: других вариантов не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 13:40 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
[Архитектор Мендисабаль], так какие проблемы проверять остатки при завершении транзакции? И если остатков меньше чем указано в нашей транзакции, делать откат с сообщением "Пока вы тыркались по кнопочкам количества товара, всё что можно было уплыло у Вас из под носа. Советуем Вам в следующий раз поменьше щёлкать лицом и у Вас будет всё ОК" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 13:45 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Архитектор МендисабальСуть проблемы в том чтобы одну и ту же позицию в остатках могли использовать несколько продавцов, но при этом остатки не должны уйти в минуса Поскольку у вас Оракул, достаточно на таблицу остатков повесить CHECK amount>=0. А прочий бред про транзакции лечится вдумчивым чтением концептов и прочей документации на предмет миниоткатов. PS: "чтобы не расходилось с реальным наличием" - технически невозможно. Нет у компьютера способа узнать, что грузчик дядя Вася только что рассыпал по всему складу последний мешок муки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 13:52 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
транзакция на запись должна быть короткой и в самом конце - при закрытии чека: 1. открыли транзакцию 2. проверили наличие на остатках 3. записали изменения в БД 4. подали команду на ККМ о закрытии чека (если требуется) 5. закрыли транзакцию транзакция должна блокировать данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 13:54 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
[quot [Архитектор Мендисабаль]]Добрый день. Мой вопрос касается логики использования одиночного ресурса в многопользовательской среде. Возможно тема стара как мир, но это даже лучше, потому что не придется выдумывать велосипед, а воспользоваться коллективным человеческим опытом. В таблице лежат остатки товаров, которые подвергаются продаже... На кассах в момент продажи создается документ ЧЕК, в который накидываются позиции товаров исходя из текущих остатков, то есть непосредственного наличия. При добавлении позиции указывается требуемое покупателем количество. По логике вещей акт продажи должен представлять собой единую транзакцию.[/quot] Вы не корректно, на мой взгляд, трактуете понятие "транзакция". Когда "накидывает" - это одни транзакции, которые увеличивают количество забронированное, и, соответственно, уменьшают количество свободное. А завершающая транзакция (формирования чека) уменьшает количество и, естественно, забронированное количество. [quot [Архитектор Мендисабаль]] Суть проблемы в том чтобы одну и ту же позицию в остатках могли использовать несколько продавцов, но при этом остатки не должны уйти в минуса, или в общем говоря расходиться с реальным наличием. Поскольку незавершенная транзакция не позволяет увидеть другой транзакции сколько реально осталось в остатках с учетом резерва этой самой незавершенной транзакции, то тут и возникает вопрос: как лучше построить межтранзакционное взаимодействие, чтобы найти золотую середину между масштабируемостью и постоянной консистенцией данных. Буду благодарен за любые идеи [/quot] Нет никакой проблемы)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 17:13 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Nafтранзакция на запись должна быть короткой и в самом конце - при закрытии чека: 1. открыли транзакцию 2. проверили наличие на остатках 3. записали изменения в БД 4. подали команду на ККМ о закрытии чека (если требуется) 5. закрыли транзакцию транзакция должна блокировать данные ))) в самом конце сообщить, что зря старался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 17:15 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
[Архитектор Мендисабаль], И поймите, что дело вовсе не в "логике функционала", а в схеме БД))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 17:18 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Смотрите, дело даже не в минусах как таковых, а о расхождении остатков в виде цыфры в базе и конкретного колва на полке изза например такой транзакционной проблемы как потеряные изменения. И вобщемто в суть проблемы минусов я не расширяю до таких факторов как грузчик дядя Вася, а хотя бы ограничиться проблемой одновременного доступа к данным. С теоретической точки зрения мне больше импонирует фича с резервом, резервом заданного в чеке колва, а не всего совсем. Блокировать запись не годится потому что если ктото начал свои покупки с трусов, то второму пришедшему ТОЛЬКО за этими трусами невдомек ждать пока первый назаказывает себе еще 100 других позиций. Как собственно и организовать резерв или чтонить в этом роде меня и интересовало, потому де изменения сделанные одной транзакцией еще не видны другой пока первая не решит уже чтото... Вообще я задавал этот вопрос на ветке Оракла потому что и ожидал решений с помощью доступных оракловых механизмов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 18:41 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Архитектор Мендисабальхотя бы ограничиться проблемой одновременного доступа к данным. Я же сказал: читай концепты о том как взаимодействуют update из параллельных транзакций на уровне read committed (умолчательном для оракула). Тогда ты поймёшь, что Бредятина в кои-то веки не сказал фигню и проблемы действительно нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 18:46 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
[quot [Архитектор Мендисабаль]]изза например такой транзакционной проблемы как потеряные изменения.....[/quot] А можно спросить, а что это за такая проблема? И в какой конкретно СУБД и при каких условиях она есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 18:52 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
[quot [Архитектор Мендисабаль]]Смотрите, дело даже не в минусах как таковых, а о расхождении остатков в виде цыфры в базе и конкретного колва на полке изза например такой транзакционной проблемы как потеряные изменения. И вобщемто в суть проблемы минусов я не расширяю до таких факторов как грузчик дядя Вася, а хотя бы ограничиться проблемой одновременного доступа к данным. С теоретической точки зрения мне больше импонирует фича с резервом, резервом заданного в чеке колва, а не всего совсем. Блокировать запись не годится потому что если ктото начал свои покупки с трусов, то второму пришедшему ТОЛЬКО за этими трусами невдомек ждать пока первый назаказывает себе еще 100 других позиций. Как собственно и организовать резерв или чтонить в этом роде меня и интересовало, потому де изменения сделанные одной транзакцией еще не видны другой пока первая не решит уже чтото... Вообще я задавал этот вопрос на ветке Оракла потому что и ожидал решений с помощью доступных оракловых механизмов.[/quot] Это здесь распространенное явление))) Вроде человека что-то интересует, и он задает вопрос. А на самом деле - не интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 21:45 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
[Архитектор Мендисабаль], Вам дали правильный ответ в первом же посте - нельзя ограничивать кассу количеством товара. Дело кассира пробить по кассе ровно столько товара, сколько взял покупатель. И кассиру абсолютно до лампочки сколько там висит на остатке. Поэтому никаких проблем нет. У вас есть таблица с перечнем товаров и ценой - ее и используйте в процедуре продажи по кассе. И поскольку вы туда обращаетесь только для чтения то транзакция будет только на таблице продаж по кассе а не на товаре. Соответственно делайте транзакцию минимальной и все у вас получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 02:13 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Злой Бобр[Архитектор Мендисабаль], Вам дали правильный ответ в первом же посте - нельзя ограничивать кассу количеством товара. Дело кассира пробить по кассе ровно столько товара, сколько взял покупатель. И кассиру абсолютно до лампочки сколько там висит на остатке. Поэтому никаких проблем нет. У вас есть таблица с перечнем товаров и ценой - ее и используйте в процедуре продажи по кассе. И поскольку вы туда обращаетесь только для чтения то транзакция будет только на таблице продаж по кассе а не на товаре. Соответственно делайте транзакцию минимальной и все у вас получится.В моем опыте была ситуация, когда запрещались продажа в минус только неск. групп товара (причем продажа по факту), но по которым недопустим пересорт ввиду воровства и дороговизны. зы: Особенности БД тут абсолютно не причем. Делать надо исходя из того, что "БД заранее неизвестна". Да хоть DBF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 10:47 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
авторВ моем опыте была ситуация, когда запрещались продажа в минус только неск. групп товара А можете развернуто рассказать, что происходит в физическом мире при продаже в минус? Пациент оплатил ящик водки, пришел, а на складе только пол-ящика.Что происходит дальше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:54 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
gguueessttВ моем опыте была ситуация, когда запрещались продажа в минус только неск. групп товара (причем продажа по факту), но по которым недопустим пересорт ввиду воровства и дороговизны. Т.е. вы хотите сказать что взяв телевизор и подойдя к кассе я несмогу заплатить, потому что программа не даст продать в минус?.. Вы наверное живете в какой-то интересной стране. За такое магазин не только заплатит по суду, но и "прославится" на всю страну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:51 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Злой Бобр[Архитектор Мендисабаль], Вам дали правильный ответ в первом же посте - нельзя ограничивать кассу количеством товара. Дело кассира пробить по кассе ровно столько товара, сколько взял покупатель. И кассиру абсолютно до лампочки сколько там висит на остатке. Поэтому никаких проблем нет. У вас есть таблица с перечнем товаров и ценой - ее и используйте в процедуре продажи по кассе. И поскольку вы туда обращаетесь только для чтения то транзакция будет только на таблице продаж по кассе а не на товаре. Соответственно делайте транзакцию минимальной и все у вас получится. Тогда бы и вопроса не было бы. Так что ответ (подразумевающий наличие товара в руках покупателя) - не правильный)). "На кассах в момент продажи создается документ ЧЕК, в который накидываются позиции товаров исходя из текущих остатков, то есть непосредственного наличия." Впрочем, уже выяснилось, что автора вопроса никакие ответы не интересуют)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:53 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Бредятина, Ответ правильный даже при таком подходе. То что описываете Вы относится к организации работы продавца в секции магазина. По уму продавец через терминал (кпк, ...) формирует счет покупателю. Потом покупатель идет на кассу и оплачивает товар в счете. После оплаты получает чек. Дальше если покупатель сам забирает товар то грузчики перемещают товар по списку в секцию выдачи, если оплачена доставка то перемещается в секцию доставки и доставляется покупателю в указанную точку. В любом варианте никаких проблем нет. Вероятно ТС просто теоретик, поэтому и задает подобные вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:05 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Злой БобрБредятина, По уму продавец через терминал (кпк, ...) формирует счет покупателю. Потом покупатель идет на кассу и оплачивает товар в счете. После оплаты получает чек. Дальше если покупатель сам забирает товар то грузчики перемещают товар по списку в секцию выдачи, если оплачена доставка то перемещается в секцию доставки и доставляется покупателю в указанную точку. В любом варианте никаких проблем нет. Вероятно ТС просто теоретик, поэтому и задает подобные вопросы. С чего бы думать, что так работают все магазины. Был как-то в Технопоинте (не знаю местная наша сеть или она завезена к нам москвичами), так там сначала надо выбрать товар (причём необязательно по ихним мониторам, моожно и с домашнего распечатать что хочешь у них купить, потом пойти в кассу и заплатить деньги, а уж потом с чеком на руках в очередь к продавцам. То есть отдавая деньги покупатель особо не представляет действительно ли в магазине есть такой товар. Один раз у них полчаса ждал когда мне видеокарту принесут (сейчас подумал, что видимо, у них не оказалось в магазин напротив похоже бегали). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:12 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Злой БобрgguueessttВ моем опыте была ситуация, когда запрещались продажа в минус только неск. групп товара (причем продажа по факту), но по которым недопустим пересорт ввиду воровства и дороговизны. Т.е. вы хотите сказать что взяв телевизор и подойдя к кассе я несмогу заплатить, потому что программа не даст продать в минус?.. Вы наверное живете в какой-то интересной стране. За такое магазин не только заплатит по суду, но и "прославится" на всю страну. Похоже у автора топика ситуация, когда сначала идёшь в кассу отдавать деньги, а уже потом с чеком бегаешь, ищёшь где же находится твой телевизор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:14 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Мне почему-то кажется, что речь больше идет о продаже, условно говоря, железнодорожных билетов несколькими кассами. Вопрос - как избежать ситуации продажи последнего билета двумя кассирами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:38 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
londinium, в ждкассах любой билет последний. Ибо номер вагона и номер места сразу пропечатываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:43 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
Mr.Fontaine, а там где не пропечатываются, последних билетов нет вообще. Всё влезут, кто билеты успел до отправления поезда купить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:45 |
|
||
|
Тендер на логику функционала
|
|||
|---|---|---|---|
|
#18+
авторИбо номер вагона и номер места сразу пропечатываются А ситуация, когда два кассира хотят толкнуть одно и тоже место? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 14:06 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38758172&tid=1540780]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 519ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...