powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBGrid синхронизованный с таблицей
25 сообщений из 46, страница 1 из 2
DBGrid синхронизованный с таблицей
    #40006752
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

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

С Дельфи знаком на уровне синтакса :) , про разнообразие разных виджетов знаю еще меньше, но постепенно учусь.
Мой проект использует стандартные DB виджеты, плюс набор из DevExpress.

Описание проблемы, которую я решаю:
- в базе данных есть таблица на 20 тыс строк, которую я могу за пару секунд отобразить на экране в гриде, в режиме чтения
- я предпочитаю держать все данные в гриде, чтобы разрешить быстрый поиск по Ctrl-F и мгновенную сортировку по колонкам
- таблица в базе данных время от времени изменяется, не более одного 1% строк меняются за день.
- нужно синхронизировать данные, чтобы грид показывал измененные строчки, с задержкой не более нескольких секунд

Я знаю пару методов решения:
(1)- самый простой - перезаливать весь грид периодически. Это даст 2-секундные подвисания на клиенте, и нагрузит сервер и сеть.
(2)- ручные дельты - периодически запрашивать список изменений от известного состояния таблицы, править измененные строки

Надеюсь, что есть виджет который уже умеет такое делать, с минимальной нагрузкой на сервер.
Если такого нет и быть не может, остается вариант ручных дельт (2).
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006760
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

Делай Refresh() для диапазона уникальных значений. И да - зачм тебе 20К строк в гриде? Котировки?
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006764
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
20 K строк на экране - это адресная книга всех заказчиков. Есть и более объемные списки, которыми я займусь позже.
На адресной книге отрабатываю методы решения, выявляю медленные места и попутно учусь учусь новым для меня вещам.

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

Изначально "показать всех" занимало до 20 секунд. Сейчас я снизил это до двух секунд за счет разных оптимизаций запроса, но теперь уже упираюсь в скорость заполнения грида строчками - это примерно две секунды при 100% одного ядра (медленные терминалы).
Я могу ускорить далее, если вместо разрушения/создания грида каждый раз буду просто прятать форму и показывать ее снова.
(хранение 20 тыс коротких строчек в памяти не создает проблем)

Тогда мне надо или грид, который будет сам синхронизироваться, или при повторном появлении формы быстро делать запрос на "что изменилось на сервере", и обработать результат. Должен уложиться в полсекунды.
Второй метод более экономный с точки зрения ресурсов, но предполагает больше кастом кода - сервер должен подсчитать разницу, клиент должен эту разницу вручную втиснуть в грид. Делаемо, но если есть готовое, лучше готовое.
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006768
Mixrud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поток и отдельная сессия к БД. Если грид Devexpress, то использовать UnboundMode
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006769
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mixrud
Поток и отдельная сессия к БД. Если грид Devexpress, то использовать UnboundMode


Спасибо за подсказку, я почитаю про UnboundMode.
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006800
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,

тебе придется всё делать руками.
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006831
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
упираюсь в скорость заполнения грида строчками
я вот пользую собственный датасет с инкрементальным рефрешем, но в стандартном режиме датаконтроллер будет при любом изменении в датасете полностью его перечитывать. датаконтроллер конечно можно и нужно делать свой, можно там изыскивать определенные возможности для оптимизации и/или доп. функционала (как у меня скажем в s139428 для нотификации о прогрессе загрузки/сортировки/фильтрации и в др. тикетах)
НеофитSQL
хранение 20 тыс коротких строчек в памяти не создает проблем
и это кстати тоже один из пунктов где можно экономить в собственном датаконтроллере, по крайней мере на памяти, избегая хранения дублеров

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

так что может действительно стандартный не впишется в ограничения на требуемых объемах и следует сразу заюзать другой режим и возможно даже и gridmode не подойдет, даже допиленный сортировкой/фильтрацией и прочим в датасете, хорошо бы самому оценить его некоторую специфичность
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006834
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

имхо, проще попробовать датасет в памяти, загрузить раз при старте и обновлять его инкрементами
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006857
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
датасет в памяти, загрузить раз при старте и обновлять его инкрементами
что я и описал
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006863
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
постановка задачи такая извращенная не потому что так надо,
а потому что человек не знает как можно по-нормальному.

