powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Диалог с пользователем в транзакции
25 сообщений из 65, страница 2 из 3
Диалог с пользователем в транзакции
    #39899587
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

iOracleDevЧто ты имеешь ввиду под агрегатами без блокировок?

Хранимые агрегаты, поддержание которых в многопользовательской среде не приводит к
блокировкам и конфликтам обновлений.

Как это решит проблему, если два пользователя параллельно изменили один и тот же агрегат (каждый свою копию/версию) и оба хотят потом свои изменения сохранить? Чьи изменения сохранять - того, кто по должности старше, у кого денег больше / тачка круче / жена моложе, или просто того, у кого писюн длинее?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899589
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerros
А какие проводки должны формироваться для коммерческого предложения?

Не обязательно проводки в хозяйственном смысле. Ну просто пример из головы. Допустим, я занимаюсь гастролями всяких артистов. И вот, я сижу и пишу письмо в Самару: "Чуваки, к вам может приехать спектакль "Буратино", в любой день с 15 до 20 декабря, условия такие-то". В тот момент, когда я собираюсь это письмо отправить, система должна просчитать, что в этот период на каждую роль в спектакле найдётся хотя бы один исполнитель, который её играет. Допустим, там играет актёр Артемонов. Это значит, что в момент отправки моего коммерческого предложения в базу должно лечь что-то, что позволит другому менеджеру написать коммерческое предложение на другой спектакль (включающий Артемонова) на 21-го число в Самару - и не позволит тому же менеджеру того же 21-го числа позарез нуждаться в Артемонове во Владивостоке.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899591
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDevТ.е. неконсистентный агрегат и что в итоге вы хотели сказать?

Именно то,что и сказал: не всякий осилит.

fkthatКак это решит проблему, если два пользователя параллельно изменили один и тот же агрегат
(каждый свою копию/версию) и оба хотят потом свои изменения сохранить?

Обоих. Потому что сохраняется не сам агрегат, а дельта к нему.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899592
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat

Как это решит проблему, если два пользователя параллельно изменили один и тот же агрегат (каждый свою копию/версию) и оба хотят потом свои изменения сохранить? Чьи изменения сохранять - того, кто по должности старше, у кого денег больше / тачка круче / жена моложе, или просто того, у кого писюн длинее?

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

А потом еще и присмотрелся, там еще и агрегат надо агрегировать во вью. Что-то какая то пиррова победа даже если все работать будет как было описано.

Если мы говорим, что у нас агрегат может быть не консистентным, а по факту так и кажется (не только мне), то
я бы смотрел в сторону мат. вью.,но это не точно.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899593
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Именно то,что и сказал: не всякий осилит.

Вы предложили неконсистентный агрегат, он отличается от агрегата получаемого простым запросом без блокировок только перераспределением нагрузки на вычисление, где профит, где транзакционность?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899595
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDevгде профит, где транзакционность?

Скорость. Благодаря свёртке запрос лопатит гораздо меньше записей. Нет деградации
производительности при накоплении данных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899596
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Не очень хороший пример, основываясь на предположении без подтверждения блокировать ресурс не очень хорошая практика.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899598
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Скорость. Благодаря свёртке запрос лопатит гораздо меньше записей. Нет деградации
производительности при накоплении данных.

Однако использование физической таблицы и постоянные процедуры пересчета, удаления и добавления записей, могут привести к увеличению нагрузки на систему по сравнению с выполнением обычных запросов, поэтому профит сомнительный.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899603
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Обоих. Потому что сохраняется не сам агрегат, а дельта к нему.

Да какая разница дельта или хоть ипсилон - пришел Вася записал одно, пришел Петя, записал другое, следом пришел Вова, и что он должен в результате увидеть? Или ты ему дельты показывать будешь, а дальше сам пускай разбирается.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899604
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDevпостоянные процедуры пересчета, удаления и добавления записей, могут привести к увеличению
нагрузки на систему по сравнению с выполнением обычных запросов

Не могут.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899606
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Gerros
А какие проводки должны формироваться для коммерческого предложения?

Не обязательно проводки в хозяйственном смысле. Ну просто пример из головы. Допустим, я занимаюсь гастролями всяких артистов. И вот, я сижу и пишу письмо в Самару: "Чуваки, к вам может приехать спектакль "Буратино", в любой день с 15 до 20 декабря, условия такие-то". В тот момент, когда я собираюсь это письмо отправить, система должна просчитать, что в этот период на каждую роль в спектакле найдётся хотя бы один исполнитель, который её играет. Допустим, там играет актёр Артемонов. Это значит, что в момент отправки моего коммерческого предложения в базу должно лечь что-то, что позволит другому менеджеру написать коммерческое предложение на другой спектакль (включающий Артемонова) на 21-го число в Самару - и не позволит тому же менеджеру того же 21-го числа позарез нуждаться в Артемонове во Владивостоке.

