Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
30 / 30 / 11
Регистрация: 15.07.2013
Сообщений: 72
1

Обновление данных из базы данных в клиентах в реальном времени

06.08.2014, 18:58. Просмотров 3166. Ответов 3
Метки нет (Все метки)


Здравствуйте, уважаемые коллеги!
Как сделать то, что описано в теме?

Расскажу с самого начала откуда пошла такая задача.
Есть в нашей организации одна клиент серверная программа, серверная часть на MS SQL Server 2008, а клиентская на C++ MFC написанная еще в 2007 году.
А программисты писавшие ее, давным давно уволились и исходники нам не оставили.
Теперь начальство просит переписать данный продукт с нуля на C#, но прежде чем начать переписывать я хотел бы выяснить один важный вопрос, связанный с обновлением данных в клиентах.

Сейчас клиенты работают с несколькими таблицами, основная из которых 18 млн. записей.
На клиентах стоит автообновление данных в датагриде каждые 1.5 минуты, на нескольких клиентах каждые 60 сек., всего 30 клиентов.
Последние пол года программа стала работать все медленнее и медленнее, хотя сеть 1 гигабит.
По мере увеличения клиентов тормоза стали просто невозможными, и сервер с СУБД периодически приходится перезагружать, хотя там стоит 32 гигабайта оперативки.

Я думал увеличить таймер до 5 минут на клиентах, а в СУБД на триггер при вставке новых данных вызывать внешнюю хранимку, которая отправляла бы клиенту по TCP/IP сообщение о том что появилась новая запись, такие записи нужны не всем, а только помеченным бизнес объектам.

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

Какие будут идеи?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2014, 18:58
Ответы с готовыми решениями:

Обновление данных в реальном времени
Здраввствуйте. Нужно в реальном времени некоторые данные на странице обновлять, модель которых...

Обновление данных в реальном времени
Доброго времени суток Дорогие Форумчане. Имеется GUI программка. Запускается на двух компьютерах....

Обновление datagridview - актуализация с источником данных в реальном времени
Много пересмотрел в интернете и тем на этом форуме,но так и не разобрался. В приложении есть...

Обновление StringGrid из базы в реальном времени
есть файл file.dat в нем содержатся данные, потом эти данные выводятся в StringGreed циклом, как...

3
815 / 715 / 423
Регистрация: 09.04.2014
Сообщений: 1,714
07.08.2014, 12:33 2
Цитата Сообщение от Lootero4eg Посмотреть сообщение
Возможно проблема в том, что таблица слишком большая
Возможно что стоит добавить в таблицы индексы, которые бы покрывали наиболее используемые выборки
Цитата Сообщение от Lootero4eg Посмотреть сообщение
Я думал увеличить таймер до 5 минут на клиентах, а в СУБД на триггер при вставке новых данных вызывать внешнюю хранимку, которая отправляла бы клиенту по TCP/IP сообщение о том что появилась новая запись, такие записи нужны не всем, а только помеченным бизнес объектам.
Тут вам стоит посмотреть в сторону SqlDependency (и еще пример)
0
1054 / 861 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
07.08.2014, 15:37 3
Цитата Сообщение от nedel Посмотреть сообщение
которая отправляла бы клиенту по TCP/IP сообщение о том что появилась новая запись
как было сказано, это SqlDependency. еще пару ссылок
Mssql - как асинхронно узнать о добавлении или удалении записи
SqlDependency - получение уведомления от MSSQL-сервера об изменении данных
Но оно имеет тысячи ограничений и сложности в настройке. лично я потихоньку пилю свою службу:
клиент при обновлении оставляет на службе на сервере сообщение об обновлении данных.
служба в свою очередь рассылает оповещение всем активным программам - и они обновляют именно измененные данные

но в моем случае необходим был мессенджер между юзерами и я его доработал до мессенджера для собственно клиентов
1
310 / 113 / 19
Регистрация: 29.06.2019
Сообщений: 1,157
14.01.2021, 07:32 4
на C# ведь делегата можно создать для этих целей... имхо... не понимаю, чем мессенджер лучше?

Добавлено через 5 минут
Цитата Сообщение от Lootero4eg Посмотреть сообщение
Сейчас клиенты работают с несколькими таблицами, основная из которых 18 млн. записей.
ну вы же не вытягиваете эти миллионы в GUI?.. всё равно ведь работаете с частями- часть, которая помещается на экран, при правильном дизайне бд не должна давать большие тормоза... индексы в помощь - по совету #2... или количество ядер увеличивайте для сервера, не оперативку... имхо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2021, 07:32

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

Обновление базы данных по времени
Привет форумчане. Подскажите какие есть возможности обновления БД в определенное время суток???

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

Сортировка данных в реальном времени
Всем привет собственно вопрос. Я осуществляю поиск файла по имени из текущей директории. Файлов...

передача данных в реальном времени из
Есть бд на mysql с таблицами (около 20 таблиц) необходимо: 1. из первых 10 таблиц отображать...

Вывод данных в реальном времени
Здравствуйте. Подскажите как мне реализовать мою задумку. Хочу сделать динамический вывод...

Чтение данных с COM порта в реальном времени
Как осуществить данную задачу при нажатии на кнопку?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.