powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Алгоритм резервирования для нескольких складов
25 сообщений из 132, страница 3 из 6
Алгоритм резервирования для нескольких складов
    #39380519
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svcoders_ustinovПри детальном анализе у меня получилось, что единственный вариант с правильной логикой работы и без тормозов - асинхронный вызов пересчета резервов. Но как сделать это в 1С - не понятно.
Если вам во время одной транзакции необходимо запустить другую транзакцию можно использовать механизм фоновых заданий. Если необходимо запустить процесс после выполнения транзакции - добавить регистр сведений и регламентное задание.
Регламентные задания наверно не подойдут - надо запускать одновременно много экземпляров, а, как я понимаю, с регламентными заданиями так нельзя.
Фоновые задания возможно подходят, в том числе о них думал, но проверить не успел. Вот только меня смутило в описании фоновых заданий, что если их больше 1000 было, то лог чистится. А как вообще 1С будет себя вести, если одновременно запущенно несколько тысяч фоновых заданий (тысячи экземпляров процедуры)?
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380532
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с_bob, а зачем 2 разные wms? Или Вы склады арендуете вместе с wms?

ps Сейчас как раз занимаюсь wms на базе axelot. Планирую на всех складах ее запустить.

ну...если вас устраивает акселот, вашим работодателям остается только посочувствовать ))))
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380537
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinov_bob, ну я никогда не утверждал, что крут именно как программист 1С
В 1С у меня средний уровень.

_bob4. РЗ "пересчитыватель" которое по таймеру берет из регистров задания , пересчитывает резервы и записывает в регистр "выполненные_пересчитывателем_задания" ИД выполненных заданий, чтоб их второй раз не выполнять


А можно уточнить, как именно вы это сделали?

Я думал использовать:
Код: sql
1.
ПодключитьОбработчикОжидания("ПересчитатьРезервы", 1, Ложь)


Но мне сказали, что это не будет работать так, как нужно.
Нужно, чтобы каждую секунду запускался новый экземпляр процедуры пересчета резервов независимо ни от чего. Например в 11:40:10 запустился один экземпляр процедуры "ПересчитатьРезервы", в 11:40:11, не дожидаясь завершения предыдущего запуска, запустился еще один экземпляр процедуры "ПересчитатьРезервы", в 11:40:12 запустился третий экземпляр (при этом всё еще работает запущенный в 11:40:10, а например запущенный в 11:40:11 уже завершил работу) и т.д.
Мне сказали, что так в 1С не будет параллельно выполняться несколько экземпляров процедуры "ПересчитатьРезервы".

Или мне сказали неточные сведения, и ПодключитьОбработчикОжидания будет работать так, как надо для этой задачи?

Регламентные задания - это общие объекты конфигурации. Они являются частью механизма заданий и позволяют автоматически выполнять процедуры на встроенном языке по расписанию. ( http://v8.1c.ru/overview/Term_000000154.htm)
Т.е. по расписанию, в отдельном потоке, независимо ни от чего выполняется написанный код. Если специально не изголяться, будет выполняться несколько параллельно выполняющихся РЗ. Но лучше (во избежание блокировок) выполнять их строго последовательно. Я напоминаю: в моем примере 1 экземпляр РЗ пересчитывает не один резерв, а все имеющиеся на данный момент задачи по очереди.

коллега! я в прошлом посте намекал, теперь говорю прямо: вам рано спорить здесь, прочитайте учебник ДО КОНЦА
и это при том, что я не только НЕ крут как прогер 1С, я написал от силы пару-тройку тысяч строк, я с 2006 года работаю ИТ-директором, однако УЧИТЬ МАТЧАСТЬ НЕОБХОДИМО, КУРСАНТ!!!

Модератор: _bob, то, что Вы ИТ-директор, не дает Вам права переходить на личности. Вы получаете предупреждение. Прошу быть сдержаннее. Оппонентов - тоже.
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380539
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovНо мне сказали, что это не будет работать так, как нужно...
Или мне сказали неточные сведения...

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

вам смешно? многим нет
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380587
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobПрограммист 1с_bob, а зачем 2 разные wms? Или Вы склады арендуете вместе с wms?

ps Сейчас как раз занимаюсь wms на базе axelot. Планирую на всех складах ее запустить.

ну...если вас устраивает акселот, вашим работодателям остается только посочувствовать ))))Все так плохо?

