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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

Потом сделали, теперь я могу в Гугл докс таблицу редактировать одновременно с другими, все вживую и никакого поллинга.
...
Рейтинг: 0 / 0
10.10.2020, 10:01
    #40007210
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid синхронизованный с таблицей
Неофит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
10.10.2020, 13:53
    #40007242
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid синхронизованный с таблицей
В многопользовательской среде ты НИКОГДА не сможешь гарантировать синхронность отображенных и реальных данных. Тупо, пока ты получаешь по сети данные, десятки других юзверей могут эти данные изменить. Другими словами любые данные которые ты получил - уже (потенциально) протухли. И в 99. 9% процентах на это не заморачиваться не нужно. Кому нужна актуальность в конкретный момент - просто запросит
...
Рейтинг: 0 / 0
11.10.2020, 00:41
    #40007366
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid синхронизованный с таблицей
white_nigger
В многопользовательской среде ты НИКОГДА не сможешь гарантировать синхронность отображенных и ....


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

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

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

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


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