powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Задача для версионника
25 сообщений из 123, страница 1 из 5
Задача для версионника
    #32826305
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Представим себе вокзал. Несколько окошек, где продают билеты. Каждая транзакция - продажа партии билетов.
Как проходит этот процесс мы все знаем. Подходим к окошку и говорим - мне 2 билета до Москвы. И начинается... транзакция. Заканчивается она лишь тогда, когда внесены все паспортные данные и деньги за билеты получены.
а теперь, предположим что вы - отправляете в Москву группу туристов. Скажем так - человек 30...Т.е. я хочу сказать что транзакция может получиться очень длинной. А билеты - ресурс ограниченный. Может не хватить. Слеловательно билеты для группы должны быть заблокированы в начале транзакции. Подобные задачи возникают довольно часто. Например при продаже акций или в процессе набивки накладной
Задача:
1) Продажа проходит одной транзакцией
2) Продажа (транзакция) растянута во времени (до получаса)
3) продавать билеты на один и тот же рейс могут одновременно из нескольких окошек.

Для блокировочника - все понятно, решить задачу очень легко.
А как будет выглядеть решение для версионника? т.е. я имею в виду Оракл?
...
Рейтинг: 0 / 0
Задача для версионника
    #32826335
zass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Организуйте топик для ОРАКЛА, так быстрее будет
...
Рейтинг: 0 / 0
Задача для версионника
    #32826351
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanА как будет выглядеть решение для версионника? т.е. я имею в виду Оракл?
На Оракле это сделать невозможно!!!
Написал бы структуру БД. Билеты ведь не только по количеству учитываются, но и по местам. Например можно быстро "застолбить" нужные места в нужном количестве признаком "зарезервировано". После ввода всей инфы - поменять статус на "продано".
...
Рейтинг: 0 / 0
Задача для версионника
    #32826358
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select for update..?
...
Рейтинг: 0 / 0
Задача для версионника
    #32826373
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Серега
Разве Оракл не лучшая СУБД для ОЛТП задач?
День длинный, может кто-нить, чё-нить и предложит, а мы посмотрим ...
...
Рейтинг: 0 / 0
Задача для версионника
    #32826408
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanДень длинный, может кто-нить, чё-нить и предложит, а мы посмотрим ...
Я тебе через 20 минут предложил, чем не ндравится?
...
Рейтинг: 0 / 0
Задача для версионника
    #32826418
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СерегаЯ тебе через 20 минут предложил, чем не ндравится?
Это не решение а отмазка..
...
Рейтинг: 0 / 0
Задача для версионника
    #32826425
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слишком сильно усложнять задачу не будем начнем с этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
-----------------------------------------------------------------------
--  Расписание движения поездов
-----------------------------------------------------------------------
--  route_num       рейс
--  departure_dt    дата отправления
--  ticket_cnt      количество билетов (всего)
--  ticket_sold     количество проданных билетов
--
create table routes (
    route_num       char( 5 ) not null,
    departure_dt    date not null,
    tickets_cnt     integer not null,
    tickets_sold    integer,
    constraint AtCnt
        check((tickets_cnt>=tickets_sold) or (tickets_sold is null)),
    constraint AtRoute_PK
        primary key (route_num,departure_dt)
)
@
...
Рейтинг: 0 / 0
Задача для версионника
    #32826456
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanСлишком сильно усложнять задачу не будем начнем с этого:

ИМХО, твоя таблица больше смахивает на отмазку, чем мое предложение.
Продай мне по твоей структуре 5 общих, 3 плацкартных, 2 купейных и 1 СВ билет. Тут и Оракл сдохнет наверное.
...
Рейтинг: 0 / 0
Задача для версионника
    #32826460
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 gardenman
Тебе если для диплома - тогда за бабло надо бы, за так голову ломать над красивыми решениями неохота никому.

А если для того, чтобы работало - то Серега тебе уже предложил единественное правильное решение. Причем и для MS SQL и для Оракла.

И еще подсказка - транзакции тут ни при чем. Если конечно нужно самое уродское решение - тогда используй транзакции, вешай всю систему.