ps Предыдущие 3 системы wms (не 1с) уже провалились...
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380600
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с_bobпропущено...


ну...если вас устраивает акселот, вашим работодателям остается только посочувствовать ))))Все так плохо?

ps Предыдущие 3 системы wms (не 1с) уже провалились...

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


я бы посоветовал посмотреть WMS Arena
сразу скажу, что я не совсем объективен, я эту систему доводил до ума и до коробочного состояния
у арены гигантский плюс: система изначально написана и дорабатывается компанией TDM Electric, причем компания сама на этой системе работает. соответственно, все неудобности и шероховатости устраняются не потому что так надо клиентам, а потому что так надо им самим ))) ну и все вкусности, придуманные за 9 лет существования TDM, вошли в эту систему...ну и не пропадет никуда ни сама система, ни экспертиза ее доработок и эксплуатации

изначально содрана наполовину с Exceed, наполовину с манхэттена, написана на 1С, правила, шаблоны и т.д. настраиваются в текстовых окнах без программистов и конфигураторов. на удивление нетребовательна: склад в 50 000 ячеек, 20 000 артикулов, 20 терминалов, 3 оператора фунциклировал на "сервере" в один четырехъядерник с 32 гигами ОЗУ

крупнейшее внедрение: склады сети ОллГуд
компания АвтоАльянс, та вообще внедрила у себя эту систему самостоятельно...все люди были брошены на ОллГуд, альянсу сказали что сейчас заниматься ими некому, максимум по телефону подсказать, так они сами справились

еще из плюсов: можно обучать и стажировать своих складских прям на складе TDM, там народ опытный уже 9 лет на ней работает

если интересно или будут вопросы, свяжитесь со мной, я вас с ведущим внедренцем познакомлю, он вам все покажет, расскажет и скидку предложит )))
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380604
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с_bob, а зачем 2 разные wms? Или Вы склады арендуете вместе с wms?

этому есть анекдотическое объяснение: какой-то злодей подсунул собственнику бизнеса книжку "1С Управление Торговлей в вопросах и ответах"

мужик прочитал первые страниц 50, остальное додумал сам, книга очень понравилась, чел забил на торговлю и весь погрузился в ИТ, поперло внедрение "типового функционала", причем типовой функционал или не типовой определялось по оглавлению: если в оглавлении было что-то похожее, значит типовой

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

вот тут-то и пригодился асинхронный обмен со сквозным резервированием по всем складам
там вообще много безумных решений было, у шефа с фантазией и рабоспособностью очень круто было )))
здорово прокачал скилл "автоматизация бешеных идей и их внедрение без вреда для работоспособности системы" )))
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380769
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobЕсли специально не изголяться, будет выполняться несколько параллельно выполняющихся РЗ. Но лучше (во избежание блокировок) выполнять их строго последовательно. Я напоминаю: в моем примере 1 экземпляр РЗ пересчитывает не один резерв, а все имеющиеся на данный момент задачи по очереди.

Скорость. Последовательное выполнение задач по очереди означает, что последнее в списке задание будет выполнено после выполнения всех предыдущих. Иногда это слишком долго.

_bobколлега! я в прошлом посте намекал, теперь говорю прямо: вам рано спорить здесь, прочитайте учебник ДО КОНЦА

Коллега, в настоящее время я читаю учебники по другим технологиям, и свободного времени на 1С нет. Да и не планирую в ближайшее время плотно работать с 1С.

Что же касается споров, то спорил я только об одной вещи - о возможности использовать РИБ для любых задач (и соответствующим образом масштабировать систему). Но, насколько я вижу, все согласны, что конкретно для задачи резервирования использование РИБ противопоказано. Впрочем, апологеты " 1000 баз в РИБ" могут рассказать своё видение - я с удовольствием послушаю.
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380775
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobтам вообще много безумных решений было, у шефа с фантазией и рабоспособностью очень круто было )))
здорово прокачал скилл "автоматизация бешеных идей и их внедрение без вреда для работоспособности системы" )))

