|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
svcoders_ustinovПри детальном анализе у меня получилось, что единственный вариант с правильной логикой работы и без тормозов - асинхронный вызов пересчета резервов. Но как сделать это в 1С - не понятно. Если вам во время одной транзакции необходимо запустить другую транзакцию можно использовать механизм фоновых заданий. Если необходимо запустить процесс после выполнения транзакции - добавить регистр сведений и регламентное задание. Регламентные задания наверно не подойдут - надо запускать одновременно много экземпляров, а, как я понимаю, с регламентными заданиями так нельзя. Фоновые задания возможно подходят, в том числе о них думал, но проверить не успел. Вот только меня смутило в описании фоновых заданий, что если их больше 1000 было, то лог чистится. А как вообще 1С будет себя вести, если одновременно запущенно несколько тысяч фоновых заданий (тысячи экземпляров процедуры)? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2017, 15:47 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
Программист 1с_bob, а зачем 2 разные wms? Или Вы склады арендуете вместе с wms? ps Сейчас как раз занимаюсь wms на базе axelot. Планирую на всех складах ее запустить. ну...если вас устраивает акселот, вашим работодателям остается только посочувствовать )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2017, 16:23 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
s_ustinov_bob, ну я никогда не утверждал, что крут именно как программист 1С В 1С у меня средний уровень. _bob4. РЗ "пересчитыватель" которое по таймеру берет из регистров задания , пересчитывает резервы и записывает в регистр "выполненные_пересчитывателем_задания" ИД выполненных заданий, чтоб их второй раз не выполнять А можно уточнить, как именно вы это сделали? Я думал использовать: Код: sql 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, то, что Вы ИТ-директор, не дает Вам права переходить на личности. Вы получаете предупреждение. Прошу быть сдержаннее. Оппонентов - тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2017, 16:31 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
s_ustinovНо мне сказали, что это не будет работать так, как нужно... Или мне сказали неточные сведения... мне м.с.горбачев по телевизору сказал, что к 2000 году каждая советская семья получит отдельную квартиру вам смешно? многим нет ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2017, 16:35 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobПрограммист 1с_bob, а зачем 2 разные wms? Или Вы склады арендуете вместе с wms? ps Сейчас как раз занимаюсь wms на базе axelot. Планирую на всех складах ее запустить. ну...если вас устраивает акселот, вашим работодателям остается только посочувствовать ))))Все так плохо? ps Предыдущие 3 системы wms (не 1с) уже провалились... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2017, 21:58 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
Программист 1с_bobпропущено... ну...если вас устраивает акселот, вашим работодателям остается только посочувствовать ))))Все так плохо? ps Предыдущие 3 системы wms (не 1с) уже провалились... Акселотовскую ВМСку я внедрял в 2009 году в Альбе (обувь, опт и розница)...ну внедрили и внедрили, работало нормально ))) там главное подробно прописать весь необходимый функционал, а то у акселотов всегда оказывается, что если надо добавить небольшую фичу, например инвентаризацию, то для этого якобы полсистемы надо переворошить и данные перезаливать, потому что потому. и инструментария админского там нету от слова совсем....типа откатить кривую транзакцию только вручную тыком по регистрам...пришлось самим обработки писать. Доработки стоят очень дорого, внутри ОЧЕНЬ накручено, сами толком не разобрались, решили не рисковать, благо меня познакомили с уволенным экс-разрабом, он все дорабатывал, а то допилы обошлись бы нам дороже основного внедрения. Каждая версия акселота совершенно не похожа на предыдущую архитектурно, то ли каждый раз убеждаются в неудачности, то ли разработчики у них разбегаются и каждый раз другие. я бы посоветовал посмотреть WMS Arena сразу скажу, что я не совсем объективен, я эту систему доводил до ума и до коробочного состояния у арены гигантский плюс: система изначально написана и дорабатывается компанией TDM Electric, причем компания сама на этой системе работает. соответственно, все неудобности и шероховатости устраняются не потому что так надо клиентам, а потому что так надо им самим ))) ну и все вкусности, придуманные за 9 лет существования TDM, вошли в эту систему...ну и не пропадет никуда ни сама система, ни экспертиза ее доработок и эксплуатации изначально содрана наполовину с Exceed, наполовину с манхэттена, написана на 1С, правила, шаблоны и т.д. настраиваются в текстовых окнах без программистов и конфигураторов. на удивление нетребовательна: склад в 50 000 ячеек, 20 000 артикулов, 20 терминалов, 3 оператора фунциклировал на "сервере" в один четырехъядерник с 32 гигами ОЗУ крупнейшее внедрение: склады сети ОллГуд компания АвтоАльянс, та вообще внедрила у себя эту систему самостоятельно...все люди были брошены на ОллГуд, альянсу сказали что сейчас заниматься ими некому, максимум по телефону подсказать, так они сами справились еще из плюсов: можно обучать и стажировать своих складских прям на складе TDM, там народ опытный уже 9 лет на ней работает если интересно или будут вопросы, свяжитесь со мной, я вас с ведущим внедренцем познакомлю, он вам все покажет, расскажет и скидку предложит ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2017, 23:52 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
Программист 1с_bob, а зачем 2 разные wms? Или Вы склады арендуете вместе с wms? этому есть анекдотическое объяснение: какой-то злодей подсунул собственнику бизнеса книжку "1С Управление Торговлей в вопросах и ответах" мужик прочитал первые страниц 50, остальное додумал сам, книга очень понравилась, чел забил на торговлю и весь погрузился в ИТ, поперло внедрение "типового функционала", причем типовой функционал или не типовой определялось по оглавлению: если в оглавлении было что-то похожее, значит типовой на центральном московском складе было заваленное внедрение питерской какой-то странной ВМСки, которую надо было реанимировать, а на филиальные склады решили что ставить ее дорого и сначала сделали прям на УТ ячеистый склад, а потом, чтоб не мучиться, поставили арену из моего предыдущего поста вот тут-то и пригодился асинхронный обмен со сквозным резервированием по всем складам там вообще много безумных решений было, у шефа с фантазией и рабоспособностью очень круто было ))) здорово прокачал скилл "автоматизация бешеных идей и их внедрение без вреда для работоспособности системы" ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 00:31 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobЕсли специально не изголяться, будет выполняться несколько параллельно выполняющихся РЗ. Но лучше (во избежание блокировок) выполнять их строго последовательно. Я напоминаю: в моем примере 1 экземпляр РЗ пересчитывает не один резерв, а все имеющиеся на данный момент задачи по очереди. Скорость. Последовательное выполнение задач по очереди означает, что последнее в списке задание будет выполнено после выполнения всех предыдущих. Иногда это слишком долго. _bobколлега! я в прошлом посте намекал, теперь говорю прямо: вам рано спорить здесь, прочитайте учебник ДО КОНЦА Коллега, в настоящее время я читаю учебники по другим технологиям, и свободного времени на 1С нет. Да и не планирую в ближайшее время плотно работать с 1С. Что же касается споров, то спорил я только об одной вещи - о возможности использовать РИБ для любых задач (и соответствующим образом масштабировать систему). Но, насколько я вижу, все согласны, что конкретно для задачи резервирования использование РИБ противопоказано. Впрочем, апологеты " 1000 баз в РИБ" могут рассказать своё видение - я с удовольствием послушаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 11:57 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobтам вообще много безумных решений было, у шефа с фантазией и рабоспособностью очень круто было ))) здорово прокачал скилл "автоматизация бешеных идей и их внедрение без вреда для работоспособности системы" ))) сейчас вспомнил самую бешеную реализованную идею: внедрение WMS поэтапно: сначала внедрили прием и размещение, вторым этапом подбор, третьим контроль и консолидацию, ну и напоследок отгрузку длилось это "внедрение" полгода параллельно с переводом офиса с самописки на 1С_УТ и компания не только нормально функционировала, но и показатели улучшались (манагеры видели все более и более правильные остатки) ну и чтоб жизнь медом не казалась, задолженность клиентов сначала контролировалась в старой самописке (туда транслировались отгрузки), потом наоборот, из самописки в УТ транслировались оплаты, потом полностью перешли на УТ (в Москве) и начали переводить первый филиал с самописки на УТ ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 12:01 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
s_ustinovСкорость. Последовательное выполнение задач по очереди означает, что последнее в списке задание будет выполнено после выполнения всех предыдущих. Иногда это слишком долго. для задачи резервирования уровень изоляции должен быть Read uncommitted, что фактически предопределяет ПОСЛЕДОВАТЕЛЬНОЕ выполнение транзакций в СУБД, независимо от того, как вы их выполняете на сервере приложений и от применяемой СУБД s_ustinovЧто же касается споров, то спорил я только об одной вещи - о возможности использовать РИБ для любых задач (и соответствующим образом масштабировать систему). Но, насколько я вижу, все согласны, что конкретно для задачи резервирования использование РИБ противопоказано. Впрочем, апологеты " 1000 баз в РИБ" могут рассказать своё видение - я с удовольствием послушаю. я убежденный противник РИБ, тем не менее, асинхронное дергание веб-сервисов решает эту проблему, только надо сделать резервирование двухфазным: запрос и собсно само резервирование и сделать брокер, который будет получать задание от одной базы и раскидывать его по всем остальным (тоже асинхронно), получать ответы и рапортовать базе, отправившей задание о выполнении ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 12:17 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobs_ustinovСкорость. Последовательное выполнение задач по очереди означает, что последнее в списке задание будет выполнено после выполнения всех предыдущих. Иногда это слишком долго. для задачи резервирования уровень изоляции должен быть Read uncommitted, что фактически предопределяет ПОСЛЕДОВАТЕЛЬНОЕ выполнение транзакций в СУБД, независимо от того, как вы их выполняете на сервере приложений и от применяемой СУБД Последовательное для каждого товара . Если нам надо создать резервы для 10 разных товаров, можно создать 10 очередей с последовательно выполняющимися транзакциями. Разумеется, есть вариант, когда мы резервируем не строки заказов, а заказы в целом (документы). И, например, при невозможности зарезервировать одну из строк заказа "откатываем" резервирование всего заказа. В таком варианте действительно - только одна очередь будет нормально работать. Но такая схема будет сильно тормозить и непонятно, как обрабатывать ошибки (например не нашли товар при пересортице или недостаче). Я видел однажды такую схему работы, но работало всё плохо, и эту схему планировали поменять. А что касается уровня изоляции... По моему мнению, в ERP системах всегда надо использовать только Serializable. В том числе и для резервирования. _bobs_ustinovЧто же касается споров, то спорил я только об одной вещи - о возможности использовать РИБ для любых задач (и соответствующим образом масштабировать систему). Но, насколько я вижу, все согласны, что конкретно для задачи резервирования использование РИБ противопоказано. Впрочем, апологеты " 1000 баз в РИБ" могут рассказать своё видение - я с удовольствием послушаю. я убежденный противник РИБ, тем не менее, асинхронное дергание веб-сервисов решает эту проблему, только надо сделать резервирование двухфазным: запрос и собсно само резервирование и сделать брокер, который будет получать задание от одной базы и раскидывать его по всем остальным (тоже асинхронно), получать ответы и рапортовать базе, отправившей задание о выполнении Можно, разумеется, и так сделать. Но скорость будет явно не реал тайм. И логика работы резервирования существенно усложняется. Особенно если надо автоматически обрабатывать обнаруженные отклонения в количестве (излишки / недостачи). По моему мнению, это всё из серии "создать себе трудности и потом их героически преодолевать". Подобную схему имеет смысл использовать для взаимодействия поставщик - покупатель при автоматическом подтверждении заказов покупки. И интегрировать с EDI. А для резервирования получается слишком сложно и медленно. Модератор: s_ustinov, Вы тоже получаете предупреждение за переход на личности. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 12:55 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
s_ustinov А что касается уровня изоляции... По моему мнению, в ERP системах всегда надо использовать только Serializable. В том числе и для резервирования. дада, крупнейший аптечный дистрибьютор США именно так и поступил, когда с самописки на САП перешел (Serializable, как сказали консультанты) в результате одни и те же остатки ререзвировались сразу под три заказа через год контора обанкротилась тут длинная статья об этом есть, прям в этом форуме про ЕРП еще очень хорошо билеты так продавать. главное - выгодно один билет трем разным людям ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 13:35 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
s_ustinovЛюбая современная СУБД с легкостью выдержит тот поток данных, который генерируется даже в самой большой компании - надо просто правильно написать код системы. ну не любая, мой любимый "стебелек" ляжет ))) но топовые выдержат легко я изначально сказал, что противник РИБ сделал 4 проекта перевода с РИБ на работу в единой базе ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 13:38 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobs_ustinovА что касается уровня изоляции... По моему мнению, в ERP системах всегда надо использовать только Serializable. В том числе и для резервирования. дада, крупнейший аптечный дистрибьютор США именно так и поступил, когда с самописки на САП перешел (Serializable, как сказали консультанты) в результате одни и те же остатки ререзвировались сразу под три заказа через год контора обанкротилась тут длинная статья об этом есть, прям в этом форуме про ЕРП еще очень хорошо билеты так продавать. главное - выгодно один билет трем разным людям А какая связь между кривой реализацией алгоритма и уровнем изоляции транзакций? Резервы под три заказа - это именно косяки в реализации алгоритма на уровне системы. Serializable просто позволяет меньше думать о "низкоуровневых" нарушениях в данных, но СУБД не способна помешать криворукому программисту записать в неё неверные данные. Вы что, всерьез полагаете, что если бы использовался Read uncommitted, то ошибок было бы меньше? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 14:08 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobну не любая, мой любимый "стебелек" ляжет ))) но топовые выдержат легко А мне одно время SQLite нравился... И как я про него забыл - он ведь тоже "ляжет"... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 14:14 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
s_ustinov Вы что, всерьез полагаете, что если бы использовался Read uncommitted, то ошибок было бы меньше? я не думаю, я это знаю совершенно точно пример про одновременную продажу одного билета двум пассажирам является хрестоматийным описанием максимального уровня изоляции транзакций последний раз читал в книге писателя по фамилии Сеппа, еще есть такой популярный в прошлом писатель, а ныне вице-през Оракла, г-н Кайт, тот тоже такой пример приводил ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 14:37 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobs_ustinovВы что, всерьез полагаете, что если бы использовался Read uncommitted, то ошибок было бы меньше? я не думаю, я это знаю совершенно точно пример про одновременную продажу одного билета двум пассажирам является хрестоматийным описанием максимального уровня изоляции транзакций последний раз читал в книге писателя по фамилии Сеппа, еще есть такой популярный в прошлом писатель, а ныне вице-през Оракла, г-н Кайт, тот тоже такой пример приводил ??? То есть описывается, что при Read uncommitted не возникает ошибки с продажей одного билета двум пассажирам, а при Serializable - возникает такая ошибка? Вы точно ничего не путаете? Может наоборот? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 15:00 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
s_ustinov_bobпропущено... я не думаю, я это знаю совершенно точно пример про одновременную продажу одного билета двум пассажирам является хрестоматийным описанием максимального уровня изоляции транзакций последний раз читал в книге писателя по фамилии Сеппа, еще есть такой популярный в прошлом писатель, а ныне вице-през Оракла, г-н Кайт, тот тоже такой пример приводил ??? То есть описывается, что при Read uncommitted не возникает ошибки с продажей одного билета двум пассажирам, а при Serializable - возникает такая ошибка? Вы точно ничего не путаете? Может наоборот? нет, не путаю Serializable - это максимальный уровень изоляции транзакций, транзакции полностью изолируются друг от друга, каждая выполняется так, как будто параллельных транзакций не существует ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 15:07 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
а вот Read Uncommited - наоборот Типичный способ реализации данного уровня изоляции — блокировка данных на время выполнения команды изменения, что гарантирует, что команды изменения одних и тех же строк, запущенные параллельно, фактически выполнятся последовательно, и ни одно из изменений не потеряется. Если несколько параллельных транзакций пытаются изменять одну и ту же строку таблицы, то в окончательном варианте строка будет иметь значение, определенное всем набором успешно выполненных транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 15:09 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_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 не позволит прочитать статус места, пока с ним работает другая транзакция. Однако, это вызовет дополнительные "тормоза". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 15:20 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobs_ustinovТо есть описывается, что при Read uncommitted не возникает ошибки с продажей одного билета двум пассажирам, а при Serializable - возникает такая ошибка? Вы точно ничего не путаете? Может наоборот? нет, не путаю Serializable - это максимальный уровень изоляции транзакций, транзакции полностью изолируются друг от друга, каждая выполняется так, как будто параллельных транзакций не существует а вот Read Uncommited - наоборот Типичный способ реализации данного уровня изоляции — блокировка данных на время выполнения команды изменения, что гарантирует, что команды изменения одних и тех же строк, запущенные параллельно, фактически выполнятся последовательно, и ни одно из изменений не потеряется. Если несколько параллельных транзакций пытаются изменять одну и ту же строку таблицы, то в окончательном варианте строка будет иметь значение, определенное всем набором успешно выполненных транзакций. Единственное, что можно сказать: _bobпрочитайте учебник ДО КОНЦА ... УЧИТЬ МАТЧАСТЬ НЕОБХОДИМО, КУРСАНТ!!! Вы неправильно понимаете разницу между уровнями изоляции транзакций, и, вероятно, не совсем верно понимаете, что такое транзакция. Еще раз почитайте про ACID, вам это будет полезно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 15:21 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
GaryaПардон, продать три раза одно и то же место может получиться и при том, и при этом уровне изоляции - зависит от логики работы транзакции. ну наконец-то Garya понял что я имею в виду и наверняка понял, почему я настаиваю на последовательном пересчете ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 15:35 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
_bobGaryaПардон, продать три раза одно и то же место может получиться и при том, и при этом уровне изоляции - зависит от логики работы транзакции. ну наконец-то Garya понял что я имею в виду и наверняка понял, почему я настаиваю на последовательном пересчете )))Решил удалить свой пост и написать более детально, извините, коллеги. Кто-то успел увидеть краткое резюме без объяснения. SERIALISEBLE вызывает блокировку данных только после записи в одной из параллельных транзакций. Однако, прочитать, что место свободно могут все параллельные транзакции перед модификацией статуса места. Если логика работы такова, что пытается модифицировать статус, предварительно проверив его, может возникнуть ситуация, когда три параллельных транзакции установили факт, что место - свободно. Затем та из транзакций, которая попытается модифицировать значение первой, установит блокировку на данные. Вторая и третья транзакции выполнить модификацию не смогут - у них возникнет ошибка блокировки. Если эта ошибка корректно обрабатывается на клиенте, тогда клиент попытается повторно считать статус и модифицировать его. Если она не обрабатывается, либо обрабатывается некорректно, либо проверка статуса места и модификация производятся в разных транзакциях, могут возникнуть проблемы. Однако, в общем случае SERIALIZEBLE как раз лучше защищает от подобных ситуаций, нежели READ UNCOMMITED. Однако, SERIALIZEBLE может вызвать вал взаимных блокировок и страшные тормоза. Так что, с моей точки зрения s_ustinov всё же более прав, нежели _bob, который не нашел в себе силы признать 20084955 , что перепутал эти уровни изоляции, хотя и начал в своем ответе корректировать свою позицию. Коллеги, по моему, Вы слишком ополчились друг на друга. Человеку свойственно ошибаться, не следует злорадствовать по поводу чужих ошибок, потому что когда-нибудь ошибетесь и вы. И _bob, и s_ustinov - оба весьма грамотные специалисты. Но, к великому моему сожалению, не достаточно сдержанные. Подобная несдержанность - весьма нехарактерная черта для ИТ-директоров, которые должны иметь в себе силы сдерживать эмоции, это одно из ценных качеств менеджера высокого уровня. И не только менеджеров, но и вообще всех людей, которые считают себя интеллигентными и не хотят опускаться до базарного уровня. Модератор: Если попытки взаимных наездов не прекратятся, мне придется данный тред прикрыть, а нарушителей забанить. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 16:02 |
|
Алгоритм резервирования для нескольких складов
|
|||
---|---|---|---|
#18+
Garya Если эта ошибка корректно обрабатывается на клиенте, тогда клиент попытается повторно считать статус и модифицировать его. Если она не обрабатывается, либо обрабатывается некорректно, либо проверка статуса места и модификация производятся в разных транзакциях, могут возникнуть проблемы. Однако, в общем случае SERIALIZEBLE как раз лучше защищает от подобных ситуаций, нежели READ UNCOMMITED. Однако, SERIALIZEBLE может вызвать вал взаимных блокировок и страшные тормоза. Так что, с моей точки зрения s_ustinov всё же более прав, нежели _bob, который не нашел в себе силы признать 20084955 , что перепутал эти уровни изоляции, хотя и начал в своем ответе корректировать свою позицию. разумеется, я названия перепутал однако сути это не меняет, мы ж не о блокировках спорили, а о некорректности параллельного резервирования моя позиция: параллельные процессы приведут к плачевным результатам, какой уровень изоляции не ставь ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2017, 16:26 |
|
|
start [/forum/topic.php?fid=29&msg=39380924&tid=1525788]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 240ms |
total: | 536ms |
0 / 0 |