-- Tygra's --
...
Рейтинг: 0 / 0
Задача для версионника
    #32826479
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серега gardenmanСлишком сильно усложнять задачу не будем начнем с этого:

ИМХО, твоя таблица больше смахивает на отмазку, чем мое предложение.
Продай мне по твоей структуре 5 общих, 3 плацкартных, 2 купейных и 1 СВ билет. Тут и Оракл сдохнет наверное.

Нет, это не отмазка...поверь, решение есть. Не хочешь торговать билетами?...
Давай тогда торговать акциями. Обыкновенными неименными привелигированными. Можно поработать на складе. Предположим у нас есть 100 ящиков какого-то товара. И в разных филиалах его продают. сначала - оформление документов (выписка фсяких накладных и пр...). И чтоб пока документы оформляются - наши ящики не ушли кому-нить другому. Все - одной транзакцией.
В общем - условия - те же...
...
Рейтинг: 0 / 0
Задача для версионника
    #32826485
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygra2 gardenman
Тебе если для диплома - тогда за бабло надо бы, за так голову ломать над красивыми решениями неохота никому.

А если для того, чтобы работало - то Серега тебе уже предложил единественное правильное решение. Причем и для MS SQL и для Оракла.

И еще подсказка - транзакции тут ни при чем. Если конечно нужно самое уродское решение - тогда используй транзакции, вешай всю систему.

-- Tygra's --

