powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Синхронизация данных
17 сообщений из 42, страница 2 из 2
Синхронизация данных
    #36616414
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выбирай, или интерфейс менять, или более старшая БД или оптимизировать кодом до упаду.
Удачи!
...
Рейтинг: 0 / 0
Синхронизация данных
    #36616433
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати,
psqldeveloper грузит дерево за 1 сек.
А обычная табла в 5 000 записей в сети грузится за 3-5 сек.
Так что страхи твои сильно преувеличены (это тебе не вэб)
...
Рейтинг: 0 / 0
Синхронизация данных
    #36617652
_no_test_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выбирай, или интерфейс менять
Не очень хороший вариант. Сам по себе, такой интерфейс удобный, в данном случае.

более старшая БД
100 % - не вариант, поскольку тогда надо:
1.) Перегонять БД в другую СУБД (а там немало данных, потому и был выбран MySQL – он использовался в старом пакете, работа с пользователями, транзакции, ограничения по внешним ключам и прочие СУБД специфичные вещи).
2.) Переписывать и проверять серверную часть. Поскольку, хранимый код, всё-таки, специфичен.
3.) Немного переписывать клиента.
4.) Изучать новую СУБД.
5.) И т.д.

или оптимизировать кодом до упаду.
Остаётся только это.

А обычная табла в 5 000 записей в сети грузится за 3-5 сек.
С другой стороны, возможен «гибридный» вариант.
Т.е., при изменении справочников полностью их перезаполнять. А изменения отслеживать по триггеру и хранить в отдельной таблице. Т.е., клиентский код упрощается. А, поскольку справочники изменяются редко, обновления также будут очень редкими.
Короче, - обычное кэширование.
К большому сожалению с деревом и вкладкой, которая на скриншоте, проблема не решается. :-(

Вопрос что делать с ними?

Так что страхи твои сильно преувеличены (это тебе не вэб)
Это не «страхи», а стремление сделать по-человечески...
...
Рейтинг: 0 / 0
Синхронизация данных
    #36617708
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_no_test_,
кто мешает показывать правую сторону экрана только:
- первый раз при открытии формы вкладка 0
- при клике на листе дерева
- при клике на вкладке
?
Зачем тебе кэш?
...
Рейтинг: 0 / 0
Синхронизация данных
    #36618189
_no_test_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кто мешает показывать правую сторону экрана только:
Так и показывается.

- первый раз при открытии формы вкладка 0
Ну да, только на вкладке 0 тоже есть списки.
Даже, например, список "Класс бонус-малус" на вкладке 1. Если какой-то класс был удалён администратором, нужно перезаполнить список.

Зачем тебе кэш?
Я имею ввиду, кэш, не как отдельную сущность, а как "нормальное состояние".
Т.е., например, "Класс бонус-малус" кэшируется в списке. Список просто не обновляется.
Зачем его обновлять?
Ведь, практически классы уже несколько лет не меняются (разве что, коэффициенты).
Но, теоретически администратор может изменить этот справочник, используя клиент.

Плюс, на вкладке 1, должен обновиться водитель в списке водителей, данные страхователя, данные владельца, при каком-либо их изменении.

Сейчас подумал.

Решил сделать нечто вроде такого:
1.) Сервер.
Триггеры (AFTER) пишут в таблицу обновлений данные.
Имя таблицы.
Ключ записи. Если составной, то разделяется, к примеру, символом ';'.
Время обновления.
Действие или его код: update, insert, delete.

Планировщик (или триггеры, пока не решил) удаляет все записи таблицы после опр. времени (больше времени обновления клиента).

2.) Клиент.
Имеется объект "Диспетчер обновлений".
Данный объект реализует:
а.) Автоматическую загрузку таблицы обновлений.
б.) Хранение времени последнего обновления таблиц.
в.) Разбор ключа.
г.) Сравнение времени обновления коллекции сущностей или списка записей с таблицей.
д.) Генерацию событий, оповещающих об обновлении.

Интерфейс подписан на события диспетчера и реализует обновления "отображения".
Коллекции объектов хранят время последнего обновления.

Не знаю, пока что, как будут управляться коллекции. Либо "через интерфейс", либо "напрямую" из диспетчера.

Что скажете, стоит подобное делать?
...
Рейтинг: 0 / 0
Синхронизация данных
    #36618316
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_no_test_,
у меня п.1 (аудит) так и сделан.

П.2 решает заказчик, т.к. на 20-30 % удорожает систему.

Есть ещё вариант оповещения если у тебя полный ООП на клиенте:
- на F5 вешаешь Обновить ВСЮ форму с окнами
- на create вкладка\сущность\панелька подписывается на флаг изменения у менеджера
- по приходу события добавляет звёздочку в Caption = "Транспортное средство*"
- пользователь видит звёзды, если не пьёт кофе
- по желанию нажмёт F5


