Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Синхронизация клиенского приложения с БД.  (Прочитано 21589 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Вахмурка
Помогающий

ru
Offline Offline
Пол: Мужской
Программист


WWW
« : 19-11-2008 17:42 » 

  Вопрос такой:"Есть многопользовательское приложение с сервером БД, как добиться того, что бы изменения в БД сделанные одним пользователем былы стразу(или почти сразу) видимы в клиентских приложениях другим пользователям?" Одним зи вариантов я как полагаю може быть промоежуточный програмный слой на сервере с БД, который и будет заниматься этим.

 А можно ли это сделать средствами самой БД, какие вообще есть приёмы? Есть ещё вариант не обращать на это внимания, обновлять данные на пример когда пользователь выбрал вкладку с таблицей в отдельом потоке(этот вариант уже испробован) и вслучае невозможности провесть транзакцию из-за устаревших данных, просто выводить сообщение об ошибке и предложить пользователю повторить попытку. Заранее благодарен.
Записан

Программа – это мысли спрессованные в код.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 19-11-2008 18:30 » 

Можно. Например, сделать табличку, которую клиенты будут периодически опрашивать на предмет изменения какой-нибудь строки. Например такую: CREATE TABLE (name VARCHAR(16), version INT). Соотв., если значение изменилось, то надо обновлять данные.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Вахмурка
Помогающий

ru
Offline Offline
Пол: Мужской
Программист


WWW
« Ответ #2 : 19-11-2008 18:38 » 

Можно. Например, сделать табличку, которую клиенты будут периодически опрашивать на предмет изменения какой-нибудь строки. Например такую: CREATE TABLE (name VARCHAR(16), version INT). Соотв., если значение изменилось, то надо обновлять данные.

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

Программа – это мысли спрессованные в код.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 19-11-2008 18:42 » 

Вахмурка, пусть сервер через соединение с клиентом кидает извещение
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 19-11-2008 18:42 » 

Нагрузка это незначительная.

Иначе - создать некий сервер, к которому будут подключены все клиенты. Один клиент посылает сообщение на сервер, а сервер рассылает его всем остальным.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 19-11-2008 18:49 » 

Как вариант: сервер прикладного уровня, с которым все клиенты и СУБД общаются путём посылки сообщений. Сообщение, посланное одним клиентом, рассылается остальным клиентам и СУБД - каждый его обрабатывает, как хочет. СУБД производит обновление данных, остальные клиенты проверяют, относится ли это к их локальным копиям данных, и если относится, то тоже обновляют.

Такое решение будет в духе ныне модной архитектуры SOA Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Вахмурка
Помогающий

ru
Offline Offline
Пол: Мужской
Программист


WWW
« Ответ #6 : 19-11-2008 19:08 » 

 Вариант с сервером прикладного уровня в полне подойдёт, только нужно сделать что бы сервер посылал сообщение сначала в БД, а потом случае удачи всем остальным, иначе в случае аварийного отката транзакции, у клиентов будут неправильные данные. Хорошо, все спасибо.
« Последнее редактирование: 19-11-2008 19:11 от Вахмурка » Записан

Программа – это мысли спрессованные в код.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #7 : 19-11-2008 19:16 » 

1. Нагрузка на сервер БД будет минимальной.
2. Экономить на тратифке между сервером БД и клиентами это бред.
3. Не выдумывайте ерунды, почитайте как строятся системы с использованием серверов БД.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Вахмурка
Помогающий

ru
Offline Offline
Пол: Мужской
Программист


WWW
« Ответ #8 : 19-11-2008 19:30 » 

1. Нагрузка на сервер БД будет минимальной.
2. Экономить на тратифке между сервером БД и клиентами это бред.
3. Не выдумывайте ерунды, почитайте как строятся системы с использованием серверов БД.

Выходит я зря парюсь. Литература есть, только там этот вопрос подробно не затронут. (покрайней мере в той что есть у меня)
Записан

Программа – это мысли спрессованные в код.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #9 : 19-11-2008 19:31 » 

Вахмурка, да зря, бред писать прослойки, для создания нормальной системы.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 19-11-2008 19:41 » 

Цитата: McZim
2. Экономить на тратифке между сервером БД и клиентами это бред.
С чего вдруг такая категоричность в условиях неизвестности требований.

Цитата: McZim
3. Не выдумывайте ерунды, почитайте как строятся системы с использованием серверов БД.
То, что называется "архитектура клиент-сервер", было модно в 90-х годах, а сегодня модно SOA Ага

Решение, конечно, должно выбираться не по моде, но чтобы называть ерундой технологический mainstream, продвигаемый IBM, Microsoft и другими, нужно иметь веские аргументы. Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 19-11-2008 19:41 » 



технология ajax'a

Нагрузка невелика, траф невелик. Клиентская часть - невелика.

Вахмурка, посредством СУБД? но клиент как-то должен получить информацию об измене?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 19-11-2008 19:44 » 

SOA дает снижение производительности и увеличивает трудоемкость создания и поддержки системы по сравнению с прямой работой с БД. Плюс - исключается прямая работа клиента с БД.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 19-11-2008 19:44 » 

Цитата: McZim
бред писать прослойки, для создания нормальной системы.
Сие общее утверждение лишь свидетельствует о твоём непонимании проблем, возникающих в крупных системах.

Хотя в обсуждаемом конкретном случае, охотно допускаю, что, возможно, огород городить излишне.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 19-11-2008 19:46 » 

самая простейшая синхронизация - IRC сети
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 19-11-2008 19:47 » 

Цитата: RXL
SOA дает снижение производительности и увеличивает трудоемкость создания и поддержки системы по сравнению с прямой работой с БД.
Насчёт трудоёмкости... Такие средства, как, например, WCF.NET, как раз и призваны снизить трудоёмкость за счёт реализации всей инфраструктуры: транспорт, хранение, маршрутизация, приоритеты и т.п. Так что положение улучшается.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #16 : 19-11-2008 19:51 » 

Цитата
Сие общее утверждение лишь свидетельствует о твоём непонимании проблем, возникающих в крупных системах.

гы Улыбаюсь

Цитата
Хотя в обсуждаемом конкретном случае, охотно допускаю, что, возможно, огород городить излишне.

именно!
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 19-11-2008 20:17 » 

Цитата
Вопрос такой:"Есть многопользовательское приложение с сервером БД, как добиться того, что бы изменения в БД сделанные одним пользователем былы стразу(или почти сразу) видимы в клиентских приложениях другим пользователям?"
С трудом представляю ситуацию, когда это необходимо, разве, что редакция справочников. Улыбаюсь
Вопрос стоит - "можно-ли реализовать ЭТО средствами БД" т.е. не тонким клиентом и не сервером БД, а именно средствами БД? Я правильно понял? То есть посредствам триггеров или встроенных процедур?


 
Записан

С уважением, Oldy.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 19-11-2008 20:24 » 

Oldy, я думаю, что подразумевается средствами СУБД, возможно с каким-нибудь собственным обвесом.
даже, не берусь утверждать, это можно реализовать на уровне встроенных процедур (вызов со стороны клиента, переход в ожидание)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 19-11-2008 20:31 » 

Возможен вызов UDF из внешней библиотеки, способной отправить сообщение системе. Некоторые СУБД сами поддерживают такую возможность (отправку сообщений в ОС), как из триггеров так и при подтверждении или откате транзакции.
« Последнее редактирование: 19-11-2008 20:33 от Oldy » Записан

С уважением, Oldy.
Вахмурка
Помогающий

ru
Offline Offline
Пол: Мужской
Программист


WWW
« Ответ #20 : 20-11-2008 07:42 » 

Возможен вызов UDF из внешней библиотеки, способной отправить сообщение системе. Некоторые СУБД сами поддерживают такую возможность (отправку сообщений в ОС), как из триггеров так и при подтверждении или откате транзакции.

В принципе меня интересует больше именно этот вариант. Отправлять сообщения клиенту об изменениях средствами самой БД.
Записан

Программа – это мысли спрессованные в код.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 20-11-2008 09:02 » 

Вахмурка, средствами _только_ БД клиента оповестить не удастся (если какая-либо СУБД имеет такую возможность, то это исключение, а не правило). Речь о том, что используя некий сервер приложений (к которому подключены все клиенты), можно через внешнюю процедуру послать через этот сервер сигнал клиентам.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 21-11-2008 16:07 » new

Вахмурка, посмотри статью, вдруг поможет чем-либо: http://www.ibase.ru/devinfo/clientrefresh.htm
Записан

С уважением, Oldy.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines