powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Тендер на логику функционала
25 сообщений из 80, страница 1 из 4
Тендер на логику функционала
    #38757404
Добрый день.
Мой вопрос касается логики использования одиночного ресурса в многопользовательской среде. Возможно тема стара как мир, но это даже лучше, потому что не придется выдумывать велосипед, а воспользоваться коллективным человеческим опытом.

В таблице лежат остатки товаров, которые подвергаются продаже... На кассах в момент продажи создается документ ЧЕК, в который накидываются позиции товаров исходя из текущих остатков, то есть непосредственного наличия. При добавлении позиции указывается требуемое покупателем количество. По логике вещей акт продажи должен представлять собой единую транзакцию. Суть проблемы в том чтобы одну и ту же позицию в остатках могли использовать несколько продавцов, но при этом остатки не должны уйти в минуса, или в общем говоря расходиться с реальным наличием. Поскольку незавершенная транзакция не позволяет увидеть другой транзакции сколько реально осталось в остатках с учетом резерва этой самой незавершенной транзакции, то тут и возникает вопрос: как лучше построить межтранзакционное взаимодействие, чтобы найти золотую середину между масштабируемостью и постоянной консистенцией данных.

Буду благодарен за любые идеи

Модератор: Тема перенесена из форума "Oracle".
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38757458
gguueesstt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если товар продается по факту (т.е. физически присутствует), то запрещать "продажу в минус" не стоит.
Правда можно предупреждать кассира, что товар в нулях.
При проведении чека товар проверяется на наличие и если есть "минусы", то следует предпринять к-л действия (разрешить, дооприходовать, удалить из чека и пр.).

Как вариант - попадание в чек "резервирует" товар и его уже нельзя вбить в параллельный чек.

Проведение - транзакция, списывающая остатки.

зы: других вариантов не будет.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38757468
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[Архитектор Мендисабаль], так какие проблемы проверять остатки при завершении транзакции?
И если остатков меньше чем указано в нашей транзакции, делать откат с сообщением "Пока вы тыркались по кнопочкам количества товара, всё что можно было уплыло у Вас из под носа. Советуем Вам в следующий раз поменьше щёлкать лицом и у Вас будет всё ОК"
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38757486
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архитектор МендисабальСуть проблемы в том чтобы одну и ту же позицию в остатках могли использовать несколько продавцов, но при этом остатки не должны уйти в минуса
Поскольку у вас Оракул, достаточно на таблицу остатков повесить CHECK amount>=0. А прочий бред про транзакции лечится вдумчивым чтением концептов и прочей документации на предмет миниоткатов.

PS: "чтобы не расходилось с реальным наличием" - технически невозможно. Нет у компьютера способа узнать, что грузчик дядя Вася только что рассыпал по всему складу последний мешок муки.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38757492
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
транзакция на запись должна быть короткой и в самом конце - при закрытии чека:

1. открыли транзакцию
2. проверили наличие на остатках
3. записали изменения в БД
4. подали команду на ККМ о закрытии чека (если требуется)
5. закрыли транзакцию

транзакция должна блокировать данные
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38757871
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot [Архитектор Мендисабаль]]Добрый день.
Мой вопрос касается логики использования одиночного ресурса в многопользовательской среде. Возможно тема стара как мир, но это даже лучше, потому что не придется выдумывать велосипед, а воспользоваться коллективным человеческим опытом.

В таблице лежат остатки товаров, которые подвергаются продаже... На кассах в момент продажи создается документ ЧЕК, в который накидываются позиции товаров исходя из текущих остатков, то есть непосредственного наличия. При добавлении позиции указывается требуемое покупателем количество. По логике вещей акт продажи должен представлять собой единую транзакцию.[/quot]
Вы не корректно, на мой взгляд, трактуете понятие "транзакция". Когда "накидывает" - это одни транзакции, которые увеличивают количество забронированное, и, соответственно, уменьшают количество свободное. А завершающая транзакция (формирования чека) уменьшает количество и, естественно, забронированное количество.
[quot [Архитектор Мендисабаль]] Суть проблемы в том чтобы одну и ту же позицию в остатках могли использовать несколько продавцов, но при этом остатки не должны уйти в минуса, или в общем говоря расходиться с реальным наличием. Поскольку незавершенная транзакция не позволяет увидеть другой транзакции сколько реально осталось в остатках с учетом резерва этой самой незавершенной транзакции, то тут и возникает вопрос: как лучше построить межтранзакционное взаимодействие, чтобы найти золотую середину между масштабируемостью и постоянной консистенцией данных.

Буду благодарен за любые идеи
[/quot]
Нет никакой проблемы))
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38757873
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafтранзакция на запись должна быть короткой и в самом конце - при закрытии чека:

1. открыли транзакцию
2. проверили наличие на остатках
3. записали изменения в БД
4. подали команду на ККМ о закрытии чека (если требуется)
5. закрыли транзакцию

транзакция должна блокировать данные
))) в самом конце сообщить, что зря старался...
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38757883
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[Архитектор Мендисабаль],
И поймите, что дело вовсе не в "логике функционала", а в схеме БД)))
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758038
Смотрите, дело даже не в минусах как таковых, а о расхождении остатков в виде цыфры в базе и конкретного колва на полке изза например такой транзакционной проблемы как потеряные изменения. И вобщемто в суть проблемы минусов я не расширяю до таких факторов как грузчик дядя Вася, а хотя бы ограничиться проблемой одновременного доступа к данным. С теоретической точки зрения мне больше импонирует фича с резервом, резервом заданного в чеке колва, а не всего совсем. Блокировать запись не годится потому что если ктото начал свои покупки с трусов, то второму пришедшему ТОЛЬКО за этими трусами невдомек ждать пока первый назаказывает себе еще 100 других позиций. Как собственно и организовать резерв или чтонить в этом роде меня и интересовало, потому де изменения сделанные одной транзакцией еще не видны другой пока первая не решит уже чтото...

Вообще я задавал этот вопрос на ветке Оракла потому что и ожидал решений с помощью доступных оракловых механизмов.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758049
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архитектор Мендисабальхотя бы ограничиться проблемой одновременного доступа к
данным.
Я же сказал: читай концепты о том как взаимодействуют update из параллельных транзакций на
уровне read committed (умолчательном для оракула). Тогда ты поймёшь, что Бредятина в
кои-то веки не сказал фигню и проблемы действительно нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758056
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot [Архитектор Мендисабаль]]изза например такой транзакционной проблемы как потеряные изменения.....[/quot]
А можно спросить, а что это за такая проблема? И в какой конкретно СУБД и при каких условиях она есть?
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758172
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot [Архитектор Мендисабаль]]Смотрите, дело даже не в минусах как таковых, а о расхождении остатков в виде цыфры в базе и конкретного колва на полке изза например такой транзакционной проблемы как потеряные изменения. И вобщемто в суть проблемы минусов я не расширяю до таких факторов как грузчик дядя Вася, а хотя бы ограничиться проблемой одновременного доступа к данным. С теоретической точки зрения мне больше импонирует фича с резервом, резервом заданного в чеке колва, а не всего совсем. Блокировать запись не годится потому что если ктото начал свои покупки с трусов, то второму пришедшему ТОЛЬКО за этими трусами невдомек ждать пока первый назаказывает себе еще 100 других позиций. Как собственно и организовать резерв или чтонить в этом роде меня и интересовало, потому де изменения сделанные одной транзакцией еще не видны другой пока первая не решит уже чтото...

Вообще я задавал этот вопрос на ветке Оракла потому что и ожидал решений с помощью доступных оракловых механизмов.[/quot]
Это здесь распространенное явление))) Вроде человека что-то интересует, и он задает вопрос. А на самом деле - не интересует.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758296
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[Архитектор Мендисабаль],

Вам дали правильный ответ в первом же посте - нельзя ограничивать кассу количеством товара. Дело кассира пробить по кассе ровно столько товара, сколько взял покупатель. И кассиру абсолютно до лампочки сколько там висит на остатке. Поэтому никаких проблем нет. У вас есть таблица с перечнем товаров и ценой - ее и используйте в процедуре продажи по кассе. И поскольку вы туда обращаетесь только для чтения то транзакция будет только на таблице продаж по кассе а не на товаре. Соответственно делайте транзакцию минимальной и все у вас получится.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758531
gguueesstt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Злой Бобр[Архитектор Мендисабаль],

Вам дали правильный ответ в первом же посте - нельзя ограничивать кассу количеством товара. Дело кассира пробить по кассе ровно столько товара, сколько взял покупатель. И кассиру абсолютно до лампочки сколько там висит на остатке. Поэтому никаких проблем нет. У вас есть таблица с перечнем товаров и ценой - ее и используйте в процедуре продажи по кассе. И поскольку вы туда обращаетесь только для чтения то транзакция будет только на таблице продаж по кассе а не на товаре. Соответственно делайте транзакцию минимальной и все у вас получится.В моем опыте была ситуация, когда запрещались продажа в минус только неск. групп товара (причем продажа по факту), но по которым недопустим пересорт ввиду воровства и дороговизны.

