Re[3]: [FireBird] deadlock; update conflicts with concurrent
От: sushko Россия  
Дата: 17.02.16 13:57
Оценка:
Здравствуйте, LuciferNovoros, Вы писали:

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


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

У классиков-теоретиков это называется "денормализация струкруты БД" — когда вычисляемые поля таки помещаются в БД как хранимые ради быстродействия системы в целом.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Отредактировано 17.02.2016 13:58 sushko . Предыдущая версия .
Re[11]: [FireBird] deadlock; update conflicts with concurrent update
От: BlackEric http://black-eric.lj.ru
Дата: 17.02.16 13:57
Оценка:
Здравствуйте, sushko, Вы писали:

S>Здравствуйте, BlackEric, Вы писали:


S>Я ожидал, что с WAIT транзакция клиента B из исходного сообщения выполнится после того, как клиент А снимет блокировку, а с параметром NOWAIT клиент B получит отлуп при попытке изменить заблокированную запись. В реальности же клиент B получает отлуп всегда, что с WAIT, что с NOWAIT. В чем тогда смысл этого параметра?


Lock conflict on no wait transaction
https://github.com/BlackEric001
Re[12]: [FireBird] deadlock; update conflicts with concurrent update
От: sushko Россия  
Дата: 17.02.16 14:03
Оценка:
Здравствуйте, BlackEric, Вы писали:

S>>Я ожидал, что с WAIT транзакция клиента B из исходного сообщения выполнится после того, как клиент А снимет блокировку, а с параметром NOWAIT клиент B получит отлуп при попытке изменить заблокированную запись. В реальности же клиент B получает отлуп всегда, что с WAIT, что с NOWAIT. В чем тогда смысл этого параметра?


BE>Lock conflict on no wait transaction


Не наш случай. В приведенной Вами ссылке написано: It only happens when the current transaction is a NO WAIT transaction, тогда как в моем примере ексепшген получает как раз WAIT-транзакция.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[13]: [FireBird] deadlock; update conflicts with concurrent update
От: BlackEric http://black-eric.lj.ru
Дата: 17.02.16 14:47
Оценка:
Здравствуйте, sushko, Вы писали:

S>Не наш случай. В приведенной Вами ссылке написано: It only happens when the current transaction is a NO WAIT transaction, тогда как в моем примере ексепшген получает как раз WAIT-транзакция.


Какая версия?
https://github.com/BlackEric001
Re[4]: [FireBird] deadlock; update conflicts with concurrent
От: LuciferNovoros Россия  
Дата: 17.02.16 16:47
Оценка:
Здравствуйте, sushko, Вы писали:

S>В теории да. А на практике оно не может быть вычисляемым, т.к. на его вычисление уходят десятки минут — например, если мы считаем по базе из 60,000 наименований товаров, сотнях тысяч операций и слабеньком железе.


На практике оно вычисляться будет только при построении отчета. Ты делаешь это каждую минуту? Вот сильно сомневаюсь... У тебя 60 тысяч товаров реально ежеминутно находятся в движении? Вряд ли. Так что, сделай уже нормально. Иначе никакие параметры транзакций тебя не спасут.

S>У классиков-теоретиков это называется "денормализация струкруты БД" — когда вычисляемые поля таки помещаются в БД как хранимые ради быстродействия системы в целом.


Да, но это не тот случай.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[14]: [FireBird] deadlock; update conflicts with concurrent update
От: sushko Россия  
Дата: 18.02.16 10:04
Оценка:
Здравствуйте, BlackEric, Вы писали:

S>>Не наш случай. В приведенной Вами ссылке написано: It only happens when the current transaction is a NO WAIT transaction, тогда как в моем примере ексепшген получает как раз WAIT-транзакция.


BE>Какая версия?


FireBird 2.5. Комплектацию (суперсервер там и т.п.) не помню, возможно, classic.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[5]: [FireBird] deadlock; update conflicts with concurrent
От: sushko Россия  
Дата: 18.02.16 10:07
Оценка:
Здравствуйте, LuciferNovoros, Вы писали:

S>>В теории да. А на практике оно не может быть вычисляемым, т.к. на его вычисление уходят десятки минут — например, если мы считаем по базе из 60,000 наименований товаров, сотнях тысяч операций и слабеньком железе.


LN>На практике оно вычисляться будет только при построении отчета. Ты делаешь это каждую минуту? Вот сильно сомневаюсь...


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

LN>У тебя 60 тысяч товаров реально ежеминутно находятся в движении? Вряд ли. Так что, сделай уже нормально. Иначе никакие параметры транзакций тебя не спасут.


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

S>>У классиков-теоретиков это называется "денормализация струкруты БД" — когда вычисляемые поля таки помещаются в БД как хранимые ради быстродействия системы в целом.


LN>Да, но это не тот случай.


Именно тот.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[6]: [FireBird] deadlock; update conflicts with concurrent
От: LuciferNovoros Россия  
Дата: 18.02.16 16:55
Оценка: -1
Здравствуйте, sushko, Вы писали:

S>Продавцу нужно знать, сколько товара есть в магазине, и сколько товара есть в других магазинах этой же сети. Т.е. эти цифры постоянно присутствуют на экране.


Да не нужно ему этого знать. Если товара нет в наличии, то программа не должна разрешить ему продать. Все. Хотя, если сам хозяин за прилавком стоит, тогда другой вопрос.

S>Откуда я знаю, я же девелОпер, а не владелец магазина, и программа делается не под конкретного заказчика, а, так сказать, "для широкого круга потребителей".


А зря. Изучение предметной области — это первое, с чего следовало бы начать.

P.S. Как итог: 1С УТ спасет отца русской демократии. Без ищобретения велосипедов и прочих ортопедических изделий.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[5]: [FireBird] deadlock; update conflicts with concurrent
От: wildwind Россия  
Дата: 25.02.16 23:31
Оценка:
Здравствуйте, sushko, Вы писали:

S>Вообще, я не понимаю, о чем мы спорим. А заблокировал запись, В пытается ее изменить в WAIT-транзакции, и эта транзакция В подвисает до тех пор, пока не закончится транзакция А, и это правильно. Но почему-то по завершении транзакции А транзакция В не начинает работать, как можно было бы предположить по смыслу слова WAIT, а завершается с ошибкой. В чем тогда смысл параметра WAIT у транзакции В?


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