Я свой диплом получил в 1988 году....((( Вообще-то тогда еще этому не учили.
А сейчас столько много умных, после интститутов....
...
Рейтинг: 0 / 0
Задача для версионника
    #32826508
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ свой диплом получил в 1988 году....((( Вообще-то тогда еще этому не учили.
А сейчас столько много умных, после интститутов....
Там и сейчас этому не учат :) Так что не переживайте - все в одинаковой ситуации, хоть сейчас, хоть тогда, хоть с дипломом, хоть без.

А с терминами все-же не заморачивайтесь - делайте так, как удобно, как лучше. Главное чтобы работало. И не важно, как оно там называется и кем кому приходится :)

-- Tygra's --
...
Рейтинг: 0 / 0
Задача для версионника
    #32826544
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanНет, это не отмазка...поверь, решение есть. Не хочешь торговать билетами?...
Давай тогда торговать акциями.В общем - условия - те же...
Фиг тебе - те-же? Отсюда и проблема у тебя растет. 8-) Даже в торговле ящиками товара есть варианты.

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

Исходи из того, что если ящики кончаются - это плохо (недоработка снабженцев), и скорее всего будет встречаться не очень часто. Далее. С чего ты решил что твое общение с БД заканчивается с концом транзакции? Отнють. Если транзакция прошла, то да. А если произошла искл.ситуация (поставь например ограничение на количество>=0 и ты ее получишь) и произошел откат, то никто не запрещает тебе в программе выяснить причину отката (опросить "свежее" количество), дать исправить документ юзеру и попытаться сохранить снова. Или, на худой конец, вывести юзеру месадж - "Извини, братан, кто первый встал того и тапки".
И тут кстати вообще по барабану, ИМХО, версионник или блокировочник. Нюансы могут быть, но общая схема та-же.
...
Рейтинг: 0 / 0
Задача для версионника
    #32826545
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дорогой Tygra! Смысл того, что здесь написано совсем другой. И я имел в виду совсем не то, о чем ты подумал. Я хочу сказать что существует класс задач, для которых Оракл не катит .
Вот как ты думаешь, почему кластерные реализации от Оракла и от IBM такие разные? Ведь совсем не потому, что Оракл круче и совсем не потому, что IBM не могут как Оракл. А потому, что в силу своих архитектурных особенностей JОракл по-другому просто не может )
...
Рейтинг: 0 / 0
Задача для версионника
    #32826553
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Серега
Вот-вот.... если мы не можем это запрограммировать, то давайте изменим процесс так, чтобы это можно было сделать... Хороший способ решать вопросы...делать вид, какбудто их нет...(С) Макаревич
...
Рейтинг: 0 / 0
Задача для версионника
    #32826555
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanСмысл того, что здесь написано совсем другой. И я имел в виду совсем не то, о чем ты подумал. Я хочу сказать что существует класс задач, для которых Оракл не катит .
Конечно!!! Но практически все задачи связанные с БД, не входят в этот перечень.
...
Рейтинг: 0 / 0
Задача для версионника
    #32826559
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanВот-вот.... если мы не можем это запрограммировать, то давайте изменим процесс так, чтобы это можно было сделать...
Переведи.
...
Рейтинг: 0 / 0
Задача для версионника
    #32826722
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта задача как раз из тех, для которой катят все СУБД, у которых есть транзакции. Можно и совсем без транзакций, но это несерьезно будет :)

Так что вас так смутило то в задаче?
Вам предложено решение. Вы толи его не принимаете, толи еще что- напишите, в чем проблемы.
Вами пока не предложено ни одного решения.

Кстати, с ящиками та же беда - не надо тут никаких транзакций, транзакции с клиента - это зло!

-- Tygra's --
...
Рейтинг: 0 / 0
Задача для версионника
    #32826763
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеется запись
insert into routes
(route_num,departure_dt,tickets_cnt,tickets_sold)
values ('C100','31.12.2004',1000,950)


видно, что было 1000 билетов, 950 из которых - продано.=> осталось 50 билетов.
Иммется два окошка. К первому подходит гражданин, и пытается 2 купить билета.
Кассарша начинает транзакцию, говорит:
select ... for update. Запись - блокирована.
К другому окошку подходит другой мэн...и просит 2 билета на тот же рейс.
Ну и другая кассирша тоже делает select ... for update на ту же запись...
ну и как им быть? Ждать пока кассирша в первом окошке не расчитается с клиентом и не сделает commit?
...
Рейтинг: 0 / 0
Задача для версионника
    #32826774
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвидно, что было 1000 билетов, 950 из которых - продано.=> осталось 50 билетов.
Иммется два окошка. К первому подходит гражданин, и пытается 2 купить билета.
Кассарша начинает транзакцию, говорит:
select ... for update. Запись - блокирована.
К другому окошку подходит другой мэн...и просит 2 билета на тот же рейс.
Ну и другая кассирша тоже делает select ... for update на ту же запись...
ну и как им быть? Ждать пока кассирша в первом окошке не расчитается с клиентом и не сделает commit?
Вам уже сказали решение без транзакций - именно то, которое нужно. Что вы к транзакциям прицепились?

-- Tygra's --
...
Рейтинг: 0 / 0
Задача для версионника
    #32826776
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас уже есть та структура, которую вы приводите, и менять ничего нельзя - тогда решения нет, пусть все пассажиры ждут, пока первый кассир в тувалет сходит и освободит таблицу :))

-- Tygra's --
...
Рейтинг: 0 / 0
Задача для версионника
    #32826778
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 tygra
Пожалуйста, не заходи в этот топик, кругом столько других интересных...
...
Рейтинг: 0 / 0
Задача для версионника
    #32826800
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman Ждать пока кассирша в первом окошке не расчитается с клиентом и не сделает commit?
А, при такой схеме , зачем блокировать вообще, если у нас еще 50 билетов, а берут обычно не более 5? А если бы было 950 свободных и очередища? Наверное поезд уедет прежде, чем один вагон обилетят.

gardenmanНет, это не отмазка...поверь, решение есть.
Ну не томи уже, опубликуй.
...
Рейтинг: 0 / 0
Задача для версионника
    #32826801
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаем....
Усложним задачу... пусть все будет без транзакций...
К первому окошку подходит руководитель тургруппы - и заказывает 30 билетов... Ну и естественно начинает оформлять их по очереди...
Пока они то да се...по одному билету оформляли, на других вокзалах и в других окошках скупили 25 билетов.. ну и 5 билетов руководителю тургруппы не хватило... Обидно...А нужно туристов скопом везти.... Придется сдавать купленные.
...
Рейтинг: 0 / 0
25 сообщений из 123, страница 1 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Задача для версионника
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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