Ваш кейс аналогичен простой покупке товара. Вы предлагаете резервирование товара на момент отправки коммерческого предложения, так никто практически не работает. Предоплата, резерв, отгрузка. Так же и с Артемонами кончится тем, что никуда они не поедут и вы будете в убытках.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899607
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatпришел Вася записал одно, пришел Петя, записал другое, следом пришел Вова, и что он должен
в результате увидеть?

В агрегате хранится "на складе 100 яблок".
Пришёл Вася, записал "я продал 30 яблок".
Пришёл Петя, записал "я продал 20 яблок".

Ты не поверишь, но Вова увидит "на складе 50 яблок". И для этого системе придётся
просуммировать только 3 записи, а не 100500 с начала времён. При этом ни Вова, ни Петя не
увидят "подожди, там Вася ещё телится", хоть он неделю думай над сабжем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899608
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditВы предлагаете резервирование товара на момент отправки коммерческого предложения, так
никто практически не работает. Предоплата, резерв, отгрузка.

А тут-то резерв зачем, раз товар уже оплачен? Он либо есть на складе и идёт сразу
отгрузка, либо его на складе нет и идёт заказ у поставщика.

Обычно (у тех же интернет-магазинов) товар как раз резервируется в момент заказа, а у
некоторых он ещё при этом и отправляется к месту выдачи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899612
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Допустим, я занимаюсь гастролями всяких артистов. И вот, я сижу и пишу письмо в Самару: "Чуваки, к вам может приехать спектакль "Буратино", в любой день с 15 до 20 декабря, условия такие-то". В тот момент, когда я собираюсь это письмо отправить, система должна просчитать, что в этот период на каждую роль в спектакле найдётся хотя бы один исполнитель, который её играет. Допустим, там играет актёр Артемонов. Это значит, что в момент отправки моего коммерческого предложения в базу должно лечь что-то, что позволит другому менеджеру написать коммерческое предложение на другой спектакль (включающий Артемонова) на 21-го число в Самару - и не позволит тому же менеджеру того же 21-го числа позарез нуждаться в Артемонове во Владивостоке.
А если ваше письмо в Самару не дойдёт до адресата, Артемонов будет щёлкать клювом до 20-го декабря?

Такие задачи называются "Управление запасами" и решаются по-другому. Вообще по-другому:
Менеджеры рассылают предложения (при этом в системе ничего не меняется).
Менеджеры получают ответы (при этом в системе ничего не меняется).
Менеджеры собираются на совещание и составляют план-график. Целевая функция - ну, например, максимальная прибыль за период.
План-график согласуется с заказчиками, снова меняется и так по кругу.
Заключаются договоры с заказчиками.
Чуваки едут, показывают, подписывают акт выполненных работ.
Акт выполненных работ ПРОВОДИТСЯ (при этом в системе списываются все расходы и появляется дебеторская задолженность заказчика).

Вычисление целевой функции конечно лучше автоматизировать, но зачем при этом блокировать ресурсы?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899619
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

В агрегате хранится "на складе 100 яблок".


Вот версионник без блокировки:

В агрегате хранится "на складе 100 яблок".

Утром:
Пришёл Вася, спросил "сколько у нас яблок" - ему сказали "100", он ушел довольный
Пришёл Петя, спросил "сколько у нас яблок" - ему сказали "100", он ушел довольный

Вечером:
приходит Вася "я продал Мише 70 яблок"
приходит Петя: "а я продал Маше 80 яблок"

На следующее утро:
Приходят вместе Миша с Машей с накладными на 70 + 180 = 150 яблок. И кладовщик-версионник мечется между четыремя персонажами ожидая, что его кто-то из них вот-вот выи..ет, чтобы он недостающие 50 яблок родил.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899621
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatего кто-то из них вот-вот выи..ет, чтобы он недостающие 50 яблок родил.

Угу. Только не его, а того горе-менеджера, который просрал точку пополнения запасов на
популярный товар. И не "родил", а послал поставщику срочный заказ, а Маше - извинение, что
её заказ задерживается в связи с техническими проблемами.

Ну а наивному разработчику системы, который надеялся, что данные в ней всегда
соответствуют действительности и не послал этому менеджеру уведомление о том, что запасы
снизились на критический уровень - дать по шапке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899625
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

А тут-то резерв зачем, раз товар уже оплачен? Он либо есть на складе и идёт сразу
отгрузка, либо его на складе нет и идёт заказ у поставщика.

Обычно (у тех же интернет-магазинов) товар как раз резервируется в момент заказа, а у
некоторых он ещё при этом и отправляется к месту выдачи.

У всех все по разному, резерв нужен для ожидания например подвоза товара, который партнерский например, но в то же время чтобы не умыкнули другому покупателю, поэтому пока отгрузки нет, он в резерве, и это я обрисовал простенькую схему, у зубров все посложнее.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899626
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

