|
|
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий Боюсь, моих телепатических способностей недостаточно для беседы с Вами. Вернемся к этой теме когда научитесь мычать более членораздельно. С пожеланиями скорейшего выздоровления, Андрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 11:26 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Funny_FalconНа версионнике биллинг получается лучше (я и не спорю), но без блокировок по-любому не обойтись (моё мнение). Я так до сих пор и не смог осознать связи "версионник значит без блокировок" :( Ну откуда оно растет, кто-нибудь знает?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 11:28 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous А говорите понятно :) Тут все просто. Запрос должен вернуть согласованный набор данный на некоторый момент времени. Для "блокировочников" это момент окончания запроса, для "версионников" - момент начала. Просто ввиду особенностей технологии. Я выше приводил конкрентый пример, и мне хотелось бы разобраться в механизме работы oracle для этого примера и разных уровней изоляции. Может я, читая сыылку, пропустил фразу о том что это набор должен быть согласован на конкреный момент времени и СУБД это гарантирует. Не могли бы Вы процитировать, если несложно. Ихмо сам факт наличия рестарта противоречит либо согласованности набора на конкретный момент времени, либо логической целостности этого набора с точки зрения изоляции. Можно вопрос поставить по другому. На каких уровнях изоляции будет рестарт в ситуации описанной в моем примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 11:37 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
2andrey_anonymous andrey_anonymousЯ так до сих пор и не смог осознать связи "версионник значит без блокировок" :( Ну откуда оно растет, кто-нибудь знает?! мир, дружба, жевачка?!! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 11:40 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous onstat-Если брать к примеру oracle Простите, но тут Вы пытаетесь навязать свойства какой-то очень неудачной реализации серверу БД. Какой курсор "не готов"? Почему он "не готов"? Рассказываю: При открытии курсора select for update oracle не вернет управление из open до тех пор пока для всех записей курсора в слоты транзакций в соответствующих блоках не будет проставлен SCN. Для того что бы проставить SCN предидущая транзакция изменяющая эту запись должна быть уже закомичена или откатана. andrey_anonymous Если Вам интересны конкретные технические решения, которые могли бы работать в Вашей задаче - могу проконсультировать, но это уже оффтоп поэтому предпочтительно все-таки в личной переписке. Могу даже спроектировать и сделать пилот, но уже за деньги :) Это гипотетическая задача разрешения конкурентного доступа к данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 11:51 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
onstat-Я выше приводил конкрентый пример, и мне хотелось бы разобраться в механизме работы oracle для этого примера и разных уровней изоляции. Вы про этот пример? В oracle: в зависимости от уровня изолированности и характера изменений, произведенных t1 t2 может либо взять закоммиченные, либо рестартовать, либо выбросить "Can\'t serialize access". UNDO взять не может. onstat-Может я, читая сыылку, пропустил фразу о том что это набор должен быть согласован на конкреный момент времени и СУБД это гарантирует. Ищите по словосочетанию "Read Consistency" и обрящете. onstat-Ихмо сам факт наличия рестарта противоречит либо согласованности набора на конкретный момент времени, либо логической целостности этого набора с точки зрения изоляции. Почему? В read commited рестарт для приложения выглядит как будто этот dml-statement начал выполняться позже. Т.е. переносится точка начала выполнения. В serializable рестарта не будет - будет exception. В readonly dml запрещен. onstat- Можно вопрос поставить по другому. На каких уровнях изоляции будет рестарт в ситуации описанной в моем примере? Read Commited, при наличии конфликта по изменяемым данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 11:54 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
onstat- andrey_anonymous onstat-Если брать к примеру oracleКакой курсор "не готов"? Почему он "не готов"? Рассказываю: При открытии курсора select for update Простите, а зачем пытаться заблокировать сразу все да еще и надолго в условиях высокой конкуренции? Кстати, раз случай гипотетический, давайте для примера Вы расскажете как эту задачу решить на "блокировочнике" - чтобы понятнее было, что конкретно сравниваем. Я попробую предложить аналогичный функционал на oracle. Похожие задачи решать приходилось, но не до конца ясен предложенный дизайн и суть затруднений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 12:01 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Yo.!!вы это у юзеров спросите, вы то может и не наблюдаете проблем, их юзера наблюдают. выстривать все транзакции в очередь и разгребать их одним джобом это "функционал сервера, позволяющий решать проблему" :) Все ответы Yo.!! сводятся к 2 простым вещам: 1. Фигня, везде есть выделенка 2. Блокировочник это такая страшная штука с деадлоками, от которой все страдают. Сам я не пробовал, но читал рекламный проспект Ларри, где все это подробно описано (с картинками). Ну ну ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 12:47 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
ASCRUS 2. Блокировочник это такая страшная штука с деадлоками, от которой все страдают. Сам я не пробовал, но читал рекламный проспект Ларри, где все это подробно описано (с картинками). зачем же Ларри, про ужасы блокировок могу с MSDN, могу с ibm.com к стате интересно было бы почитать чем мотивирует Sybase введением MVCC ;) ASCRUS, так что реальной задачи вы так и не смогли придумать ? поставте наместо злобных ораклойдов, дайте задачу которую на MVCC нельзя решить прямо. Ораклойды вам такую задачу дали, вы не справились, может стоит достойно ответить, а не лить тонны булшита на обстрактные темы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:05 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous Ищите по словосочетанию "Read Consistency" и обрящете. onstat- Ихмо сам факт наличия рестарта противоречит либо согласованности набора на конкретный момент времени, либо логической целостности этого набора с точки зрения изоляции. Почему? В read commited рестарт для приложения выглядит как будто этот dml-statement начал выполняться позже. Т.е. переносится точка начала выполнения. В serializable рестарта не будет - будет exception. В readonly dml запрещен. [/quot] Исходя из таблицы консистентный набор по времени для транзакции можно получить только в Serializable. Код: 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. 28. 29. 30. 31. 32. 33. Есть сомнения в правдивости таблицы для выденный параметров если 2 конкурентные транзакции находятся в Serializable Я не могу поянть механизма, чем это достигается. Если смотреть в комплексе, то достоинств по сравнению с блокировочниками, совсем не много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:12 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Yo.!! ASCRUS, так что реальной задачи вы так и не смогли придумать ? поставте наместо злобных ораклойдов, дайте задачу которую на MVCC нельзя решить прямо. Ораклойды вам такую задачу дали, вы не справились, может стоит достойно ответить, а не лить тонны булшита на обстрактные темы ? Если уж на такой примитивной человек признаётся, что на Оракл не может выполнить поставленных условий - то чего уж говорить про серьёзные :) Это примерно как будущее предсказывать - на пару дней вперёд не могу, а вот лет на 100 - пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:14 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
SergSuper Если уж на такой примитивной человек признаётся, что на Оракл не может выполнить поставленных условий - то чего уж говорить про серьёзные :) вот можно эту задачу сформулировать в терминах бизнес логики, а то в таком виде я не пойму чо куда а главное зачем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:23 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Yo.!! ASCRUS 2. Блокировочник это такая страшная штука с деадлоками, от которой все страдают. Сам я не пробовал, но читал рекламный проспект Ларри, где все это подробно описано (с картинками). зачем же Ларри, про ужасы блокировок могу с MSDN, могу с ibm.com к стате интересно было бы почитать чем мотивирует Sybase введением MVCC ;) ASCRUS, так что реальной задачи вы так и не смогли придумать ? поставте наместо злобных ораклойдов, дайте задачу которую на MVCC нельзя решить прямо. Ораклойды вам такую задачу дали, вы не справились, может стоит достойно ответить, а не лить тонны булшита на обстрактные темы ? Гм, если фантомы это абстрактные темы, а реальные задачи только на отчеты ориентированы, то я умолкаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:24 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous onstat- andrey_anonymous onstat-Если брать к примеру oracleКакой курсор "не готов"? Почему он "не готов"? Рассказываю: При открытии курсора select for update Простите, а зачем пытаться заблокировать сразу все да еще и надолго в условиях высокой конкуренции? Кстати, раз случай гипотетический, давайте для примера Вы расскажете как эту задачу решить на "блокировочнике" - чтобы понятнее было, что конкретно сравниваем. Я попробую предложить аналогичный функционал на oracle. Похожие задачи решать приходилось, но не до конца ясен предложенный дизайн и суть затруднений. Систематезируем условия абстрактной задачи. Есть наборы товаров с количеством в таблице, они уже закомичены. Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар встречается в 90% наборов. Такая постановка Вас устроит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:32 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
onstat- andrey_anonymous Ищите по словосочетанию "Read Consistency" и обрящете. Исходя из таблицы консистентный набор по времени для транзакции можно получить только в Serializable. Для транзакции - да, только в serializable или readonly. Не думаю, что это специфично для oracle. Транзакция подразумевает некий набор операций. Read commited в oracle предполагает согласованность данных на уровне statement. onstat- Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. конкурентные транзакции находятся в Serializable Я не могу поянть механизма, чем это достигается.Oracle concepts - документ достаточно толстый, но Вам нужна только глава "Data Concurrency and Consistency", там написано. Сомнения напрасны. onstat-Если смотреть в комплексе, то достоинств по сравнению с блокировочниками, совсем не много. Вот чего-чего, а комплексного рассмотрения я что-то в этом топике не видел :) Одни говорят про соответствие стандартам, другие - про блокировки, третьи - про версионность... Применимость тех или иных СУБД для решения тех или иных задач (не придуманных задачек с искусственными ограничениями, а именно задач) не рассматривается :) Лично мне кажется, что любую задачу в конце концов можно решить на большинстве существующих СУБД. Вопрос надо ставить о стоимости оборудования, доступности персонала требуемой квалификации, сроках разработки и бюджете проекта. Могу, конечно, и ошибаться - вдруг на блокировочниках чего-то в принципе сделать нельзя или по стандарту не положено :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:42 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
onstat- Систематезируем условия абстрактной задачи. Есть наборы товаров с количеством в таблице, они уже закомичены. Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар встречается в 90% наборов. Такая постановка Вас устроит? в лобовую, select for update на кассах, и система будет вести себя так же ка и блокировочник. за исключением того, что другие пользователи, смотрящие текущие остатки и делающие отчеты будут видеть согласованный набор данных, и не будут блокироваться этими писателями. (хотя для бизнес логики, когда кассы сами снимают остатки напрямую не очень красиво (к задаче это не имеет никакого отношения)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:45 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
onstat-Систематезируем условия абстрактной задачи. Есть наборы товаров с количеством в таблице, они уже закомичены. Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар встречается в 90% наборов. Такая постановка Вас устроит? Я их всех проведу за одну транзакцию (выборка наборов с агрегацией по товарам и merge в остатки - можно даже одним statement заколбасить :), в чем проблема-то? По масштабам супермаркета писюку работы секунд на несколько в сутки :) При этом ничто не будет мешать в процессе регистрировать новые наборы. Супермаркет - такая штука, где перерасход невозможен (покупатель с физически существующим товаром покидает магазин), что очень сильно облегчает задачу ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:51 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
DimaRв лобовую, select for update на кассах, и система будет вести себя так же ка и блокировочник. То есть мы выбрали набор данных через select for update по некоему условию и мне будет гарантироваться, что другие сессии не смогут вставить новые записи по этому условию, пока я не отпущу транзакцию ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 13:58 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
ASCRUSТо есть мы выбрали набор данных через select for update по некоему условию и мне будет гарантироваться, что другие сессии не смогут вставить новые записи по этому условию, пока я не отпущу транзакцию ? При чем тут вставить? Я может неправильно понял условие. Как я понял, узкое место при update в таблице остатков по товарам??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 14:03 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
DimaR ASCRUSТо есть мы выбрали набор данных через select for update по некоему условию и мне будет гарантироваться, что другие сессии не смогут вставить новые записи по этому условию, пока я не отпущу транзакцию ? При чем тут вставить? Я может неправильно понял условие. Как я понял, узкое место при update в таблице остатков по товарам??? Ну остатки по идее то считать по товарам надо как бы с других таблиц. Значит до апдейта остатка нужно еще и гарантировать, что в этот момент никто не приведет эти таблицы к состоянию, где их данные не будут соответствовать записанному значению остатка, то есть в том числе и не вставятся новые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 14:08 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
DimaR onstat- Систематезируем условия абстрактной задачи. Есть наборы товаров с количеством в таблице, они уже закомичены. Нужно проводить по остаткам и по кассе эти наборы за одну транзакцию каждый, в паралельных сессиях, при том, что один одни товар встречается в 90% наборов. Такая постановка Вас устроит? в лобовую, select for update на кассах, и система будет вести себя так же ка и блокировочник. Нет не будет, читайте мое сообщение выше про установку SCN в слотах транзакций и поведении open в курсоре на update. Это плата за консистенность "на начало", которую мы обсуждали. Зато они класно формируют репорты. Блокировочники не пытаются создать консистентный набор на начало и отадют первый fetch, при возможности добраться к первой же записи из набора, при этом остальных может еще не быть даже в кеше буферов а обработка записей набора уже идет, и поиск остальных а также контроль уже установленных другими сессиями блокировок может производится в фоновом режиме. То есть если какаято конкрентаня запись сейчас заблокирована, на следующий фетч она не пойдет а пойдет свободная, а через 5 фетчей ее уже закомитят. Это поведение может элементарно убить order by, но это уже детали реализации приложения и использования возможностей СУБД. Всязи с отсутствием ограничения по консистентности на начало, с которым я лично мирюсь, у разработчиков блокировочников выше возможности по оптимизации обработки. з.ы. Простите работать надо. Я еще вернусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 14:15 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
ASCRUS Ну остатки по идее то считать по товарам надо как бы с других таблиц. Значит до апдейта остатка нужно еще и гарантировать, что в этот момент никто не приведет эти таблицы к состоянию, где их данные не будут соответствовать записанному значению остатка Вот поэтому-то и твердят все кому не лень, что хранимые (актуальные) остатки - зло. Если хранить остатки, скажем, месячной давности, то такая гарантия создается административно - запретом работать задним числом (и подкрепляется соответствующими триггерами). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 14:17 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov ASCRUS Ну остатки по идее то считать по товарам надо как бы с других таблиц. Значит до апдейта остатка нужно еще и гарантировать, что в этот момент никто не приведет эти таблицы к состоянию, где их данные не будут соответствовать записанному значению остатка Вот поэтому-то и твердят все кому не лень, что хранимые (актуальные) остатки - зло. Если хранить остатки, скажем, месячной давности, то такая гарантия создается административно - запретом работать задним числом (и подкрепляется соответствующими триггерами). Posted via ActualForum NNTP Server 1.3 Ну вот, отошли от субд и пришли к административным ограничениям. Не коструктивно как то получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 14:24 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
softwarer ChAСудя по комментарию, Вы не совсем поняли смысл той дискуссии. Почему-то я уверен, что если я попрошу Вас логически строго обосновать свое утверждение, мы придем к выводу, что Вы брякнули абы что.Вы, простите, о чем ? Мое комментарий относился только к утверждению Yo.!!, когда он в качестве доказательства оного обратился явно не ту дискуссию. Или Вы там обнаружили доказательство его правоты ? Тогда, будьте любезны, ткните носом... softwarerТо есть, если я правильно понял, Вы не производили экспериментов, не задавали вопросов и другими способами не выясняли, какой же все-таки результат запроса вернет Вам сервер.Совершенно верно, если внимательно посмотреть на ранее упомянутую дискуссию, то Merle, в принципе, уже провел весьма убедительный эксперимент, хотя мое предположение касалось более сложной ситуации, причем оно было не первым. Мне его аргументы показались достаточно убедительными, чтобы перепроверять их. softwarerТогда вопрос: каким образом Вы добиваетесь того, что приложение ведет себя предсказуемым образом? Пихаете в каждый нетривиальный запрос хинт holdlock? Используете только простые запросы? Что-то другое? Оставляете на самотек, "авось не случится", наконец?По разному, в некоторых случаях вместо хинта Holdlock проще сразу поставить уровень изоляции RR, иногда фиксируется план запроса таким образом, чтобы повторного чтения "опасных" мест не происходило, иногда же, действительно, можно пренебречь, так как подобная несогласованность либо элиминируется на последующих шагах, либо не важна, что в моей практике не редкость, так как она не касается ни ядерных реакторов, ни космических аппаратов. softwarerНельзя ли ссылку?Запросто. Одна из них уже приводилась. Можно здесь глянуть. * Аналогичность способа подразумевается как использование версионности, при котором не происходит чтения измененных данных, а не точное копия механизма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 14:34 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВот поэтому-то и твердят все кому не лень, что хранимые (актуальные) остатки - зло. Если хранить остатки, скажем, месячной давности, то такая гарантия создается административно - запретом работать задним числом (и подкрепляется соответствующими триггерами). Posted via ActualForum NNTP Server 1.3 А где я сказал про хранение актуальных остатков ? У меня по жизни фиксированные хранятся, а актуальные получаются как сумма последних зафиксированных остатков плюс все по таблицам движения (без разницы чего). Но однако проблемы это не снимает - кто сказал, что на момент фиксации остатков даже на месяц назад в этот момент у меня никто в БД не будет добавлять записи месячной давности ? Да запросто - начиная от самих пользователей и заканчивая вливом данных репликацией или импортом с другой системы. И на момент фиксации этих остатков с одной стороны все пользователи должны продолжать счастливо работать, с другой стороны остатки должны быть зафиксированны правильными, то есть не нарушена согласованная целостность данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 14:37 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=34018684&tid=1553078]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 138ms |

| 0 / 0 |
