Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Обновление набора записей

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Mike



Зарегистрирован: 17.11.2001
Сообщения: 339
Откуда: ekb

СообщениеДобавлено: Вт Авг 24 2004 12:39    Заголовок сообщения: Обновление набора записей Ответить с цитатой

Как обновить только изменившиеся записи на клиенте ? Записей в талице несколько тысяч, если каждый раз грузить их все, то как-то медленновато получается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andy-C



Зарегистрирован: 09.12.2003
Сообщения: 73
Откуда: Нальчик

СообщениеДобавлено: Чт Авг 26 2004 10:07    Заголовок сообщения: Re: Обновление набора записей Ответить с цитатой

Лобовое решение.
Хорошо бы знать на чём всё закручивается, но общее решение...
Завести поле номер версии записи.
Прога берёт из генератора ( зависит от реализации), проставляет этот номер у записей которые меняет.
Уведомляет всех (зависит от реализации) об изменениях.
Все остальные смотрят max код весрии своих данных, если в БД есть код больше, значит данные устарели. Выкачиваются данные с кодом версии больше текущей.

Или я не правильно понял задачу Sad
А вообще, зачем на клиента тащить столько записей?
Вероятно, весьма не кашерно.
_________________
До onlina Andrew C.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike



Зарегистрирован: 17.11.2001
Сообщения: 339
Откуда: ekb

СообщениеДобавлено: Чт Авг 26 2004 14:02    Заголовок сообщения: Ответить с цитатой

Interbase 7.1
C++Builder 5.0

На клиента бывает необходимо тащить такую кучу записей, потому что например, им надо выбирать заказчика из списка ... или что-нибудь еще подобное. Понятно, что загрузив однажды этот список я могу уже на клиенте выбирать из него. Но если хотя бы одна запись в базе поменялась, то приходится обновлять весь список. Идея с номером версии записи мне понравилась, попробую, хотя мне кажется в таком случае будут тормоза с обновлением индекса по этому номеру версии. А без индекса тормоза будут при выборке обновленных записей....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andy-C



Зарегистрирован: 09.12.2003
Сообщения: 73
Откуда: Нальчик

СообщениеДобавлено: Чт Авг 26 2004 14:28    Заголовок сообщения: Ответить с цитатой

Тормоза будут всяко.
Ежели брать время с сервака (ну синхронизировать клиентов) можно вместь номера хранить датувремя. Это должно улучшить селективность индекса.
Надо поэкспериментировать, т.к. (допустим) список товаров меняется редко, список клиентов чаще и т.п.

У такого метода есть одни огромнейшие грабли: удаление записей.
Обойти только таблицей # удалённых записей, но кто её будет поддерживать????
С учётом клиентов оффлайн Sad

Если удаление происходит редко и в одном месте (админ).
Завести event на удалёние и считать, что вся таблица у клиента устарела.
Пусть тянет всю.
Точно так же и с офф клиентами, при запуске считать таблицу невалидной.

Вот и тормоза.

ЗЫ на ibase.ru была статья одного буржуя. У него сумашедший дом, биллинговая система с кучей серваков, клиентов и ботов (IBots;)
Он всё это умудряется синхронизировать.
Но всё довольно наворочено Wink
Может поправит...
_________________
До onlina Andrew C.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike



Зарегистрирован: 17.11.2001
Сообщения: 339
Откуда: ekb

СообщениеДобавлено: Чт Авг 26 2004 14:45    Заголовок сообщения: Ответить с цитатой

Удалений не планируется, по крайней мере в режиме реального времени их отслеживать не надо. При очередном запуске клиентской программы она все равно затянет актуальную информацию. Отслеживать в основном надо только добавление записей. Насколько я понимаю, с использованием поля для хранения времени изменения (или добавления) записи такая проблема снимается. Т.е. клиент должен загружать только записи со значением этого поля больше определенного. Только вот как уведомить клиента, что надо обновить набор записей ? Использовать эвэнты не получилось по непонятной причине - они срабатывают всегда, с периодичностью порядка полсекунды. Что тут за грабли - пока не понял.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Andy-C



Зарегистрирован: 09.12.2003
Сообщения: 73
Откуда: Нальчик

СообщениеДобавлено: Чт Авг 26 2004 15:05    Заголовок сообщения: Ответить с цитатой

На евенты все плюются Wink

По идее, они должны срабатывать во время комита транзакции.
Клиент получает евент и цифирьку, сколько раз тот сработал.

Лобовое решиение: переодически тянуть max(дата) , когда это актуально.
Вопрос периодичности.
Если есть индекс вниз это не дорого.
Вдруг сервак будет тупить: select first 1 дата from table order by дата desc

Можно пытаться городить "в рукопашную", допустим, через UDF .....
А там сдерживает только фантазия Wink

Главный критерий: А ОНО ТОГО СТОИТ?
_________________
До onlina Andrew C.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Чт Авг 26 2004 15:20    Заголовок сообщения: Ответить с цитатой

а нельзя сделать такую штуку:
создаётся таблица и все добавления и удаления заносятся в неё, клиент проверяет её постоянно, с интервалом к примеру 2 минуты, и проверяет что изменилось, и изменения закачивает или удаляет из своего набора. Раз в час к примеру таблица на сервере очищается, и набор из этой базы на клиенте тоже очищается.

Вариант конечно по принципу зачем делать просто когда легче усложнить, но всё таки. Rolling Eyes
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andy-C



Зарегистрирован: 09.12.2003
Сообщения: 73
Откуда: Нальчик

СообщениеДобавлено: Чт Авг 26 2004 15:35    Заголовок сообщения: Ответить с цитатой

Клиентов всё равно придётся синхронизировать Sad
Кто когда что и откуда подчитывает

Проще читать max(дата) и сравнивать со своей.

Надо экспериментировать....
_________________
До onlina Andrew C.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike



Зарегистрирован: 17.11.2001
Сообщения: 339
Откуда: ekb

СообщениеДобавлено: Чт Авг 26 2004 17:22    Заголовок сообщения: Ответить с цитатой

К тому же эта таблица синхронизации вырастет, недолго этого ждать. Такой вариант я отбросил уже давно
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mike



Зарегистрирован: 17.11.2001
Сообщения: 339
Откуда: ekb

СообщениеДобавлено: Пт Окт 15 2004 11:58    Заголовок сообщения: Ответить с цитатой

Если кому-то интересно ...

Вобщем, добавил в таблицы по 2 поля:
FDEL - признак, что удалена запись,
FCHANGECNT - счетчик изменений, каждый раз берется из генератора.
качаю с сервера только те записи, у которых FCHANGECNT>LastChangeCnt, если надо удалить запись - ставлю FDEL=1 и опять же обновляю FCHANGECNT

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

все работает быстро и красиво
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...