powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Задача для версионника
23 сообщений из 123, страница 5 из 5
Задача для версионника
    #32890408
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushokПравда, HTML простой, как сибирский валенок.Видимо усложнение хтмл-я не является целью нашего вебмастера. :) Лично я с этим согласен.

andrushokНи те фреймов, ни DHTML, ни JavaScript, ни какой жабы конечно (может иде есть, везде не лазил).По-моему из этого используется только немного джаваскрипта.

andrushokВот тольки вопросик, а чой то за скриты таки хитрые либо без расширенияВроде бы в конфиге апача несложно определить обработчик для расширения или директории. Мы используем мод_перл.

andrushokКстати, а Вы согластны, что есть некоторые приложения, иде время connection особой роли не играет?Конечно. :)
...
Рейтинг: 0 / 0
Задача для версионника
    #32890459
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леха Ватный
Видимо усложнение хтмл-я не является целью нашего вебмастера. :) Лично я с этим согласен.


Я тоже, не люблю наворотов. Можете радоваться, что вам (Вам и вашему веб мастеру) позволена така роскошь

Леха Ватный
По-моему из этого используется только немного джаваскрипта.


Ну без него воще тяжело. Рас мало, вот и не нашел. Правильной дорогой идете, товарищи...

Леха Ватный
Вроде бы в конфиге апача несложно определить обработчик для расширения или директории. Мы используем мод_перл.


И совсем не "вроде бы". Есть там некий AddHandler который это все отпахивает. Я се про расщирения. Ну и с директориями там усе тип-топ. Вот тольки зачем html у перлового скрипта иметь - непонятно. Наверно, чоб враги не догадались! Я ничого супротив не имею... Хоть xxx ставте, любителей порнухи дразнить что бы.
...
Рейтинг: 0 / 0
Задача для версионника
    #32890528
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatНе будем уподобляться Беклемишеву. :)
Билят, везде физтехи?

Сорь за оффтоп
...
Рейтинг: 0 / 0
Задача для версионника
    #32890732
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushokВот тольки зачем html у перлового скрипта иметь - непонятно.Вроде бы мы так и не делаем. Это - хтмл с мод-перловыми вставками, это - скрипт.

Лох ПозорныйБилят, везде физтехи?Только с разной плотностью. :)
...
Рейтинг: 0 / 0
Задача для версионника
    #32893383
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, Леха, еще один мумент. Ваше творение никак не предполагает активного участия юзерей. Может, я что-то и не раскопал, копал не глубоко - сознаюсь. Но совсем не похоже, что есть воще кака-нить транзакция, кады я например, зашел туды. Так, сплошной SELECT. Для меня, как для конечного пользователя - сия база ReadOnly - я там ничего не меняю. Ну а кады кажный юзверь, сволочь така, норовит чо-нить в базе напортить, INSERT с UPDATE всяки шлет - подход может быть совсем другой,
...
Рейтинг: 0 / 0
Задача для версионника
    #32894624
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПишете в отдельную ли таблицу, либо поле таблицы с билетами количество забронированных на оформление билетов. И все. Чтобы узнать, сколько билетов осталось, нетрудно понять, что нужно из Доступного количества отнять Забронированное количество. После того, как билет оформлен, соответственно уменьшаем цифру в Доступном и забронированном количестве. И тоже все. Вообще никаких грязных чтений, блокировок и ничего страшного.
А если задачу усложнить. Допустим решается задача складского учета. Списывается товар со склада. Причем при списании нужно узнать учетную (себестоимость) цену товара расчитываемую по методу ФИФО, ЛИФО или средних. При этом возможны правки "задним" числом.
Опять же используется дополнительная таблица хранящая остатки в учетных ценах для каждой строчки документа. Ну например для Накладной №5 строчка 3 списывается 5 банок огурцов, из них 3 приходили по 10руб, а 2 по 5 руб. В MSSQL тут без блокировок ни как, так как при правке задним число все может поменяться то есть допустим стать 5 банок по 4 рубля.
А как в Oracle? Я так понимаю требуется совершенно другая архитектура.
Вопрос задан сугубо из познавательных целей, в Oracle я полный профан.
...
Рейтинг: 0 / 0
Задача для версионника
    #32894651
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip авторПишете в отдельную ли таблицу, либо поле таблицы с билетами количество забронированных на оформление билетов. И все. Чтобы узнать, сколько билетов осталось, нетрудно понять, что нужно из Доступного количества отнять Забронированное количество. После того, как билет оформлен, соответственно уменьшаем цифру в Доступном и забронированном количестве. И тоже все. Вообще никаких грязных чтений, блокировок и ничего страшного.
А если задачу усложнить. Допустим решается задача складского учета. Списывается товар со склада. Причем при списании нужно узнать учетную (себестоимость) цену товара расчитываемую по методу ФИФО, ЛИФО или средних. При этом возможны правки "задним" числом.
Опять же используется дополнительная таблица хранящая остатки в учетных ценах для каждой строчки документа. Ну например для Накладной №5 строчка 3 списывается 5 банок огурцов, из них 3 приходили по 10руб, а 2 по 5 руб. В MSSQL тут без блокировок ни как, так как при правке задним число все может поменяться то есть допустим стать 5 банок по 4 рубля.
А как в Oracle? Я так понимаю требуется совершенно другая архитектура.
Вопрос задан сугубо из познавательных целей, в Oracle я полный профан.