ЗЫ. я так понял, что у тебя система перестраивается на ходу админом?
Это тоже просил заказчик? Или твоя фича?
(я бы взял это на доработку\версии)
...
Рейтинг: 0 / 0
Синхронизация данных
    #36618823
_no_test_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П.2 решает заказчик, т.к. на 20-30 % удорожает систему.

Сколько?!

Есть ещё вариант оповещения если у тебя полный ООП на клиенте
Не полный, но сделать такое не сложно.

ЗЫ. я так понял, что у тебя система перестраивается на ходу админом?
Это тоже просил заказчик? Или твоя фича?
(я бы взял это на доработку\версии)
Моя фича.
Изначально нужно было сделать не столь много: базовую функциональность (БД, печать бланков), напоминания и ограничения.
Плюс, оставить данные БД из предыдущего клиента.
Так вышло, что программа, как раз подошла на диплом.
Т.е. я делаю без ТЗ и договора, и постепенно на меня пытаются навесить:
"А вот бы ещё сделать печать заявлений, а неплохо бы,
чтобы администратор в конце дня одобрял или не одобрял изменения, но это не обязательно,
неплохо бы сделать сводную статистику по договорам."

О цене я предварительно не договаривался. Спросил людей, сказали, что в районе 50 т.р.
Видимо, заказчик на эту цену и рассчитывает...
...
Рейтинг: 0 / 0
Синхронизация данных
    #36625746
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я б так сделал:

Сервер БД
1. Создаётся в базе табличка "Свежесть справочников" "Справочник"-"Время последнего обновления"
2. В базе создаётся табличка "Грохнутые элементы" "Справочник"-"ID_удалённого_элемента"-"Время удаления"

В каждом справочнике добавляется столбец x_datetime, индексируется и навешиваются однитипные триггеры на справочники:
- на вставку/обновление обновляет x_datetime
- на удаление: добавляет строку в "Грохнутые элементы"
в обоих триггерах обновляется "Свежесть справочников"
---

Клиент
1. Открываем справочник "A" и перегоняем его в InMemory-Dataset, локальный индекс которого построен по первичному ключу.
2. Запрашиваем из таблицы "Свежесть справочников" дату обновления справочника "А" (или всех сразу с сохранением в памяти).

Работа с этим мясом на стороне клиента
При каждом обращении к справочнику "А" (открытие формы, нажатие на кнопку и пр.):
1. Делаем запрос к табличке "Свежесть справочников" и получаем дату последнего обновления "А" на сервере. При достаточной частоте этих запросов табличка помещается в горячий кэш сервера и живёт фактически в памяти, время отклика здесь не критично, 99% операций - чтение.
2. Сравниваем полученную с сервера дату с той датой, которую мы сохранили по этому справочнику, когда его открывали.
3. Если даты совпадают, то справочники не обновлялись, можно использовать существующие данные в InMemoryDatasete.
4. Если даты не совпадают, то справочники обновлялись, делаем следующее:
- запрос select * from A where x_datetime > "Локальная дата обновления". Мы получим ТОЛЬКО новые и обновлённые записи. Их можно обработать локально по-разному, если закэшировать максимальный числовой идентификатор справочника, то можно чётко разделить, что добавлялось, а что обновлялось, новые записи добавляем в InMemoryDataset, обновлённые ищем локально по первичному ключу (локальному индексу) и обновляем.
- запрос select * from "Грохнутые элементы" where "Справочник" = "A" and "Время удаления" > "Локальная дата обновления". В результате получим удалённые элементы ТОЛЬКО с момента последнего обновления справочников. Ищем их по индексу в InMemoryDS и удаляем.
Последний штришок: сохраняем в локальную дату обновления справочника А дату, полученную на первом шаге.

Если будете использовать эту технологию, советую оперативную таблицу с датами обновления помещать на стороне MySQL в табличный кэш на движке MemoryTable. На стороне клиента под это дело лучше использовать хэш-таблицу, т.к. это наиболее часто используемый функционал.

Вот как-то так. В нюансы не вдавался по поводу возможности разрознения дат и пр., я попытался основу и суть технологии передать.
...
Рейтинг: 0 / 0
Синхронизация данных
    #36625768
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подобная техника используется компонентами SDAC при обновлении результатов запроса (метод QuickRefresh) при соблюдении определённых правил на сервере...
...
Рейтинг: 0 / 0
Синхронизация данных
    #36625784
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_no_test_кто мешает показывать правую сторону экрана только:
Так и показывается.

- первый раз при открытии формы вкладка 0
Ну да, только на вкладке 0 тоже есть списки.
Даже, например, список "Класс бонус-малус" на вкладке 1. Если какой-то класс был удалён администратором, нужно перезаполнить список.

Зачем тебе кэш?
Я имею ввиду, кэш, не как отдельную сущность, а как "нормальное состояние".
Т.е., например, "Класс бонус-малус" кэшируется в списке. Список просто не обновляется.
Зачем его обновлять?
Ведь, практически классы уже несколько лет не меняются (разве что, коэффициенты).
Но, теоретически администратор может изменить этот справочник, используя клиент.