сейчас вспомнил самую бешеную реализованную идею: внедрение WMS поэтапно: сначала внедрили прием и размещение, вторым этапом подбор, третьим контроль и консолидацию, ну и напоследок отгрузку

длилось это "внедрение" полгода параллельно с переводом офиса с самописки на 1С_УТ и компания не только нормально функционировала, но и показатели улучшались (манагеры видели все более и более правильные остатки)

ну и чтоб жизнь медом не казалась, задолженность клиентов сначала контролировалась в старой самописке (туда транслировались отгрузки), потом наоборот, из самописки в УТ транслировались оплаты, потом полностью перешли на УТ (в Москве) и начали переводить первый филиал с самописки на УТ )))))
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380788
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovСкорость. Последовательное выполнение задач по очереди означает, что последнее в списке задание будет выполнено после выполнения всех предыдущих. Иногда это слишком долго.

для задачи резервирования уровень изоляции должен быть Read uncommitted, что фактически предопределяет ПОСЛЕДОВАТЕЛЬНОЕ выполнение транзакций в СУБД, независимо от того, как вы их выполняете на сервере приложений и от применяемой СУБД


s_ustinovЧто же касается споров, то спорил я только об одной вещи - о возможности использовать РИБ для любых задач (и соответствующим образом масштабировать систему). Но, насколько я вижу, все согласны, что конкретно для задачи резервирования использование РИБ противопоказано. Впрочем, апологеты " 1000 баз в РИБ" могут рассказать своё видение - я с удовольствием послушаю.

я убежденный противник РИБ, тем не менее, асинхронное дергание веб-сервисов решает эту проблему, только надо сделать резервирование двухфазным: запрос и собсно само резервирование и сделать брокер, который будет получать задание от одной базы и раскидывать его по всем остальным (тоже асинхронно), получать ответы и рапортовать базе, отправившей задание о выполнении
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380818
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobs_ustinovСкорость. Последовательное выполнение задач по очереди означает, что последнее в списке задание будет выполнено после выполнения всех предыдущих. Иногда это слишком долго.

для задачи резервирования уровень изоляции должен быть Read uncommitted, что фактически предопределяет ПОСЛЕДОВАТЕЛЬНОЕ выполнение транзакций в СУБД, независимо от того, как вы их выполняете на сервере приложений и от применяемой СУБД

Последовательное для каждого товара . Если нам надо создать резервы для 10 разных товаров, можно создать 10 очередей с последовательно выполняющимися транзакциями.

Разумеется, есть вариант, когда мы резервируем не строки заказов, а заказы в целом (документы). И, например, при невозможности зарезервировать одну из строк заказа "откатываем" резервирование всего заказа. В таком варианте действительно - только одна очередь будет нормально работать. Но такая схема будет сильно тормозить и непонятно, как обрабатывать ошибки (например не нашли товар при пересортице или недостаче). Я видел однажды такую схему работы, но работало всё плохо, и эту схему планировали поменять.

А что касается уровня изоляции... По моему мнению, в ERP системах всегда надо использовать только Serializable. В том числе и для резервирования.

_bobs_ustinovЧто же касается споров, то спорил я только об одной вещи - о возможности использовать РИБ для любых задач (и соответствующим образом масштабировать систему). Но, насколько я вижу, все согласны, что конкретно для задачи резервирования использование РИБ противопоказано. Впрочем, апологеты " 1000 баз в РИБ" могут рассказать своё видение - я с удовольствием послушаю.

я убежденный противник РИБ, тем не менее, асинхронное дергание веб-сервисов решает эту проблему, только надо сделать резервирование двухфазным: запрос и собсно само резервирование и сделать брокер, который будет получать задание от одной базы и раскидывать его по всем остальным (тоже асинхронно), получать ответы и рапортовать базе, отправившей задание о выполнении
Можно, разумеется, и так сделать. Но скорость будет явно не реал тайм. И логика работы резервирования существенно усложняется. Особенно если надо автоматически обрабатывать обнаруженные отклонения в количестве (излишки / недостачи).
По моему мнению, это всё из серии "создать себе трудности и потом их героически преодолевать".