Какая разница, какая у СУБД архитектура?..

Скорее всего Вам придется озаботиться каскадным пересчетом себестоимостей в документах.

Остатки в учетных ценах - это не предмет для продажи, т.к. учетные цены в Вашей модели могут в любой момент измениться. А вот количественные остатки по партиям товара - это да.

Кстати, Вы их автоматически рассчитывать будете или дадите возможность выбрать партии товара вручную? Цены на них надо иметь разные, но "ценообразование в онлайне" имхо вещь довольно-таки ненужная.

По моему мнению, архитектура такой системы сильно зависит от бизнес-процесса. Если же Вы собираетесь делать тиражируемое решение, то объем работ будет очень большой.
...
Рейтинг: 0 / 0
Задача для версионника
    #32894711
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПо моему мнению, архитектура такой системы сильно зависит от бизнес-процесса. Если же Вы собираетесь делать тиражируемое решение, то объем работ будет очень большой
Ну это я и сам знаю. В данном случае шла речь только о автоматическом формировании партий, а зачем это бизнесу вопрос не стоял. Просто хотелось услышать как решается вопрос поддержания целостности данных при такой постановке задачи в Oracle.
...
Рейтинг: 0 / 0
Задача для версионника
    #32894727
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip авторПо моему мнению, архитектура такой системы сильно зависит от бизнес-процесса. Если же Вы собираетесь делать тиражируемое решение, то объем работ будет очень большой
Ну это я и сам знаю. В данном случае шла речь только о автоматическом формировании партий, а зачем это бизнесу вопрос не стоял. Просто хотелось услышать как решается вопрос поддержания целостности данных при такой постановке задачи в Oracle.

У меня возникло такое впечатление, что Вы решили цену банки сделать составной частью первичного ключа партии товара.

Если я не прав, то о какой целостности идет речь???
...
Рейтинг: 0 / 0
Задача для версионника
    #32894738
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
>А как в Oracle? Я так понимаю требуется совершенно другая архитектура.

получить блокируещее чтение в оракле можно через select ... for update
...
Рейтинг: 0 / 0
Задача для версионника
    #32894863
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторУ меня возникло такое впечатление, что Вы решили цену банки сделать составной частью первичного ключа партии товара
Хм... Это был всего лишь пример. Первичным ключом партии, если это можно так назвать, в данном случае является ID строки документа прихода... Хотя это тоже упрощенный подход.

авторполучить блокируещее чтение в оракле можно через select ... for update
То бишь блокировки в Oracle все же есть и при случае их можно применить?
...
Рейтинг: 0 / 0
Задача для версионника
    #32894871
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushokДа, Леха, еще один мумент. Ваше творение никак не предполагает активного участия юзерей. Может, я что-то и не раскопал, копал не глубоко - сознаюсь. Но совсем не похоже, что есть воще кака-нить транзакция, кады я например, зашел туды. Так, сплошной SELECT. Для меня, как для конечного пользователя - сия база ReadOnly - я там ничего не меняю.Да, у нас транзакций мало-мало. Подавляющая часть запросов - select.

