Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
авторНо в отличие от версионника, блокировочник может построить очередь из таких незавершенных запросов (транзакций) и, спрогнозировав сколько билетов осталось в кассе (несмотря на то, что еще не все транзакции закоммичены) сказать - можете не занимать очередь, вам все равно не хватит. ^^^ это как :) что-же есть такое в блокировочнике чего не может select for update и оракловые пользовательские блокировки ? похоже я что-то грандиозное пропустил :) к стате а db2/mssql могут указывать сколько ждать на запросе, у оралового можно указать в секундах сколько ждать типа select ... for update wait 30 (точно синтаксис не помню) ? ЗЫ. МПС работает на SAP + oracle и как-то умудряется зарплату расчитать :) http://ru.sun.com/win/sales/transport/mps.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2004, 22:58 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Бред. Хоть задачка и не для меня, скажу, что она из разряда: "Хачу, пнимаешь, на Луну, только чтоб на Жигулях, бензин был в качестве топлива, и без водителя". Такого не бывает. Либо на Жигулях, либо без водителя, либо на бензине, но не одновременно, всему есть предел. А то, что параметры в процедуру передаются через таблицу - это вообще отдельный разговор, который не связан с блокировками и транзакциями. И тем более с тем, как сохранять целостность в системе. Если Вы не можете решить одну проблему нормальным путем, не создавая себе при этом других, то это не значит, что нет таких решений, при которых не возникает других проблем. А про ситуацию с резервированием могу добавить: Если возникает необходимость сделать монопольный доступ к зарезервированым местам, то это необходимо сделать ("Хочешь быть счастливым - будь им"(с) Козьма Прутков). Только он организован не на системе блокировок в СУБД, а на более высоком уровне. Т.е. запись о резервировании принадлежит пользователю (сессии - не очень хорошо). Отвалился - никто твой резерв не возьмет. Включился - будь добр определи судьбу твоих резервов, либо сними (если клиент свалил), либо утверди (если клиент дождался), и только потом продолжай работу в штатном режиме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2004, 23:07 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
gardenmanСитуация из жизни, с которой я сталкиваюсь ежедневно на работе: представляете (сразу говорю, автор не я!!!!) у нас параметры в ХП передаются через запись в постоянной таблице!!! gardenmanСитуация из жизни (у меня на работе, делал не я ). Не хочу никого обидеть, но бывает ситуация, когда делал ты? Почитаешь тебя - вообще ничего сделать нельзя ни на чем. Чем тогда люди занимаются? Если у тебя возникает множество вопросов, то лучше спрашивать их отдельными топиками. И не объявлять заранее, что у тебя уже есть самое правильное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 09:34 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Я даже и не знаю теперь, отвечать или нет? Оказалось, что я (да и все) тут продвигают MS SQL - хотя даже уже кричали, что в самомо начале топика предложено универсальное решение для любой БД, причем единственно правильное. авторРассмотрим подробнее ситуацию с резервированием. Сия ситуация означает, что транзакций в системе будет несколько. Одна с резервированием, другая - собственно с продажей. Точно. Только они короткие очень - 1. зарезервировать билеты 2. сделать продажу. Все, никаких ваших висячих транзакций. автор Следовательно записи на резервирование нужно как-то идентифицировать. Варианты: по имени пользователя, по номеру сессии, по коду терминала. Да как хотите - все зависит от того, как будут работать с системой автор1)По имени пользователя: если это так, то с двух терминалов под одним и тем же именем не зайти - конфликт параметров ХП (смотрите ситуацию, описанную абзацем) См. Предыдущий комментарий. Если входить можно только с одного места - то можно и так. автор2)По номеру сессии: в случае глюка/отсоединения терминала мы теряем номер сессии, придется каким-то образом оперативно чистить зарезервированные билеты.(у Оракла ведь есть триггер на закрытие соединения? в любом случае у MS такого точно нет). Несколько раз приводился готовый код для таких вещей. авторА как тогда быть с внесенными вами данными по 599 паспортам? Это как быть с внесенными вами 599 паспортами - у меня то нет одной большой открытой транзакции, я все эти 599 билетов с паспортами внес и продал . А вы все это потеряли автор*я читаю внимательно все что вы пишете, и ищу контраргументы*. Плохо ищите - совсем не то. автор3)По коду терминала: та же самая ситуация что и по номеру сессии. И те же самые комментарии. авторЗнаете, ну как-то влом писать сборщик мусора, который в тоже время должен отрабатывать достаточно оперативно. Намного более дешевое (с точки зрения I/O) и простое решение - просто откатить транзакцию. Ну раз в лом - об чем разговор. В лом и систему писать - нафиг надо? :) Вы уж тогда проще сделайте - при старте клиентского приложения открывайте одну транзакцию, здооооровенную, а при закрытии - коммит. А если вруг сбой - ну ничего, день потеряете, зато не в лом авторЗадачка специально для tygra, как для любителя MSSQL: Не вижу ничего такого в "задачке", что бы ее относило к MS SQL авторПредположим, у нас имеется некий набор договоров. Над определенной группой договоров мы должны провести некую группу однотипных операций, например - банальное расторжение. Задача - Оператор в гриде на своем рабочем месте помечает эти договора (например заносит их id во временную таблицу) а затем передает этот список в ХП, которая все их закрывает. Затем дополняет список этих договоров еще некоторым количеством договоров (отбирая их по какому-нибудь критерию), а затем - передает их другой ХП, которая их переоформляет на новых условиях. Затем чистит пометки и повторяет операцию снова. Как это будет выглядеть на MSSQL? Понятное дело что временная таблица должна быть создана не в какой либо ХП, а самим приложением. И это должна быть не таблица с ##, потому как в этом случае она будет доступна всем сесииям. Ну кто как хочет - кто через #t, кто по одному документу. авторА тепрь еще наложим условие, что приложение у нас написано,исходников нет, и код мы можем только на сервере. Так вы определитесь - или задачку решать или менять ничего нельзя. Или по-русски объясните, что значит и код мы можем только на сервере ? А кстати, что вас так смутило в этой так сказать "задачке"? Не смогли решить для MS SQL? ======== Итог: вы все-равно никого не слушаете и продолжаете применять длинные ненужные транзакции. Приводите какие-то странные примеры - толи в подтверждение своего решения (типа, вон еще хуже бывает), толи еще почему - не знаю. У вас есть какие-то проблемы? С Ораклом? С MS SQL? Так вы скажите прямо - расскажем, чего знаем. Чего странными "задачками" прикрываться? ЗЫ Ничего не понимаю................ -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 12:35 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
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? После первого селекта запись уже заблокирована, и ни в одной нормальной системе 2ая касирша не сможет обновить заблокированную запись, что не понятного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 15:39 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
gardenman Задача: 1) Продажа проходит одной транзакцией 2) Продажа (транзакция) растянута во времени (до получаса) 3) продавать билеты на один и тот же рейс могут одновременно из нескольких окошек. Ну это явно надуманная постановка задачи. Задача - продавать билеты, а не программировать транзакции. Представим всего один московский вокзал. 45 суток * 500 мест * 100 поездов = 2,25 млн мест, в день в среднем бронируется/продается 50000. 50000 / 24 часа работы касс / скажем, 3 минуты на операцию = 100 одновременно открытых транзакций. А теперь - смертельный номер - умножим это на количество вокзалов (или станций РЖД?! я туплю). Капец. Что-то слабо верится что какое-либо железо способно с этим справиться. Транзакции надо открывать на момент записи, только чтобы обеспечить отсутствие двойной продажи (ну и двойного резервирования тоже). ЗЫ. Я не продаю железнодорожные билеты. Я так, прикалываюсь. 3 минуты - из практики стояния в очереди за билетами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 17:37 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Транзакции нужно открывать тогда, когда нужно и держать столько, сколько нужно по требованиям бизнеслогики. (С) Том Кайт (правда немного не точно, т.к. нет под руками первоисточника) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 17:40 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Уважаемый Садовник, Извините за нескромный вопрос, Вы где работаете - или хотя бы кем? Оч. похоже, что основное Ваше занятие - разведение кактусов, а с SQL Вы решили поразмяться, шоб мозги на затухли. Достойное решение! Я извиняюсь за сей _грубый_ (не спорю) вопрос, точнее комментарий, так как он ответа не предпологает. Причина тому такова, что в 99% случаев либо нам деньгу плотять, за то что мы рожаем что-то, либо мы сами деньгу получить за свой труд надеемси. Ну 1% - так хобби, развлекалочка. Вот сей _проект_ развлекалочка и есть. Рожать надоть _работающие_ программы (плохо ли, хорошо ли - вопрос другой, хотя лучше, шоб хорошо...) _Неработающие рожать не надо, какие бы они красивые не были... Лирическое отступление Самая безошибочная программа - это та, что выдает "Hello, World". Она же и самая бестолковая, никому не нужна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 20:43 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
gardenmanТранзакции нужно открывать тогда, когда нужно и держать столько, сколько нужно по требованиям бизнеслогики. (С) Том Кайт (правда немного не точно, т.к. нет под руками первоисточника) Хорошо бы привести критерии оптимальности решения, которыми автор процитированного руководствовался. Каюсь, не читал. Я соглашусь что Ваши идеи полностью соответствуют описанию бизнес-логики, приводимой Вами в описании "задания". Другое дело, что я пытаюсь довести до Вашего сведения, что imho описанная логика порочна и попросту неработоспособна в реальных условиях эксплуатации системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 09:50 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
А ему пофиг, что его решение неработоспособно. Потому-что это его решение. А если какие-то ослы будут тут советовать, да еще пальцами тыкать - дык что на них отвлекаться, у гениев на это нет времени :(=) ЗЫ Если он все так пишет, то непозавидуешь заказчикам. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 11:57 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
В результате таких пейсателей я неделю назад попал в презабавнейшую ситуацию, начали мне оформлять билет, когда закончили - сказало что мест уже нет( А по топику - в Oracle было предложено 2(два) работающих варианта "The CBO without stats is like a morning without coffee." T.Kyte ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:32 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
gardenmanДорогой Tygra! Смысл того, что здесь написано совсем другой. И я имел в виду совсем не то, о чем ты подумал. Я хочу сказать что существует класс задач, для которых Оракл не катит . Вот как ты думаешь, почему кластерные реализации от Оракла и от IBM такие разные? Ведь совсем не потому, что Оракл круче и совсем не потому, что IBM не могут как Оракл. А потому, что в силу своих архитектурных особенностей JОракл по-другому просто не может ) Несомненно, детей рожать оракл не катит. ЗЫ: катится всё, но с разной скоростью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:35 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Дорогой Hell, в моём случае такой вариант невозможен... Ты всегда у меня будешь с билетамами по самым льготным ценам и на самые разные направления...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 10:55 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
2gardenman а что за кластерная технология есть у db2 ? чем эта "технология" принципиально отличается от dblink в оракле ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 12:09 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
про это уже много писалось в форуме с "сравнениях". Отличия принципиальные - у Оракла разделяемый диск (система хранения) у ДБ2 - просто ставится рядом еще одна машина,потом еще иеще.. и так до тысячи узлов. Короче ищите в сравнениях. Если реально нужно про кластера поспрашивать, то в форум по ДБ2. Некоторые юзают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 12:19 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
про различия shared nothing и ораклового shared disk архитектур я в курсе, я окуратно пытаюсь выяснить, чем оракловый dblink не аналог shared nothing "кластера" ? мне показалось вы сможете в 2х словах объяснить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 12:42 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Честно говоря до изучения dblink в Оракле я еще не дошел Если проводить аналогии то, как мне кажется: DB2 - fedefated server Oracle - dblink Sybase - proxy table Все это примерно одно и то же. Только в каждой системе разные навороты и несколько разные возможности. Везде можно написать запрос который будет использовать несколько источников данных (из разных баз данных) с разной степенью тормознутости (2-х фазный коммит в случае транзакции по нескольким таблицам из нескольких баз, который делается прозрачно). Но в случае кластера DB2 - это все одна база данных и ничего общего с двухфазными транзакциями. Это параллельная обработка одного запроса сразу несколькими компами, причем каждый работает со своей порцией данных (выделенной по хэш-функции). Т.е. это полноценное масштабирование и никакого pinging как в случае с Oracle RAC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 13:13 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
авторДорогой Hell, в моём случае такой вариант невозможен... Ты всегда у меня будешь с билетамами по самым льготным ценам и на самые разные направления...) Возможен вариант для любого сервера. ЗЫ А билет Hell никогда не оформит - затра..ется ждать окончания всех транзакций -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 15:31 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Ище одна мысль. А Вы уверенны, що у тети кассирщи Оракловый клиент будет? А я вот - нет, будет у нее ка-нить HTML форма. Тонкий клиент называется, между прочим. Послал запрос - получил новую форму. Ну и иде Ваши транзакции? CGI на сервере поднялси, в базу слазил, ответ сгенерил, усе транзакции и закрылись. Ну пусть даже и стоит Оракловый клиент у тетки. И склольки мы бум сессию открытую держать? Никакой мощи не хватит. Хватит, конечно, я щучю. Тольки все равно это очень _не_рациональное_ решение. Я даже на уровне одного загуска CGI освобождаю сессию, если все транзакции завершились. Может, это спорно, конечно - но держать сессию пол-часа ничего не делая - чересчур. Ездовых собак я видел, но ездовые коты - это чересчур. Трое из Простоквашино (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 17:57 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
>Я даже на уровне одного загуска CGI освобождаю сессию, если все транзакции завершились вот это точно не самое рациональное решение. Хотя для мелких систем с небольшой нагрузкой вполне прокатит в зависимости от длительности транзакции и количества транзакций в секунду :)) интересно было бы узнать о соотношении накладных расходов по старту сессии к собстенно работе с базой в такой системе. Вдруг окажется что половину ресурсов сервер тратит только на то, чтобы соединить/разъединить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 18:28 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
gardenman>Я даже на уровне одного загуска CGI освобождаю сессию, если все транзакции завершились вот это точно не самое рациональное решение. Хотя для мелких систем с небольшой нагрузкой вполне прокатит в зависимости от длительности транзакции и количества транзакций в секунду :)) интересно было бы узнать о соотношении накладных расходов по старту сессии к собстенно работе с базой в такой системе. Вдруг окажется что половину ресурсов сервер тратит только на то, чтобы соединить/разъединить? Много веб-серверов поставить - денег много не надо. А если это про SQL-сервер, то тут конечно вопрос, но все же думается что не так много и стоит новый коннект по сравнению с кучей висящих транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 18:35 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
2gardenman у вас совсем древнии представления о веб-программировании :) даже php на mysql не открывает/закрывает конекции, а использует что-то типа пула конекций. также и cgi обычно через пул пишут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 18:50 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Yo! пишет: > у вас совсем древнии представления о веб-программировании :) даже php на > mysql не открывает/закрывает конекции, а использует что-то типа пула > конекций. также и cgi обычно через пул пишут. У уважаемого Yo! видимо представления о веб-программировании намного более опережают сегодняшний век, так как постоянные соединения у mysql (видимо именно это подразумевалось под умным словом "конекции") предназначены для экономии ресурсов сервера, а никак не для удержания текущей транзакции. А для всех cgi в рамках одной сессии держать открытой транзакцию на весь период длительности сессии? В чем смысл? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 19:12 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
drmike У уважаемого Yo! видимо представления о веб-программировании намного более опережают сегодняшний век, так как постоянные соединения у mysql (видимо именно это подразумевалось под умным словом "конекции") предназначены для экономии ресурсов сервера, а никак не для удержания текущей транзакции. А для всех cgi в рамках одной сессии держать открытой транзакцию на весь период длительности сессии? В чем смысл? Posted via ActualForum NNTP Server 1.1 1. среднее время жизни программера у которого транзакции ждут юзерского инпута редко превышает 1 год , а юзеры народ злой, но справедливый. поэтому смысла объяснять почему не вижу т.к. кто не понимает, ему не долго осталось. 2. высказывание gardenman "Вдруг окажется что половину ресурсов сервер тратит только на то, чтобы соединить/разъединить " однозначно относится к конекции (connection), но никак не к транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 21:15 |
|
||
|
Задача для версионника
|
|||
|---|---|---|---|
|
#18+
Угу, разговор пошел в новое русло, пока еще без драки (что радует). Итак, имея некий опыт веб-прграммрования эдак 5-6 лет, и при этом еще оставаясь живым, имею наглость утверждать, что 1) Накладные расходы на connection не велики, про крайне мере для Oracle и MsSQL. 2) Проблема, которую создает долго висящая transaction, дороже. Верятность схватить блокировку и все повесить дороже выйдет. Извиняюсь за англицкие словечки - шоб понятнее было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 06:00 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32882237&tid=1546074]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 475ms |

| 0 / 0 |