Подобную схему имеет смысл использовать для взаимодействия поставщик - покупатель при автоматическом подтверждении заказов покупки. И интегрировать с EDI. А для резервирования получается слишком сложно и медленно.
Модератор: s_ustinov, Вы тоже получаете предупреждение за переход на личности.
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380830
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobя убежденный противник РИБ, тем не менее, асинхронное дергание веб-сервисов решает эту проблему, только надо сделать резервирование двухфазным: запрос и собсно само резервирование
Вы описываете стандартную схему двухфазной фиксации транзакций в распределенной базе:

В приложении управление распределенной транзакцией во многом похоже на управление локальной. В конце транзакции приложение запрашивает ее фиксацию или откат. Распределенной фиксацией диспетчер транзакций должен управлять иначе, чтобы свести к минимуму риск сбоя сети, в результате которого одни диспетчеры ресурсов могут фиксировать транзакцию, тогда как другие будут выполнять ее откат. Выход из положения заключается в двухфазном процессе фиксации (фаза подготовки и фаза фиксации), который называется двухфазной фиксацией (2PC).

Фаза подготовки

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

Фаза фиксации

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


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

В учетных задачах очень мало ситуаций, когда распределенные базы имеет смысл применять (когда они приносят больше выгод, чем проблем). И уж точно не стоит их применять для масштабирования. Любая современная СУБД с легкостью выдержит тот поток данных, который генерируется даже в самой большой компании - надо просто правильно написать код системы.
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380835
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinov
А что касается уровня изоляции... По моему мнению, в ERP системах всегда надо использовать только Serializable. В том числе и для резервирования.


дада, крупнейший аптечный дистрибьютор США именно так и поступил, когда с самописки на САП перешел (Serializable, как сказали консультанты)
в результате одни и те же остатки ререзвировались сразу под три заказа

через год контора обанкротилась

тут длинная статья об этом есть, прям в этом форуме про ЕРП


еще очень хорошо билеты так продавать. главное - выгодно
один билет трем разным людям
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380836
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovЛюбая современная СУБД с легкостью выдержит тот поток данных, который генерируется даже в самой большой компании - надо просто правильно написать код системы.

ну не любая, мой любимый "стебелек" ляжет )))
но топовые выдержат легко

я изначально сказал, что противник РИБ
сделал 4 проекта перевода с РИБ на работу в единой базе
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380848
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobs_ustinovА что касается уровня изоляции... По моему мнению, в ERP системах всегда надо использовать только Serializable. В том числе и для резервирования.


дада, крупнейший аптечный дистрибьютор США именно так и поступил, когда с самописки на САП перешел (Serializable, как сказали консультанты)
в результате одни и те же остатки ререзвировались сразу под три заказа

через год контора обанкротилась

тут длинная статья об этом есть, прям в этом форуме про ЕРП


еще очень хорошо билеты так продавать. главное - выгодно
один билет трем разным людям
А какая связь между кривой реализацией алгоритма и уровнем изоляции транзакций? Резервы под три заказа - это именно косяки в реализации алгоритма на уровне системы. Serializable просто позволяет меньше думать о "низкоуровневых" нарушениях в данных, но СУБД не способна помешать криворукому программисту записать в неё неверные данные.

Вы что, всерьез полагаете, что если бы использовался Read uncommitted, то ошибок было бы меньше?
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380854
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobну не любая, мой любимый "стебелек" ляжет )))
но топовые выдержат легко

А мне одно время SQLite нравился... И как я про него забыл - он ведь тоже "ляжет"...
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380876
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinov
Вы что, всерьез полагаете, что если бы использовался Read uncommitted, то ошибок было бы меньше?

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

последний раз читал в книге писателя по фамилии Сеппа, еще есть такой популярный в прошлом писатель, а ныне вице-през Оракла, г-н Кайт, тот тоже такой пример приводил
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380887
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobs_ustinovВы что, всерьез полагаете, что если бы использовался Read uncommitted, то ошибок было бы меньше?

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

последний раз читал в книге писателя по фамилии Сеппа, еще есть такой популярный в прошлом писатель, а ныне вице-през Оракла, г-н Кайт, тот тоже такой пример приводил
???
То есть описывается, что при Read uncommitted не возникает ошибки с продажей одного билета двум пассажирам, а при Serializable - возникает такая ошибка? Вы точно ничего не путаете? Может наоборот?
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380896
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinov_bobпропущено...


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

последний раз читал в книге писателя по фамилии Сеппа, еще есть такой популярный в прошлом писатель, а ныне вице-през Оракла, г-н Кайт, тот тоже такой пример приводил
???
То есть описывается, что при Read uncommitted не возникает ошибки с продажей одного билета двум пассажирам, а при Serializable - возникает такая ошибка? Вы точно ничего не путаете? Может наоборот?

нет, не путаю
Serializable - это максимальный уровень изоляции транзакций, транзакции полностью изолируются друг от друга, каждая выполняется так, как будто параллельных транзакций не существует
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380897
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот Read Uncommited - наоборот

Типичный способ реализации данного уровня изоляции — блокировка данных на время выполнения команды изменения, что гарантирует, что команды изменения одних и тех же строк, запущенные параллельно, фактически выполнятся последовательно, и ни одно из изменений не потеряется.

Если несколько параллельных транзакций пытаются изменять одну и ту же строку таблицы, то в окончательном варианте строка будет иметь значение, определенное всем набором успешно выполненных транзакций.
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380902
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bob,

По-моему, Вы что-то напутали.

https://msdn.microsoft.com/ru-ru/library/ms173763.aspx READ UNCOMMITTED
Указывает, что инструкции могут считывать строки, которые были изменены другими транзакциями, но еще не были зафиксированы.

Транзакции, работающие на уровне READ UNCOMMITTED, не используют совмещаемые блокировки, чтобы предотвратить изменение считываемых текущей транзакцией данных другими транзакциями. Транзакции READ UNCOMMITTED также не блокируются монопольными блокировками, которые не позволили бы текущей транзакции считывать измененные другими транзакциями, но не зафиксированные строки. Установка этого параметра позволяет считывать незафиксированные изменения, которые называются чтением«грязных» данных. Значения в данных могут быть изменены и до окончания транзакции строки могут появляться и исчезать в наборе данных. Этот параметр действует так же, как и настройка NOLOCK всех таблиц во всех инструкциях SELECT в транзакции. Это наименьшее ограничение уровней изоляции.

В SQL Server конфликты блокировок при защите транзакций от чтения «грязных» данных незафиксированных изменений данных можно сократить с помощью следующего:

•уровня изоляции READ COMMITTED с параметром базы данных READ_COMMITTED_SNAPSHOT, находящимся в состоянии ON;


•Уровень изоляции моментального снимка (SNAPSHOT).


...

SERIALIZABLE
Указывает следующее.

•Инструкции не могут считывать данные, которые были изменены другими транзакциями, но еще не были зафиксированы.

•Другие транзакции не могут изменять данные, считываемые текущей транзакцией, до ее завершения.

•Другие транзакции не могут вставлять новые строки со значениями ключа, которые входят в диапазон ключей, считываемых инструкциями текущей транзакции, до ее завершения.
Блокировка диапазона устанавливается в диапазоне значений ключа, соответствующих условиям поиска любой инструкции, выполненной во время транзакции. Обновление и вставка строк, удовлетворяющих инструкциям текущей транзакции, блокируется для других транзакций. Это гарантирует, что если какая-либо инструкция транзакции выполняется повторно, она будет считывать тот же самый набор строк. Блокировки диапазона сохраняются до завершения транзакции. Это самый строгий уровень изоляции, поскольку он блокирует целые диапазоны ключей и сохраняет блокировку до завершения транзакции. Из-за низкого параллелизма этот параметр рекомендуется использовать только при необходимости. Этот параметр действует так же, как и настройка HOLDLOCK всех таблиц во всех инструкциях SELECT в транзакции.