andrushokНу а кады кажный юзверь, сволочь така, норовит чо-нить в базе напортить, INSERT с UPDATE всяки шлет - подход может быть совсем другой,Думаю, да. Но может быть и для этой задачи попробовать, как вам советовали, commit или application server.
...
Рейтинг: 0 / 0
Задача для версионника
    #32894922
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
>То бишь блокировки в Oracle все же есть и при случае их можно применить?

да.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SQL*Plus: Release  9 . 2 . 0 . 4 . 0  - Production on Ot Feb  1   14 : 21 : 52   2005 

Copyright (c)  1982 ,  2002 , Oracle Corporation.  All rights reserved.

Enter password: *******

Connected to:
Oracle9i Enterprise Edition Release  9 . 2 . 0 . 4 . 0  - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release  9 . 2 . 0 . 4 . 0  - Production


Session altered.

SQL>  select txt from test for update nowait ;
 select txt from test for update nowait
                 *
ERROR at line  1 :
ORA- 00054 : resource busy and acquire with NOWAIT specified


SQL>  select txt from test for update wait  5  ;
 select txt from test for update wait  5 
                 *
ERROR at line  1 :
ORA- 30006 : resource busy; acquire with WAIT timeout expired

...
Рейтинг: 0 / 0
Задача для версионника
    #32894983
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятненько. Хотя я думаю, что для моего примера не подойдет. В MSSQL в случае блокировки остальные сессии просто ожидают ее снятия...
...
Рейтинг: 0 / 0
Задача для версионника
    #32895013
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
ну тогда не у казывайте nowait и будет он ждать вечно ... но подождать минуту wait 60 имхо правильней.
...
Рейтинг: 0 / 0
Задача для версионника
    #32895203
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, циску меняли, выпал :))

авторВ MSSQL тут без блокировок ни как, так как при правке задним число все может поменяться то есть допустим стать 5 банок по 4 рубля.
А смысл в блокировке? Чтобы никто не смог прочитать накладную, пока вы ее меняете задним числом? Ну так... Это вообще зависит от архитектуры. И от конкретной ситуации. Если к накладным обращаются ежесекундно, а внесли сейчас неправильно, а нужно чтобы сейчас уже было правильно , тогда наверное стоит ставить блокировку. А если накладная была введена месяц назад например, то какой смысл в блокировке - от кого? Все, кто мог, уже накладную "поиспользовали", и ничего не изменится от того, поправите вы в 16.45 или 16.55 с блокировкой или без - прошло уже очень много времени, чтобы думать о таких мелких вещах, как блокировка :))

-- Tygra's --
...
Рейтинг: 0 / 0
Задача для версионника
    #32895416
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2tygra
Так изменение одной накладной подразумевает каскадное изменение таблицы остатков, при этом другие пользователи также эту таблицу обновляют...
...
Рейтинг: 0 / 0
Задача для версионника
    #32895421
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ:
Вообще задача конечно бессмысленная и на практике трудновыполнимая, потому как конкуренция возрастает не по детски. Но что поделать если бизнес так потребовал, а прошибить их медные лбы не получается?
...
Рейтинг: 0 / 0
Задача для версионника
    #32895457
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip2tygra
Так изменение одной накладной подразумевает каскадное изменение таблицы остатков, при этом другие пользователи также эту таблицу обновляют...

Сколько документов изменять будете, столько раз и текущие остатки пересчитаете. Не вижу никаких логических проблем.

Естественно, обновлять надо с блокировкой записей об остатках - ну так select for update вам должно помогать, нет? Вообще можно это на последовательных транзакциях сделать, если делать все быстро то никто и не заметит.
...
Рейтинг: 0 / 0
Задача для версионника
    #32895506
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Dogen
Все так если закрывать период достаточно часто, а вот если какой-нибудь сумасшедший юзер захочет поменять что-то в начале квартала, то все остальные будут считать ворон...
...
Рейтинг: 0 / 0
Задача для версионника
    #32895563
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ничего если я вмешаюсь?
Обычно я вот так вот (буду в синтаксисе оракла писать) :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE Saldo_ numeric;
BEGIN
   SELECT Saldo INTO Saldo_ FROM ACCOUNT WHERE .... FOR UPDATE;
   Savdo_:=Saldo_ + <Какая-то сумма>
   UPDATE ACCOUT SET Saldo=Saldo_ WHERE ....;
   COMMIT;
END;
/

не делаю, делаю проще:
Код: plaintext
1.
2.
UPDATE ACCOUT SET Saldo=Saldo_ + <какая-то сумма> WHERE ....;
COMMIT;
При этом абсолютно пофиг какой уровень изоляции или режим выполнения транзакций установлены. Все равно, перед внесением изменений запись сначала заблокируется. В сущности я ниже написал то же что и выше, тока короче. Единственное что в Оракле нужно делать явно - так это COMMIT.
Аналогичная ситуация в DB2. (в DB2 и в Oracle транзакции начинаются неявно, но завершаются всегда явно, - типа промышленные субд все-таки).
А вот в MSSQL, Sybase, если явно не сказал BEGIN TRAN, то и COMMIT делать не обязательно, потому как всякая операция там - атомарна. Поэтому можно просто бахнуть:
Код: plaintext
1.
UPDATE ACCOUT SET Saldo=Saldo_ + @<какая-то переменная> WHERE ....
В любом случае перед такой операцией нужная запись будет блакирована, обновлена, и разблокирована. И никаких катаклизмов не случится. И никаких потерянных изменений. И ничего повторно считывать не надо. И абсолютно пофиг какой уровень изоляции.

Несколько хуже обстоят дела у Оракла с курсорами. Я так полагаю держать долго открытый курсор там не рекомендуется. Вообще-то я еще не пробил этот вопрос. Если кто знает, то может скажет, нарвусь ли я на ORA-01555 в том случае если в одной сессии просто открою курсор выберу 1 запись (коммит не делаю), а затем открываю другую сессию, делаю кучу изменений, а затем начну фетчить открытым курсором в первой сессии? На вскидку скажу что для блокировочника обсолютно пофиг как долго будет держаться курсор открытым.
...
Рейтинг: 0 / 0
Задача для версионника
    #32895577
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanЭто ничего если я вмешаюсь?
Обычно я вот так вот (буду в синтаксисе оракла писать) :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE Saldo_ numeric;
BEGIN
   SELECT Saldo INTO Saldo_ FROM ACCOUNT WHERE .... FOR UPDATE;
   Savdo_:=Saldo_ + <Какая-то сумма>
   UPDATE ACCOUT SET Saldo=Saldo_ WHERE ....;
   COMMIT;
END;
/

не делаю, делаю проще:
Код: plaintext
1.
2.
UPDATE ACCOUT SET Saldo=Saldo_ + <какая-то сумма> WHERE ....;
COMMIT;
При этом абсолютно пофиг какой уровень изоляции или режим выполнения транзакций установлены. Все равно, перед внесением изменений запись сначала заблокируется. В сущности я ниже написал то же что и выше, тока короче. Единственное что в Оракле нужно делать явно - так это COMMIT.
Аналогичная ситуация в DB2. (в DB2 и в Oracle транзакции начинаются неявно, но завершаются всегда явно, - типа промышленные субд все-таки).
А вот в MSSQL, Sybase, если явно не сказал BEGIN TRAN, то и COMMIT делать не обязательно, потому как всякая операция там - атомарна. Поэтому можно просто бахнуть:
Код: plaintext
1.
UPDATE ACCOUT SET Saldo=Saldo_ + @<какая-то переменная> WHERE ....
В любом случае перед такой операцией нужная запись будет блакирована, обновлена, и разблокирована. И никаких катаклизмов не случится. И никаких потерянных изменений. И ничего повторно считывать не надо. И абсолютно пофиг какой уровень изоляции.

Я охреневаю и умолкаю Живите в своем мире DIRTY READ.
...
Рейтинг: 0 / 0
Задача для версионника
    #32895834
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Леха
Commit конечно транзакцию закрывает, это правда. А вот сессию (connection) зачем тады держать, если программа просто считать начинает. Лучше отпустить, пусть другие попользуются. Одно дело, кады все _расчеты_ в БД делаются, совсем другое - когда на стороне...
...
Рейтинг: 0 / 0
23 сообщений из 123, страница 5 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Задача для версионника
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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