зы: Особенности БД тут абсолютно не причем. Делать надо исходя из того, что "БД заранее неизвестна". Да хоть DBF.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758644
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ моем опыте была ситуация, когда запрещались продажа в минус только неск. групп товара
А можете развернуто рассказать, что происходит в физическом мире при продаже в минус?
Пациент оплатил ящик водки, пришел, а на складе только пол-ящика.Что происходит дальше?
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758758
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gguueessttВ моем опыте была ситуация, когда запрещались продажа в минус только неск. групп товара (причем продажа по факту), но по которым недопустим пересорт ввиду воровства и дороговизны.
Т.е. вы хотите сказать что взяв телевизор и подойдя к кассе я несмогу заплатить, потому что программа не даст продать в минус?.. Вы наверное живете в какой-то интересной стране. За такое магазин не только заплатит по суду, но и "прославится" на всю страну.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758763
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Злой Бобр[Архитектор Мендисабаль],

Вам дали правильный ответ в первом же посте - нельзя ограничивать кассу количеством товара. Дело кассира пробить по кассе ровно столько товара, сколько взял покупатель. И кассиру абсолютно до лампочки сколько там висит на остатке. Поэтому никаких проблем нет. У вас есть таблица с перечнем товаров и ценой - ее и используйте в процедуре продажи по кассе. И поскольку вы туда обращаетесь только для чтения то транзакция будет только на таблице продаж по кассе а не на товаре. Соответственно делайте транзакцию минимальной и все у вас получится.
Тогда бы и вопроса не было бы. Так что ответ (подразумевающий наличие товара в руках покупателя) - не правильный)).
"На кассах в момент продажи создается документ ЧЕК, в который накидываются позиции товаров исходя из текущих остатков, то есть непосредственного наличия."
Впрочем, уже выяснилось, что автора вопроса никакие ответы не интересуют))
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758790
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бредятина,

Ответ правильный даже при таком подходе. То что описываете Вы относится к организации работы продавца в секции магазина. По уму продавец через терминал (кпк, ...) формирует счет покупателю. Потом покупатель идет на кассу и оплачивает товар в счете. После оплаты получает чек. Дальше если покупатель сам забирает товар то грузчики перемещают товар по списку в секцию выдачи, если оплачена доставка то перемещается в секцию доставки и доставляется покупателю в указанную точку.
В любом варианте никаких проблем нет. Вероятно ТС просто теоретик, поэтому и задает подобные вопросы.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758802
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Злой БобрБредятина,
По уму продавец через терминал (кпк, ...) формирует счет покупателю. Потом покупатель идет на кассу и оплачивает товар в счете. После оплаты получает чек. Дальше если покупатель сам забирает товар то грузчики перемещают товар по списку в секцию выдачи, если оплачена доставка то перемещается в секцию доставки и доставляется покупателю в указанную точку.
В любом варианте никаких проблем нет. Вероятно ТС просто теоретик, поэтому и задает подобные вопросы.
С чего бы думать, что так работают все магазины. Был как-то в Технопоинте (не знаю местная наша сеть или она завезена к нам москвичами), так там сначала надо выбрать товар (причём необязательно по ихним мониторам, моожно и с домашнего распечатать что хочешь у них купить, потом пойти в кассу и заплатить деньги, а уж потом с чеком на руках в очередь к продавцам.
То есть отдавая деньги покупатель особо не представляет действительно ли в магазине есть такой товар. Один раз у них полчаса ждал когда мне видеокарту принесут (сейчас подумал, что видимо, у них не оказалось в магазин напротив похоже бегали).
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758805
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Злой БобрgguueessttВ моем опыте была ситуация, когда запрещались продажа в минус только неск. групп товара (причем продажа по факту), но по которым недопустим пересорт ввиду воровства и дороговизны.
Т.е. вы хотите сказать что взяв телевизор и подойдя к кассе я несмогу заплатить, потому что программа не даст продать в минус?.. Вы наверное живете в какой-то интересной стране. За такое магазин не только заплатит по суду, но и "прославится" на всю страну.
Похоже у автора топика ситуация, когда сначала идёшь в кассу отдавать деньги, а уже потом с чеком бегаешь, ищёшь где же находится твой телевизор
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758845
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне почему-то кажется, что речь больше идет о продаже, условно говоря, железнодорожных билетов несколькими кассами. Вопрос - как избежать ситуации продажи последнего билета двумя кассирами
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758854
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londinium, в ждкассах любой билет последний. Ибо номер вагона и номер места сразу пропечатываются.
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758863
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.Fontaine, а там где не пропечатываются, последних билетов нет вообще. Всё влезут, кто билеты успел до отправления поезда купить
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758904
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИбо номер вагона и номер места сразу пропечатываются
А ситуация, когда два кассира хотят толкнуть одно и тоже место?
...
Рейтинг: 0 / 0
Тендер на логику функционала
    #38758925
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.Fontaine(не знаю местная наша сеть или она завезена к нам москвичами)москвичами, конечно, всё зло от них, клятых
...
Рейтинг: 0 / 0
25 сообщений из 80, страница 1 из 4
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Тендер на логику функционала
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]