Таким образом, продать три раза билет на одно и то же место можно как раз при уровне изоляции READ UNCOMMITTED, если все три транзакции "квазиодновременно" определили в транзакции, что место еще не продано, а затем продали его также "квазиодновременно".

Уровень SERIALIZABLE не позволит прочитать статус места, пока с ним работает другая транзакция. Однако, это вызовет дополнительные "тормоза".
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380903
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobs_ustinovТо есть описывается, что при Read uncommitted не возникает ошибки с продажей одного билета двум пассажирам, а при Serializable - возникает такая ошибка? Вы точно ничего не путаете? Может наоборот?

нет, не путаю
Serializable - это максимальный уровень изоляции транзакций, транзакции полностью изолируются друг от друга, каждая выполняется так, как будто параллельных транзакций не существует

а вот Read Uncommited - наоборот

Типичный способ реализации данного уровня изоляции — блокировка данных на время выполнения команды изменения, что гарантирует, что команды изменения одних и тех же строк, запущенные параллельно, фактически выполнятся последовательно, и ни одно из изменений не потеряется.

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


Единственное, что можно сказать:
_bobпрочитайте учебник ДО КОНЦА
...
УЧИТЬ МАТЧАСТЬ НЕОБХОДИМО, КУРСАНТ!!!

Вы неправильно понимаете разницу между уровнями изоляции транзакций, и, вероятно, не совсем верно понимаете, что такое транзакция. Еще раз почитайте про ACID, вам это будет полезно.
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380912
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaryaПардон, продать три раза одно и то же место может получиться и при том, и при этом уровне изоляции - зависит от логики работы транзакции.

ну наконец-то Garya понял что я имею в виду
и наверняка понял, почему я настаиваю на последовательном пересчете )))
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380924
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_bobGaryaПардон, продать три раза одно и то же место может получиться и при том, и при этом уровне изоляции - зависит от логики работы транзакции.

ну наконец-то Garya понял что я имею в виду
и наверняка понял, почему я настаиваю на последовательном пересчете )))Решил удалить свой пост и написать более детально, извините, коллеги. Кто-то успел увидеть краткое резюме без объяснения.

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

Если эта ошибка корректно обрабатывается на клиенте, тогда клиент попытается повторно считать статус и модифицировать его. Если она не обрабатывается, либо обрабатывается некорректно, либо проверка статуса места и модификация производятся в разных транзакциях, могут возникнуть проблемы. Однако, в общем случае SERIALIZEBLE как раз лучше защищает от подобных ситуаций, нежели READ UNCOMMITED. Однако, SERIALIZEBLE может вызвать вал взаимных блокировок и страшные тормоза.

Так что, с моей точки зрения s_ustinov всё же более прав, нежели _bob, который не нашел в себе силы признать 20084955 , что перепутал эти уровни изоляции, хотя и начал в своем ответе корректировать свою позицию.

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

Модератор: Если попытки взаимных наездов не прекратятся, мне придется данный тред прикрыть, а нарушителей забанить.
...
Рейтинг: 0 / 0
Алгоритм резервирования для нескольких складов
    #39380947
Фотография _bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garya
Если эта ошибка корректно обрабатывается на клиенте, тогда клиент попытается повторно считать статус и модифицировать его. Если она не обрабатывается, либо обрабатывается некорректно, либо проверка статуса места и модификация производятся в разных транзакциях, могут возникнуть проблемы. Однако, в общем случае SERIALIZEBLE как раз лучше защищает от подобных ситуаций, нежели READ UNCOMMITED. Однако, SERIALIZEBLE может вызвать вал взаимных блокировок и страшные тормоза.

Так что, с моей точки зрения s_ustinov всё же более прав, нежели _bob, который не нашел в себе силы признать 20084955 , что перепутал эти уровни изоляции, хотя и начал в своем ответе корректировать свою позицию.


разумеется, я названия перепутал
однако сути это не меняет, мы ж не о блокировках спорили, а о некорректности параллельного резервирования

моя позиция: параллельные процессы приведут к плачевным результатам, какой уровень изоляции не ставь
...
Рейтинг: 0 / 0
25 сообщений из 132, страница 3 из 6
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Алгоритм резервирования для нескольких складов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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