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

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

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

Это я понял, но можно и без схлопывания, тупо мержить запись.
В моем предложении, когда нам консистентность на 100% не нужна,блокировок на мерж записей ПОСЛЕ коммита не будет.
Просто реализация - это отказ от ACID.
Решение: а давайте возьмем и выбросим все эти транзакции на помойку.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899679
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troglodit,

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

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

Да это все понятно я, я к тому что вместо 3х позиций Пети,Васи,Вани по одному агрегату как предлагали выше, должно схлопываться(мержиться) в ОДНУ запись, и тогда на ни вью с суммой по агрегату, ни периодическая чистка а перед этим агрегация, не нужна.
Т.е. вместо
В агрегате хранится "на складе 100 яблок".
Пришёл Вася, записал "я продал 30 яблок", В агрегате хранится "на складе 70 яблок"
Пришёл Петя, записал "я продал 20 яблок", В агрегате храниться "на складе 50 яблок"
Никаких дополнительных строк по яблокам, мы просто меняем остаток по яблокам.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899693
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Не очень хороший пример, основываясь на предположении без подтверждения блокировать ресурс не очень хорошая практика.

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

При изменении одной и той же строки мы имеем сериализацию (блокировки), именно поэтому и было предложено хранить дельты
В агрегате хранится "на складе 100 яблок".
Пришёл Вася, записал "я продал 30 яблок", В агрегате хранится "на складе -30 яблок"
Пришёл Петя, записал "я продал 20 яблок", В агрегате храниться "на складе -20 яблок"
сумма по таблице агрегата даст 50.
Отрабатывает периодическая процедура и остается одна строка
В агрегате хранится "на складе 50 яблок".
Пользователи могут только добавлять строки дельт, процедура меняет строку с итоговым агрегатом и удаляет строки, уже учтенные в итоговом агрегате, при этом изменения одних и тех же строк разными пользователями нет и процедура с ними тоже не пересекается.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39899721
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Говорить "ой, извините, мы не можем выполнить то, что сами же вам и предложили, а вы вдруг взяли и согласились" - практика ещё хуже. Пример, конечно, нарочитый и упрощённый, но несёт именно то, что я хотел изложить в свете слов топикстартера - "сложный агрегат" (расписание кто когда где может быть занят) считается на ходу и может привести к предупреждениям и решению приостановить или отменить вроде бы выдвинутый документ.

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

При изменении одной и той же строки мы имеем сериализацию (блокировки), именно поэтому и было предложено хранить дельты
В агрегате хранится "на складе 100 яблок".
Пришёл Вася, записал "я продал 30 яблок", В агрегате хранится "на складе -30 яблок"
Пришёл Петя, записал "я продал 20 яблок", В агрегате храниться "на складе -20 яблок"
сумма по таблице агрегата даст 50.
Отрабатывает периодическая процедура и остается одна строка
В агрегате хранится "на складе 50 яблок".
Пользователи могут только добавлять строки дельт, процедура меняет строку с итоговым агрегатом и удаляет строки, уже учтенные в итоговом агрегате, при этом изменения одних и тех же строк разными пользователями нет и процедура с ними тоже не пересекается.

Блокировки будут безусловно (стандартные, но не те долгие, которые мы обсуждаем), но в нашем случае если использовать event'ы там все будет стандартно. Т.е. начало изменения агрегата будет происходить уже ПОСЛЕ коммита долгой транзакции, если будет откат вызов event'a не произойдет. Да мы жертвуем консистентностью, появляется вопрос, что делать если не смогли обработать event, но мне кажется это проще вариант с агрегированием агрегата во вью и периодическая чистка.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39900233
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
па сабжу:

По возможности сделать все возможные проверки до проведения.

То, что нельзя проверить: пробуем провести документ с параметром " реагировать на ошибку ХХ". Если ошибка, то откатываем изменения и выводим соотв. сообщение.
Если юзер подтверждает проведение с ошибкой, то снова проводить с параметром " Не реагировать на ошибку ХХ".
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39901775
Lunx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разве задача не стара как мир ? Как считать остатки товара на складе если пользователей 1000 и все продают с этого склада.
Вариант 1. Отрицательные остатки разрешены - фиксируем совершенные бизнес-операции, разбираемся потом.
Вариант 2. Отрицательные остатки не разрешены. Создаем стек транзакций, каждая транзакция считает возможность проведения операции. Если возможности нет - пользователю возвращается отрицательный результат и берется следующая транзакция их стека.

Вы хотите придумать вариант 3? Зачем ?
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39901842
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Если юзер подтверждает проведение с ошибкой, то снова проводить с параметром " Не реагировать на ошибку ХХ".

Проблема этого подхода в том, что между двумя последовательными вызовами с базой параллельно работают и другие пользователи. Поэтому вполне может случиться так, что после "проведения с ошибкой" возникнет уже не ошибка XX, а ошибка YY (либо ошибка XX, но с другими числовыми значениями, которые пользователь уже не подтвердил бы).
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39901853
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во блин, неужто непонятно что бабу можно одновременно только в несколько независимых дыр
это максимум до чего дошел порнушный прогресс
а так по очереди (и по хорошему - если согласна)
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39901877
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
L_argo
Если юзер подтверждает проведение с ошибкой, то снова проводить с параметром " Не реагировать на ошибку ХХ".

Проблема этого подхода в том, что между двумя последовательными вызовами с базой параллельно работают и другие пользователи. Поэтому вполне может случиться так, что после "проведения с ошибкой" возникнет уже не ошибка XX, а ошибка YY (либо ошибка XX, но с другими числовыми значениями, которые пользователь уже не подтвердил бы).
Все нормально. Если не установлен игнор ошибки YY, то будет откат и другое сообщение. :)

Большинство обсуждаемых кейсов в большей степени надуманы.

ХРРРРР!!! сказала пила.....
Ааа пля, сказали рабочие (с) анек
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39901881
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Если не установлен игнор ошибки YY, то будет откат и другое сообщение. :)

О том и речь. Такой процесс склонен доходить до зашкаливающей степени идиотизма.
...
Рейтинг: 0 / 0
Диалог с пользователем в транзакции
    #39902056
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
L_argo
Если не установлен игнор ошибки YY, то будет откат и другое сообщение. :)

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

А как по другому, если нужно знать решение пользователя ?
...
Рейтинг: 0 / 0
15 сообщений из 65, страница 3 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Диалог с пользователем в транзакции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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