Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« : 19-11-2008 17:42 » |
|
Вопрос такой:"Есть многопользовательское приложение с сервером БД, как добиться того, что бы изменения в БД сделанные одним пользователем былы стразу(или почти сразу) видимы в клиентских приложениях другим пользователям?" Одним зи вариантов я как полагаю може быть промоежуточный програмный слой на сервере с БД, который и будет заниматься этим.
А можно ли это сделать средствами самой БД, какие вообще есть приёмы? Есть ещё вариант не обращать на это внимания, обновлять данные на пример когда пользователь выбрал вкладку с таблицей в отдельом потоке(этот вариант уже испробован) и вслучае невозможности провесть транзакцию из-за устаревших данных, просто выводить сообщение об ошибке и предложить пользователю повторить попытку. Заранее благодарен.
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
RXL
|
|
« Ответ #1 : 19-11-2008 18:30 » |
|
Можно. Например, сделать табличку, которую клиенты будут периодически опрашивать на предмет изменения какой-нибудь строки. Например такую: CREATE TABLE (name VARCHAR(16), version INT). Соотв., если значение изменилось, то надо обновлять данные.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #2 : 19-11-2008 18:38 » |
|
Можно. Например, сделать табличку, которую клиенты будут периодически опрашивать на предмет изменения какой-нибудь строки. Например такую: CREATE TABLE (name VARCHAR(16), version INT). Соотв., если значение изменилось, то надо обновлять данные.
Спасибо, идея ясна, но в том то и дело, что хотелось бы не юзать сервер постоянными проверками на предмет изменений, ведь это может хоть и не большая но нагрузка на сервер + сетевой трафик, а хотелось бы что бы запросы происходили только при необходимости.
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 19-11-2008 18:42 » |
|
Вахмурка, пусть сервер через соединение с клиентом кидает извещение
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #4 : 19-11-2008 18:42 » |
|
Нагрузка это незначительная.
Иначе - создать некий сервер, к которому будут подключены все клиенты. Один клиент посылает сообщение на сервер, а сервер рассылает его всем остальным.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #5 : 19-11-2008 18:49 » |
|
Как вариант: сервер прикладного уровня, с которым все клиенты и СУБД общаются путём посылки сообщений. Сообщение, посланное одним клиентом, рассылается остальным клиентам и СУБД - каждый его обрабатывает, как хочет. СУБД производит обновление данных, остальные клиенты проверяют, относится ли это к их локальным копиям данных, и если относится, то тоже обновляют. Такое решение будет в духе ныне модной архитектуры SOA
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #6 : 19-11-2008 19:08 » |
|
Вариант с сервером прикладного уровня в полне подойдёт, только нужно сделать что бы сервер посылал сообщение сначала в БД, а потом случае удачи всем остальным, иначе в случае аварийного отката транзакции, у клиентов будут неправильные данные. Хорошо, все спасибо.
|
|
« Последнее редактирование: 19-11-2008 19:11 от Вахмурка »
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
McZim
|
|
« Ответ #7 : 19-11-2008 19:16 » |
|
1. Нагрузка на сервер БД будет минимальной. 2. Экономить на тратифке между сервером БД и клиентами это бред. 3. Не выдумывайте ерунды, почитайте как строятся системы с использованием серверов БД.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #8 : 19-11-2008 19:30 » |
|
1. Нагрузка на сервер БД будет минимальной. 2. Экономить на тратифке между сервером БД и клиентами это бред. 3. Не выдумывайте ерунды, почитайте как строятся системы с использованием серверов БД.
Выходит я зря парюсь. Литература есть, только там этот вопрос подробно не затронут. (покрайней мере в той что есть у меня)
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
McZim
|
|
« Ответ #9 : 19-11-2008 19:31 » |
|
Вахмурка, да зря, бред писать прослойки, для создания нормальной системы.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #10 : 19-11-2008 19:41 » |
|
2. Экономить на тратифке между сервером БД и клиентами это бред. С чего вдруг такая категоричность в условиях неизвестности требований. 3. Не выдумывайте ерунды, почитайте как строятся системы с использованием серверов БД. То, что называется "архитектура клиент-сервер", было модно в 90-х годах, а сегодня модно SOA Решение, конечно, должно выбираться не по моде, но чтобы называть ерундой технологический mainstream, продвигаемый IBM, Microsoft и другими, нужно иметь веские аргументы.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sla
|
|
« Ответ #11 : 19-11-2008 19:41 » |
|
технология ajax'a
Нагрузка невелика, траф невелик. Клиентская часть - невелика.
Вахмурка, посредством СУБД? но клиент как-то должен получить информацию об измене?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
|
|
« Ответ #12 : 19-11-2008 19:44 » |
|
SOA дает снижение производительности и увеличивает трудоемкость создания и поддержки системы по сравнению с прямой работой с БД. Плюс - исключается прямая работа клиента с БД.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #13 : 19-11-2008 19:44 » |
|
бред писать прослойки, для создания нормальной системы. Сие общее утверждение лишь свидетельствует о твоём непонимании проблем, возникающих в крупных системах. Хотя в обсуждаемом конкретном случае, охотно допускаю, что, возможно, огород городить излишне.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sla
|
|
« Ответ #14 : 19-11-2008 19:46 » |
|
самая простейшая синхронизация - IRC сети
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #15 : 19-11-2008 19:47 » |
|
SOA дает снижение производительности и увеличивает трудоемкость создания и поддержки системы по сравнению с прямой работой с БД. Насчёт трудоёмкости... Такие средства, как, например, WCF.NET, как раз и призваны снизить трудоёмкость за счёт реализации всей инфраструктуры: транспорт, хранение, маршрутизация, приоритеты и т.п. Так что положение улучшается.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
McZim
|
|
« Ответ #16 : 19-11-2008 19:51 » |
|
Сие общее утверждение лишь свидетельствует о твоём непонимании проблем, возникающих в крупных системах.
гы Хотя в обсуждаемом конкретном случае, охотно допускаю, что, возможно, огород городить излишне.
именно!
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Oldy
|
|
« Ответ #17 : 19-11-2008 20:17 » |
|
Вопрос такой:"Есть многопользовательское приложение с сервером БД, как добиться того, что бы изменения в БД сделанные одним пользователем былы стразу(или почти сразу) видимы в клиентских приложениях другим пользователям?" С трудом представляю ситуацию, когда это необходимо, разве, что редакция справочников. Вопрос стоит - "можно-ли реализовать ЭТО средствами БД" т.е. не тонким клиентом и не сервером БД, а именно средствами БД? Я правильно понял? То есть посредствам триггеров или встроенных процедур?
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Sla
|
|
« Ответ #18 : 19-11-2008 20:24 » |
|
Oldy, я думаю, что подразумевается средствами СУБД, возможно с каким-нибудь собственным обвесом. даже, не берусь утверждать, это можно реализовать на уровне встроенных процедур (вызов со стороны клиента, переход в ожидание)
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Oldy
|
|
« Ответ #19 : 19-11-2008 20:31 » |
|
Возможен вызов UDF из внешней библиотеки, способной отправить сообщение системе. Некоторые СУБД сами поддерживают такую возможность (отправку сообщений в ОС), как из триггеров так и при подтверждении или откате транзакции.
|
|
« Последнее редактирование: 19-11-2008 20:33 от Oldy »
|
Записан
|
С уважением, Oldy.
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #20 : 20-11-2008 07:42 » |
|
Возможен вызов UDF из внешней библиотеки, способной отправить сообщение системе. Некоторые СУБД сами поддерживают такую возможность (отправку сообщений в ОС), как из триггеров так и при подтверждении или откате транзакции.
В принципе меня интересует больше именно этот вариант. Отправлять сообщения клиенту об изменениях средствами самой БД.
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
RXL
|
|
« Ответ #21 : 20-11-2008 09:02 » |
|
Вахмурка, средствами _только_ БД клиента оповестить не удастся (если какая-либо СУБД имеет такую возможность, то это исключение, а не правило). Речь о том, что используя некий сервер приложений (к которому подключены все клиенты), можно через внешнюю процедуру послать через этот сервер сигнал клиентам.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|
|