В агрегате хранится "на складе 100 яблок".
Пришёл Вася, записал "я продал 30 яблок".
Пришёл Петя, записал "я продал 20 яблок".

Ты не поверишь, но Вова увидит "на складе 50 яблок". И для этого системе придётся
просуммировать только 3 записи, а не 100500 с начала времён. При этом ни Вова, ни Петя не
увидят "подожди, там Вася ещё телится", хоть он неделю думай над сабжем.

Так Вася еще не записал. Он в процессе или мы про грязное чтение говорим?
При этом есть запись на insert/update от васи на без коммита и по расписанию удаление всех записей, т.е. она будет удалена/проигнорирована/я есть грут?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditПри этом есть запись на insert/update от васи на без коммита и по расписанию удаление всех
записей, т.е. она будет удалена/проигнорирована/я есть грут?

Свёртка производится в snapshot транзакции, поэтому она удалит только те записи, которые
свернула. Если Вася не закоммитился - его записи для этой транзакции не существует.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899633
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Не могут.

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

Dimitry Sibiryakov

Угу. Только не его, а того горе-менеджера, который просрал точку пополнения запасов на
популярный товар. И не "родил", а послал поставщику срочный заказ, а Маше - извинение, что
её заказ задерживается в связи с техническими проблемами.

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

Какая глупость, при чем тут какой то менеджер, система не должна дать продать отсутствующий товар, здесь вина исключительно бестолкового архитектора системы.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899636
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDevсистема не должна дать продать отсутствующий товар

Наивно.

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

И по той же причине она не должна препятствовать продаже товара по его (нуля) достижении.
Согласись, как автор POS, ты будешь выглядеть глупо, когда в "твоём" супермаркете тебе не
смогут пробить товар, который ты держишь в руках, только потому, что твоя система считает,
что тот уже кончился.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899643
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Информация в компьютерной системе никогда не соответствует реальности. Она технически не
может проконтролировать наличие или отсутствие товара. Максимум, что она может -
намекнуть, что товара может в реальности не быть. Но начинать делать это она должна
задолго до того, как какой-то хранимый агрегат достигнет нуля.

И по той же причине она не должна препятствовать продаже товара по его (нуля) достижении.
Согласись, как автор POS, ты будешь выглядеть глупо, когда в "твоём" супермаркете тебе не
смогут пробить товар, который ты держишь в руках, только потому, что твоя система считает,
что тот уже кончился.

Да, может расходиться, поэтому существует такой процесс как инвентаризация.

И тем не менее системы препятствуют продаже товара если его на складе (по информации в системе) больше нет, его не смогут пробить на кассе, странно что вы с этим не сталкивались.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899646
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Согласись, как автор POS, ты будешь выглядеть глупо, когда в "твоём" супермаркете тебе не
смогут пробить товар, который ты держишь в руках, только потому, что твоя система считает,
что тот уже кончился.

Согласитесь, как автор оптового учета,вы будете выглядеть глупо, когда выписан счет, оплачено приехал купец за товаром, а в "вашей" конторе товара нет на остатках, только потому что ваша система считает, что тот еще не кончился.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899648
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Свёртка производится в snapshot транзакции, поэтому она удалит только те записи, которые
свернула. Если Вася не закоммитился - его записи для этой транзакции не существует.

Это просто праздник какой то.
Т.е. если у нас агрегат из остатков превращается в комбинацию агрегаций вирт. остатка(ваш остаток)+товар в пути+зарезервированный товар+брак+....
и это все должно быть консистентно, и по каждому создавать агрегатную вьюху, задания на чистку, join'ы для запросов.
Это музыка, достойная HighLoad'a.
А если мы говорим не про остатки, а например про границы размера товарного кредита клиенту, его тоже надо позволять за рамки уводить?
Т.е. пока Вася на телефоне втирает представителю клиента на 50млн, Петя подсуетился и договорился с другим баером этого же клиента на 50млн.
Вася закоммитил все, и имеем товарный кредит в 100млн, при границе например в 60. Вот владелец то обрадуется, когда ему про "как космические снапшоты будут бороздить пространство" будут рассказывать.

А если применить социальную инженерию, как только народ поймет, что "это чо то там снапшоты понаделали" прокатывают, утащут ВСЕ и ВСЁ.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899655
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Я бы вашу идею с аггрегатами, ведь она не настолько плоха, дополнил и упростил.
1. Эти агрегаты нельзя использовать для формирования первички.
2. Отличный вариант для кэшей, но без вью, корретировочных процедур.
2.a. Сторонным софтом заполняем агрегаты поредством подписки на event'ы.
Не знаю как в птице,например в postgres'е event вызывается только ПОСЛЕ коммита.
2.b В конце транзакции вызывет уведомления для event'a.
И блокировок уже не будет.
Но повторюсь использовать эти данные в учете нельзя.
Для аналитики, статистики, мониторинга и пр. очень даже неплохо.
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 2 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Диалог с пользователем в транзакции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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