Плюс, на вкладке 1, должен обновиться водитель в списке водителей, данные страхователя, данные владельца, при каком-либо их изменении.

Сейчас подумал.

Решил сделать нечто вроде такого:
1.) Сервер.
Триггеры (AFTER) пишут в таблицу обновлений данные.
Имя таблицы.
Ключ записи. Если составной, то разделяется, к примеру, символом ';'.
Время обновления.
Действие или его код: update, insert, delete.

Планировщик (или триггеры, пока не решил) удаляет все записи таблицы после опр. времени (больше времени обновления клиента).

2.) Клиент.
Имеется объект "Диспетчер обновлений".
Данный объект реализует:
а.) Автоматическую загрузку таблицы обновлений.
б.) Хранение времени последнего обновления таблиц.
в.) Разбор ключа.
г.) Сравнение времени обновления коллекции сущностей или списка записей с таблицей.
д.) Генерацию событий, оповещающих об обновлении.

Интерфейс подписан на события диспетчера и реализует обновления "отображения".
Коллекции объектов хранят время последнего обновления.

Не знаю, пока что, как будут управляться коллекции. Либо "через интерфейс", либо "напрямую" из диспетчера.

Что скажете, стоит подобное делать?

Хм... прошу прощения, я почти то же самое описал, не углядев данного поста.
В вашей сложившейся ситуации (переход невозможен и пр.) другого варианта не вижу... дерзайте))
...
Рейтинг: 0 / 0
Синхронизация данных
    #36625802
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут ещё идея в голову пришла, кэш справочником и датами обновлений можно на винт сохранять. Тогда, если справочник не обновлялся, он вообще с сервера запрашиваться целиком не будет, если есть на винте...
...
Рейтинг: 0 / 0
Синхронизация данных
    #36627366
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то идея сохранения справочников локально пахнет началом 90-хх, DOS-ом и поделками "файл-сервер" некоторых фирмочек. Экономия на спичках, ИМХО.
В эру промышленных СКЛ-СУБД это неактуально. Экономия составит 0,5% трафика.

Применяем подобное только для шаблонов кристал-отчетов.
...
Рейтинг: 0 / 0
Синхронизация данных
    #36627613
Ага
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имхо, что то не так с постановкой или с архитектурой.
За все время время работы ситуаций, когда за одну запись постоянно боролись несколько конкурентых пользователей можно пересчитать по пальцам верхних конечностей.
Обычно боролись переводом на серверные курсоры, либо рефрешем текущей записи при визуальной отрисовке датасета. Ну и разумеется защита от изменения уже измененной записи, реализовать ее можно ну например сравнением таймстампов записи на клиенте и сервере перед вызовом modiy и delete.
...
Рейтинг: 0 / 0
Синхронизация данных
    #36627832
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVЧто-то идея сохранения справочников локально пахнет началом 90-хх, DOS-ом и поделками "файл-сервер" некоторых фирмочек. Экономия на спичках, ИМХО.
В эру промышленных СКЛ-СУБД это неактуально. Экономия составит 0,5% трафика.

Применяем подобное только для шаблонов кристал-отчетов.

Согласен... Но у автора есть определённые условия, которые не позволяют ему "перекроить" справочную систему.
...
Рейтинг: 0 / 0
Синхронизация данных
    #36627872
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVЧто-то идея сохранения справочников локально пахнет началом 90-хх, DOS-ом и поделками "файл-сервер" некоторых фирмочек. Экономия на спичках, ИМХО.
В эру промышленных СКЛ-СУБД это неактуально. Экономия составит 0,5% трафика.

Применяем подобное только для шаблонов кристал-отчетов.

Можно смотреть на технологию локального сохранения с двух точек зрения:
- это основная технология, которая обеспечивает программу справочной подсистемой
- это опциональный кэш, который можно в любой момент отключить
Я рассматриваю эту штуку, как дополнительный модуль кэширования. Ведь никто не говорит, что кэш в браузере - это пережитки 90-х в эру высокоскоростного интернета, он экономит трафик и даёт прирост производительности. Тут, собственно, то же самое. Система должна оставаться работоспособной и без него. Файлы кэша могут быть даже в каком-либо внутреннем формате (я выбрал бы дамп памяти MemDataseta), тут цель - производительность. Но, насколько я помню, автору немного не это нужно было.
...
Рейтинг: 0 / 0
Синхронизация данных
    #36627888
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-,
всё стои деньги.
Кэш даже на HDD без обоснования в виде "счётчиков попадания" никому не нужен.
Только делает систему глюкавее и дороже.
...
Рейтинг: 0 / 0
Синхронизация данных
    #36628670
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-,
всё стои деньги.
Кэш даже на HDD без обоснования в виде "счётчиков попадания" никому не нужен.
Только делает систему глюкавее и дороже.

без обоснования - т.е. всё от ситуации зависит
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Синхронизация данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]