а все хором кинулись помогать ему квадратное катать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006870
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

можно подумать, кто-то знает, как надо.
У каждого свои тараканы, кто-то и 200 000 записей в динамике кажет. Зачем-то.
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006978
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
09.10.2020 11:46, ъъъъъ пишет:
> кто-то и 200 000 записей в динамике кажет.

монитор треснет!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006982
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящиймонитор треснет!

А если ему пикселей побольше дать?.. Нынче, говорят, и 4кк не предел.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006987
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

4kk ought to be enough for anybody - (c).
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006988
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Refresh каждые несколько секунд - извращение.
В тексте не указано какой используется сервер
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40006991
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrВ тексте не указано какой используется сервер

В лучших традициях местных нубов: трёхзвёнка с оракулом на конце.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007184
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavan
Zelius
датасет в памяти, загрузить раз при старте и обновлять его инкрементами
что я и описал


Благодарю за дельный совет.

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

Апдейт, если сделать инкрементный, затронет малое число строк, тоже очень быстро. Если бы грид умел обновляться целиком без зависания на пару секунд, можно было бы сэкономить работу по вычислению инкрементов на сервере.
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007186
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

постановка задачи такая извращенная не потому что так надо,
а потому что человек не знает как можно по-нормальному.

а все хором кинулись помогать ему квадратное катать.


Постановка задачи разведочная. Поэтому "было бы удобно если есть"
Я в курсе некоторых основных технологий, но всего не знаю.

Если бы базы данных обладали способностями веб серверов конца прошлого века, можно было бы подписаться на оповещения об изменениях и не мудрить с доморощенными решениями. Для кастом кода чем его меньше - тем лучше.

Думаю, что в 1990 кто-то самодовольно поучал других: "он хочет чтоб веб сервер к браузеру стучался, да он азов интернета не понимает".

Потом сделали, теперь я могу в Гугл докс таблицу редактировать одновременно с другими, все вживую и никакого поллинга.
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007210
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
можно было бы подписаться на оповещения об изменениях и не мудрить с доморощенными решениями

QRCN
https://www.devart.com/odac/docs/work_toradependency.htm
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Data_Change_Notifications_(FireDAC)#Oracle_CQN
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007242
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В многопользовательской среде ты НИКОГДА не сможешь гарантировать синхронность отображенных и реальных данных. Тупо, пока ты получаешь по сети данные, десятки других юзверей могут эти данные изменить. Другими словами любые данные которые ты получил - уже (потенциально) протухли. И в 99. 9% процентах на это не заморачиваться не нужно. Кому нужна актуальность в конкретный момент - просто запросит
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007366
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
white_nigger
В многопользовательской среде ты НИКОГДА не сможешь гарантировать синхронность отображенных и ....


Да, и ещё скорость света, гамма лучи и воля бога.
Мы тут не теоретической математикой занимаемся, а прикладные задачи решаем.

Меня устраивала "мягкая" синхронизация (я написал про несколько секунд), и если бы существовал готовый контроль который это умел делать инкрементально, без постоянного поллинга всего запроса, я бы скорее всего его использовал для прототипа. А если он работает без причуд , то и в работе.
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007415
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Мы тут не теоретической математикой занимаемся, а прикладные задачи решаем.
А мне кажется фигнёй страдаете. И к сожалению не видите этого.
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007423
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
...
Если бы базы данных обладали способностями веб серверов конца прошлого века, можно было бы подписаться на оповещения об изменениях и не мудрить с доморощенными решениями.
...
Так они, по крайней мере некоторые, могут это делать. https://it.wikireading.ru/36959
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007424
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62Так они, по крайней мере некоторые, могут это делать.

Могут, но в архитектуру DB VCL это не укладывается. А чтобы использовать TDrawGrid +
массив структур (или его аналог из DevExpress) - приложение у ТСа придётся переписать чуть
менее чем полностью. Плюс пробросить Oracle Database Change Notification сквозь сервер
приложений.

Бесперспетивняк.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid синхронизованный с таблицей
    #40007431
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё слабо представляют реакцию пользователя, когда исподволь обновляются поля участвующие в сортировах и группировках грида...
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBGrid синхронизованный с таблицей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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