|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov iOracleDevЧто ты имеешь ввиду под агрегатами без блокировок? Хранимые агрегаты, поддержание которых в многопользовательской среде не приводит к блокировкам и конфликтам обновлений. Как это решит проблему, если два пользователя параллельно изменили один и тот же агрегат (каждый свою копию/версию) и оба хотят потом свои изменения сохранить? Чьи изменения сохранять - того, кто по должности старше, у кого денег больше / тачка круче / жена моложе, или просто того, у кого писюн длинее? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 15:33 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Gerros А какие проводки должны формироваться для коммерческого предложения? Не обязательно проводки в хозяйственном смысле. Ну просто пример из головы. Допустим, я занимаюсь гастролями всяких артистов. И вот, я сижу и пишу письмо в Самару: "Чуваки, к вам может приехать спектакль "Буратино", в любой день с 15 до 20 декабря, условия такие-то". В тот момент, когда я собираюсь это письмо отправить, система должна просчитать, что в этот период на каждую роль в спектакле найдётся хотя бы один исполнитель, который её играет. Допустим, там играет актёр Артемонов. Это значит, что в момент отправки моего коммерческого предложения в базу должно лечь что-то, что позволит другому менеджеру написать коммерческое предложение на другой спектакль (включающий Артемонова) на 21-го число в Самару - и не позволит тому же менеджеру того же 21-го числа позарез нуждаться в Артемонове во Владивостоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 15:49 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
iOracleDevТ.е. неконсистентный агрегат и что в итоге вы хотели сказать? Именно то,что и сказал: не всякий осилит. fkthatКак это решит проблему, если два пользователя параллельно изменили один и тот же агрегат (каждый свою копию/версию) и оба хотят потом свои изменения сохранить? Обоих. Потому что сохраняется не сам агрегат, а дельта к нему. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 16:14 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
fkthat Как это решит проблему, если два пользователя параллельно изменили один и тот же агрегат (каждый свою копию/версию) и оба хотят потом свои изменения сохранить? Чьи изменения сохранять - того, кто по должности старше, у кого денег больше / тачка круче / жена моложе, или просто того, у кого писюн длинее? Я вот тоже не понял, ну сработает триггер, но транзакция так и останется не завершенной как для основной таблицы, так и для агрегата,пойдут локи или что-то не понимаю? А потом еще и присмотрелся, там еще и агрегат надо агрегировать во вью. Что-то какая то пиррова победа даже если все работать будет как было описано. Если мы говорим, что у нас агрегат может быть не консистентным, а по факту так и кажется (не только мне), то я бы смотрел в сторону мат. вью.,но это не точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 16:28 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Именно то,что и сказал: не всякий осилит. Вы предложили неконсистентный агрегат, он отличается от агрегата получаемого простым запросом без блокировок только перераспределением нагрузки на вычисление, где профит, где транзакционность? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 16:36 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
iOracleDevгде профит, где транзакционность? Скорость. Благодаря свёртке запрос лопатит гораздо меньше записей. Нет деградации производительности при накоплении данных. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 16:45 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
softwarer, Не очень хороший пример, основываясь на предположении без подтверждения блокировать ресурс не очень хорошая практика. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 16:50 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Скорость. Благодаря свёртке запрос лопатит гораздо меньше записей. Нет деградации производительности при накоплении данных. Однако использование физической таблицы и постоянные процедуры пересчета, удаления и добавления записей, могут привести к увеличению нагрузки на систему по сравнению с выполнением обычных запросов, поэтому профит сомнительный. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 16:56 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Обоих. Потому что сохраняется не сам агрегат, а дельта к нему. Да какая разница дельта или хоть ипсилон - пришел Вася записал одно, пришел Петя, записал другое, следом пришел Вова, и что он должен в результате увидеть? Или ты ему дельты показывать будешь, а дальше сам пускай разбирается. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 17:26 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
iOracleDevпостоянные процедуры пересчета, удаления и добавления записей, могут привести к увеличению нагрузки на систему по сравнению с выполнением обычных запросов Не могут. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 17:43 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
softwarer Gerros А какие проводки должны формироваться для коммерческого предложения? Не обязательно проводки в хозяйственном смысле. Ну просто пример из головы. Допустим, я занимаюсь гастролями всяких артистов. И вот, я сижу и пишу письмо в Самару: "Чуваки, к вам может приехать спектакль "Буратино", в любой день с 15 до 20 декабря, условия такие-то". В тот момент, когда я собираюсь это письмо отправить, система должна просчитать, что в этот период на каждую роль в спектакле найдётся хотя бы один исполнитель, который её играет. Допустим, там играет актёр Артемонов. Это значит, что в момент отправки моего коммерческого предложения в базу должно лечь что-то, что позволит другому менеджеру написать коммерческое предложение на другой спектакль (включающий Артемонова) на 21-го число в Самару - и не позволит тому же менеджеру того же 21-го числа позарез нуждаться в Артемонове во Владивостоке. Ваш кейс аналогичен простой покупке товара. Вы предлагаете резервирование товара на момент отправки коммерческого предложения, так никто практически не работает. Предоплата, резерв, отгрузка. Так же и с Артемонами кончится тем, что никуда они не поедут и вы будете в убытках. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 17:45 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
fkthatпришел Вася записал одно, пришел Петя, записал другое, следом пришел Вова, и что он должен в результате увидеть? В агрегате хранится "на складе 100 яблок". Пришёл Вася, записал "я продал 30 яблок". Пришёл Петя, записал "я продал 20 яблок". Ты не поверишь, но Вова увидит "на складе 50 яблок". И для этого системе придётся просуммировать только 3 записи, а не 100500 с начала времён. При этом ни Вова, ни Петя не увидят "подожди, там Вася ещё телится", хоть он неделю думай над сабжем. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 17:50 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
TrogloditВы предлагаете резервирование товара на момент отправки коммерческого предложения, так никто практически не работает. Предоплата, резерв, отгрузка. А тут-то резерв зачем, раз товар уже оплачен? Он либо есть на складе и идёт сразу отгрузка, либо его на складе нет и идёт заказ у поставщика. Обычно (у тех же интернет-магазинов) товар как раз резервируется в момент заказа, а у некоторых он ещё при этом и отправляется к месту выдачи. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 17:57 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
softwarer Допустим, я занимаюсь гастролями всяких артистов. И вот, я сижу и пишу письмо в Самару: "Чуваки, к вам может приехать спектакль "Буратино", в любой день с 15 до 20 декабря, условия такие-то". В тот момент, когда я собираюсь это письмо отправить, система должна просчитать, что в этот период на каждую роль в спектакле найдётся хотя бы один исполнитель, который её играет. Допустим, там играет актёр Артемонов. Это значит, что в момент отправки моего коммерческого предложения в базу должно лечь что-то, что позволит другому менеджеру написать коммерческое предложение на другой спектакль (включающий Артемонова) на 21-го число в Самару - и не позволит тому же менеджеру того же 21-го числа позарез нуждаться в Артемонове во Владивостоке. Такие задачи называются "Управление запасами" и решаются по-другому. Вообще по-другому: Менеджеры рассылают предложения (при этом в системе ничего не меняется). Менеджеры получают ответы (при этом в системе ничего не меняется). Менеджеры собираются на совещание и составляют план-график. Целевая функция - ну, например, максимальная прибыль за период. План-график согласуется с заказчиками, снова меняется и так по кругу. Заключаются договоры с заказчиками. Чуваки едут, показывают, подписывают акт выполненных работ. Акт выполненных работ ПРОВОДИТСЯ (при этом в системе списываются все расходы и появляется дебеторская задолженность заказчика). Вычисление целевой функции конечно лучше автоматизировать, но зачем при этом блокировать ресурсы? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 18:20 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov В агрегате хранится "на складе 100 яблок". Вот версионник без блокировки: В агрегате хранится "на складе 100 яблок". Утром: Пришёл Вася, спросил "сколько у нас яблок" - ему сказали "100", он ушел довольный Пришёл Петя, спросил "сколько у нас яблок" - ему сказали "100", он ушел довольный Вечером: приходит Вася "я продал Мише 70 яблок" приходит Петя: "а я продал Маше 80 яблок" На следующее утро: Приходят вместе Миша с Машей с накладными на 70 + 180 = 150 яблок. И кладовщик-версионник мечется между четыремя персонажами ожидая, что его кто-то из них вот-вот выи..ет, чтобы он недостающие 50 яблок родил. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 18:37 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
fkthatего кто-то из них вот-вот выи..ет, чтобы он недостающие 50 яблок родил. Угу. Только не его, а того горе-менеджера, который просрал точку пополнения запасов на популярный товар. И не "родил", а послал поставщику срочный заказ, а Маше - извинение, что её заказ задерживается в связи с техническими проблемами. Ну а наивному разработчику системы, который надеялся, что данные в ней всегда соответствуют действительности и не послал этому менеджеру уведомление о том, что запасы снизились на критический уровень - дать по шапке. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 18:56 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А тут-то резерв зачем, раз товар уже оплачен? Он либо есть на складе и идёт сразу отгрузка, либо его на складе нет и идёт заказ у поставщика. Обычно (у тех же интернет-магазинов) товар как раз резервируется в момент заказа, а у некоторых он ещё при этом и отправляется к месту выдачи. У всех все по разному, резерв нужен для ожидания например подвоза товара, который партнерский например, но в то же время чтобы не умыкнули другому покупателю, поэтому пока отгрузки нет, он в резерве, и это я обрисовал простенькую схему, у зубров все посложнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 19:21 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov В агрегате хранится "на складе 100 яблок". Пришёл Вася, записал "я продал 30 яблок". Пришёл Петя, записал "я продал 20 яблок". Ты не поверишь, но Вова увидит "на складе 50 яблок". И для этого системе придётся просуммировать только 3 записи, а не 100500 с начала времён. При этом ни Вова, ни Петя не увидят "подожди, там Вася ещё телится", хоть он неделю думай над сабжем. Так Вася еще не записал. Он в процессе или мы про грязное чтение говорим? При этом есть запись на insert/update от васи на без коммита и по расписанию удаление всех записей, т.е. она будет удалена/проигнорирована/я есть грут? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 19:25 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
TrogloditПри этом есть запись на insert/update от васи на без коммита и по расписанию удаление всех записей, т.е. она будет удалена/проигнорирована/я есть грут? Свёртка производится в snapshot транзакции, поэтому она удалит только те записи, которые свернула. Если Вася не закоммитился - его записи для этой транзакции не существует. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 19:36 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Не могут. В условиях отсутствия конкретной информации по распределению данных и частоте выполнения запросов, ваше утверждение бессмысленно. Dimitry Sibiryakov Угу. Только не его, а того горе-менеджера, который просрал точку пополнения запасов на популярный товар. И не "родил", а послал поставщику срочный заказ, а Маше - извинение, что её заказ задерживается в связи с техническими проблемами. Ну а наивному разработчику системы, который надеялся, что данные в ней всегда соответствуют действительности и не послал этому менеджеру уведомление о том, что запасы снизились на критический уровень - дать по шапке. Какая глупость, при чем тут какой то менеджер, система не должна дать продать отсутствующий товар, здесь вина исключительно бестолкового архитектора системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 19:59 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
iOracleDevсистема не должна дать продать отсутствующий товар Наивно. Информация в компьютерной системе никогда не соответствует реальности. Она технически не может проконтролировать наличие или отсутствие товара. Максимум, что она может - намекнуть, что товара может в реальности не быть. Но начинать делать это она должна задолго до того, как какой-то хранимый агрегат достигнет нуля. И по той же причине она не должна препятствовать продаже товара по его (нуля) достижении. Согласись, как автор POS, ты будешь выглядеть глупо, когда в "твоём" супермаркете тебе не смогут пробить товар, который ты держишь в руках, только потому, что твоя система считает, что тот уже кончился. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 20:11 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Информация в компьютерной системе никогда не соответствует реальности. Она технически не может проконтролировать наличие или отсутствие товара. Максимум, что она может - намекнуть, что товара может в реальности не быть. Но начинать делать это она должна задолго до того, как какой-то хранимый агрегат достигнет нуля. И по той же причине она не должна препятствовать продаже товара по его (нуля) достижении. Согласись, как автор POS, ты будешь выглядеть глупо, когда в "твоём" супермаркете тебе не смогут пробить товар, который ты держишь в руках, только потому, что твоя система считает, что тот уже кончился. Да, может расходиться, поэтому существует такой процесс как инвентаризация. И тем не менее системы препятствуют продаже товара если его на складе (по информации в системе) больше нет, его не смогут пробить на кассе, странно что вы с этим не сталкивались. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 20:25 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Согласись, как автор POS, ты будешь выглядеть глупо, когда в "твоём" супермаркете тебе не смогут пробить товар, который ты держишь в руках, только потому, что твоя система считает, что тот уже кончился. Согласитесь, как автор оптового учета,вы будете выглядеть глупо, когда выписан счет, оплачено приехал купец за товаром, а в "вашей" конторе товара нет на остатках, только потому что ваша система считает, что тот еще не кончился. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 20:38 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Свёртка производится в snapshot транзакции, поэтому она удалит только те записи, которые свернула. Если Вася не закоммитился - его записи для этой транзакции не существует. Это просто праздник какой то. Т.е. если у нас агрегат из остатков превращается в комбинацию агрегаций вирт. остатка(ваш остаток)+товар в пути+зарезервированный товар+брак+.... и это все должно быть консистентно, и по каждому создавать агрегатную вьюху, задания на чистку, join'ы для запросов. Это музыка, достойная HighLoad'a. А если мы говорим не про остатки, а например про границы размера товарного кредита клиенту, его тоже надо позволять за рамки уводить? Т.е. пока Вася на телефоне втирает представителю клиента на 50млн, Петя подсуетился и договорился с другим баером этого же клиента на 50млн. Вася закоммитил все, и имеем товарный кредит в 100млн, при границе например в 60. Вот владелец то обрадуется, когда ему про "как космические снапшоты будут бороздить пространство" будут рассказывать. А если применить социальную инженерию, как только народ поймет, что "это чо то там снапшоты понаделали" прокатывают, утащут ВСЕ и ВСЁ. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 20:44 |
|
Диалог с пользователем в транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Я бы вашу идею с аггрегатами, ведь она не настолько плоха, дополнил и упростил. 1. Эти агрегаты нельзя использовать для формирования первички. 2. Отличный вариант для кэшей, но без вью, корретировочных процедур. 2.a. Сторонным софтом заполняем агрегаты поредством подписки на event'ы. Не знаю как в птице,например в postgres'е event вызывается только ПОСЛЕ коммита. 2.b В конце транзакции вызывет уведомления для event'a. И блокировок уже не будет. Но повторюсь использовать эти данные в учете нельзя. Для аналитики, статистики, мониторинга и пр. очень даже неплохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2019, 21:07 |
|
|
start [/forum/topic.php?fid=32&msg=39899603&tid=1539889]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 246ms |
total: | 378ms |
0 / 0 |