![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация данных [D6, MSSQL]
Volodya_ © (2004-04-28 10:03:00)Есть клиент-серверное приложение с которым работает много пользователей, которые вносят изменения. Как сделать чтобы при изменении одним пользователем измененения сразу было видно и другим пользователям? Используемые компоненты: AdoQuery, DBGrid
Ega23 (2004-04-28 11:00:00) [21]Sergey13 © (28.04.04 10:55) [15]
Тут однозначно сказать нельзя. См. пример [14]ю Хотя, с другой стороны, если чуваку в первой кассе начали оформлять билет, всё такое, а денег у него не хватило, он в "ROLLBACK" :о) пошёл, а в 763-й кассе транзакция в таком случае пройдёт.
ИМХО, надо подробно изложить на бумаге все случаи и идти к начальству. Пусть сами принимают решение. Но автоматическое обновление - это смертельно будет. Хотя если 2-3 клиента и запрос не "тяжёлый", то может это и решение.
Reindeer Moss Eater (2004-04-28 11:00:00) [22]Ну что нету никакой возможности обновить только те записи котрые поменялись не делая рефреш?
А что, нету возможности поверить в то, что это не нужно для решения твоей задачи?
Sergey13 (2004-04-28 10:55:00) [23]А можно и не блокируя ничего. Поставить количество свободных мест на рейс и условие на него >=0 (ну или на каждое место признак занятости поставить если надо). При попытке продать лишнее оператор получает сообщение, что транзакция не прошла. После чего уже детально разбирается с конкретным случаем, с запросом последней инфы.
Так, ИМХО, самое правильное.
Ega23 (2004-04-28 10:54:00) [24]Вот представь: у тебя 1000 касс. В каждой ксаае каждые 10 минут продаётся по билету. Каков будет сетевой траффик и нагрузка на сервер БД? Это первое.
Второе. предположим, оформление билета занимает 1 минуту. В кассе №1 начали оформлять. Через 30 секунд в кассе №763 тоже начали его оформлять (т.к. он ещё не продан). Что тогда?
Volodya_ (2004-04-28 10:51:00) [25]Ну что нету никакой возможности обновить только те записи котрые поменялись не делая рефреш?
Ega23 (2004-04-28 10:46:00) [26]Volodya_ (28.04.04 10:39) [8]
Объясняю.
Когда человек подходит к кассе, продавец спрашивает его, какой рейс ему нужен. В какой город. И т.п. В этот момент идёт обновление выборки. Далее кассир начинает оформлять билет на какое-то место какого-то рейса. В этот момент на сервере должна сработать блокировка данной записи, дабы никто другой не смог его оформить. Закончив оформлять, продавец регистрирует в базе факт продажи. В этот момент запись о данном билете исчезает из списка свободных.
А запрос выполняется не доли секунд - как правило пользователю не нужно более 100 записей в выборке. Должна быть хрошая система фильтрации.
Reindeer Moss Eater (2004-04-28 10:46:00) [27]Volodya_ (28.04.04 10:39) [8]
вот нужно чтобы во всех остальных кассах было видно что этот билет уже продан! Что им каждую секунду жать кнопочку рефреш??? а если база огромная ?? и запрос выполняется не доли секунд
Глупость. Полнейшая.
Допустим выполнился рефреш и кассир видит, что есть свободное место.
Жмет кнопку "продать билет". А на другом рабочем месте в промежуток между этой проверкой и нажатием кнопки билет этот уже был продан.
Нужен был этот рефрешь? Нафик не нужен.
Andrey V. (2004-04-28 10:42:00) [28]2Volodya_
Ну так представь как он будет автоматом тебе рефрешить , когда у тебя запрос "выполняется не доли секунд". Ты можешь просто не смочь начать работать - Будешь смотреть как у тебя экпан рефрешится.
Andrey V. (2004-04-28 10:39:00) [29]Как правило такое желание (видеть срзу изменения) происходит при переходе с файл-серверов. И бывает трудно обяснить заказчику , что это ему не нужно.
Volodya_ (2004-04-28 10:39:00) [30]Ну что не понятно? Привожу прстой пример:
Есть база на сервере, есть авиабилетные кассы
Вот в одной кассе продали билет на такой то рейс, на такое то место, вот нужно чтобы во всех остальных кассах было видно что этот билет уже продан! Что им каждую секунду жать кнопочку рефреш??? а если база огромная ?? и запрос выполняется не доли секунд
Ega23 (2004-04-28 10:37:00) [31]Но правильнее, ИМХО - одна большая кнопка с надписью "Обновить набор данных". 8-)
Совершенно верно. У меня везде так и сделано. Но товарищ хотел "автоматическое" обновление. :о)
Sergey13 (2004-04-28 10:29:00) [32]2Ega23 © (28.04.04 10:21) [5]
Но правильнее, ИМХО - одна большая кнопка с надписью "Обновить набор данных". 8-)
Не могу понять я таких требований в программе (а такие вопросы часто попадаются). В результате то что? Что бы как в кине про Матрицу - сидит чел, а на экране постоянно бегут/изменяются колонки цифр? А он сидит, смотрит на них и думу думает.
Ega23 (2004-04-28 10:21:00) [33]Рефреш запроса по таймеру на клиенте делай. Или пингуй сервер на предмет изменений.
Reindeer Moss Eater (2004-04-28 10:12:00) [34]Лучше пусть расшифрует слово "видны"
Sergey13 (2004-04-28 10:11:00) [35]2Volodya_ (28.04.04 10:03)
>измененения сразу было видно
Расшифруй слово "сразу". Т.е. даже если "другой" юзер в отпуске, ему на мобилу шли СМС-ки из базы?
Reindeer Moss Eater (2004-04-28 10:05:00) [36]А они что ли не видны?
Уровень изоляции транзакций смени с репитабл рид на любой другой
Johnmen (2004-04-28 10:05:00) [37]А зачем СРАЗУ и ВСЕМ ?