Показать сообщение отдельно
Старый 14.02.2008, 18:03   #14  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Цитата:
Сообщение от RedFox Посмотреть сообщение
Извините, но не понял как разнесенный (отсроченное) учет и резервирование связано?
Вот именно, - когда начнут все эти 100 пользователей колбасить заказы, то мы просто получил залоченную 337 таблицу!
При учете резервы снимаются. Подозреваю что не без LockTable.
Но даже если и без - Locktable на резервировании будет мешать снятие резервов. Вывод - при одновременном учете и резервировании
вероятность блокировать увеличивается.

Цитата:
Сообщение от RedFox Посмотреть сообщение
Ну возможно вообще создать временную таблицу со строками, связанными с 37, 5740 и просто заносить туда строки с товарами,
которые еще можно продавать. И при этом производить сравнение наличия и резерва.
А потом уже, отдельным процессом все скопом резервировать..
Можно еще много чего придумать под требования.
Если правильно понял Вы предлагаете использовать temporary table.
Интересное решение . Яблок конечно всем хватит.. но токо до момента учета .
Или есть способ юзеру залесть во временную таблицу другого юзера?
В противном случае чем Ваше предложение отличается 32 таблицы (Positive=true - товар которые еще можно продавать)
+ 337 - резервы на эти товары?


[quote=RedFox;364169]
А зачем разделять там по диапазонам, если там все под Заказы и так разделяется?
[quote=RedFox;364169]

К сожалению (или счастью?) номера документа не включен в PK 337 таблицы.
Напоминаю тему обсуждения - уменьшить вероятность блокировок.
Поясняю свою мысль:
1. Принимаем решение - разделяем 337 на диапазоны по филиалам
А - 0..1000000
Б - 10000000..20000000

2. Везде в резервировании заменяем код поиска последнего Entry No. с одновременной блокировкой таблицы
(LockTable; Find('+); )
на примерно след.
(setfilter("Entry No.", GetFilialFilter); :Locktable; Find('+'));

Что получили
А и Б одновременно резервируют
A:
setfilter(0..1000000);
find('+');
последняя запись 300 (только ее и (или) на Сиквеле экстент залочит сервер)

Б:
setfilter(1000000..2000000);
find('+');
последняя запись 10000500 (только ее и (или) на Сиквеле экстент залочит сервер)
А и Б мешать друг другу не будут.
Заметьте - другие пользователи из филиалов буду ждать освобождения своих диапазонов.

Вывод:
У каждого филиала 337 таблица будет залочена только в своем диапазоне (кроме случаев когда последние записи 2 филиалов будут
в одном экстенте - такое будет только при небольшом числе записей в 337, обойти можно также вставив пустышки)
и возможно одновременное резервирование

Ремарка про склад - locktable все же хорошая функция, позволяет не зарезервировать 2 раза один и тот же товар.