|
|
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Я работаю над задачей, для реализации которой было бы удобно иметь таблицу на экране, которая авто-синхронизируется с таблицей данных. Запрос на сервере максимально оптимизирован, данные приготовлены в таблице в нужном формате. С Дельфи знаком на уровне синтакса :) , про разнообразие разных виджетов знаю еще меньше, но постепенно учусь. Мой проект использует стандартные DB виджеты, плюс набор из DevExpress. Описание проблемы, которую я решаю: - в базе данных есть таблица на 20 тыс строк, которую я могу за пару секунд отобразить на экране в гриде, в режиме чтения - я предпочитаю держать все данные в гриде, чтобы разрешить быстрый поиск по Ctrl-F и мгновенную сортировку по колонкам - таблица в базе данных время от времени изменяется, не более одного 1% строк меняются за день. - нужно синхронизировать данные, чтобы грид показывал измененные строчки, с задержкой не более нескольких секунд Я знаю пару методов решения: (1)- самый простой - перезаливать весь грид периодически. Это даст 2-секундные подвисания на клиенте, и нагрузит сервер и сеть. (2)- ручные дельты - периодически запрашивать список изменений от известного состояния таблицы, править измененные строки Надеюсь, что есть виджет который уже умеет такое делать, с минимальной нагрузкой на сервер. Если такого нет и быть не может, остается вариант ручных дельт (2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2020, 22:40 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
НеофитSQL, Делай Refresh() для диапазона уникальных значений. И да - зачм тебе 20К строк в гриде? Котировки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2020, 23:19 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
20 K строк на экране - это адресная книга всех заказчиков. Есть и более объемные списки, которыми я займусь позже. На адресной книге отрабатываю методы решения, выявляю медленные места и попутно учусь учусь новым для меня вещам. Обычно задан сервер-фильтр который ограничивает список несколькими сотнями интересующих заказчиков, но всегда есть кто-то, кто отключит все фильтры для "посмотреть/сортануть/вывести в эксель", и поскольку эта конфигурация официально поддерживается, я собираюсь сделать ее быстрой. Изначально "показать всех" занимало до 20 секунд. Сейчас я снизил это до двух секунд за счет разных оптимизаций запроса, но теперь уже упираюсь в скорость заполнения грида строчками - это примерно две секунды при 100% одного ядра (медленные терминалы). Я могу ускорить далее, если вместо разрушения/создания грида каждый раз буду просто прятать форму и показывать ее снова. (хранение 20 тыс коротких строчек в памяти не создает проблем) Тогда мне надо или грид, который будет сам синхронизироваться, или при повторном появлении формы быстро делать запрос на "что изменилось на сервере", и обработать результат. Должен уложиться в полсекунды. Второй метод более экономный с точки зрения ресурсов, но предполагает больше кастом кода - сервер должен подсчитать разницу, клиент должен эту разницу вручную втиснуть в грид. Делаемо, но если есть готовое, лучше готовое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 00:04 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Поток и отдельная сессия к БД. Если грид Devexpress, то использовать UnboundMode ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 00:34 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Mixrud Поток и отдельная сессия к БД. Если грид Devexpress, то использовать UnboundMode Спасибо за подсказку, я почитаю про UnboundMode. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 00:38 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
НеофитSQL, тебе придется всё делать руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 07:31 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
НеофитSQL упираюсь в скорость заполнения грида строчками НеофитSQL хранение 20 тыс коротких строчек в памяти не создает проблем в любом случае в этом режиме большое количество записей будет грузиться в датаконтроллер не мгновенно. у меня юзвери и сотни тыщ тягают но чем больше тем медленнее, да и OOM в итоге, если не 64 бита так что может действительно стандартный не впишется в ограничения на требуемых объемах и следует сразу заюзать другой режим и возможно даже и gridmode не подойдет, даже допиленный сортировкой/фильтрацией и прочим в датасете, хорошо бы самому оценить его некоторую специфичность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 09:41 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
НеофитSQL, имхо, проще попробовать датасет в памяти, загрузить раз при старте и обновлять его инкрементами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 09:49 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Zelius датасет в памяти, загрузить раз при старте и обновлять его инкрементами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 11:02 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
постановка задачи такая извращенная не потому что так надо, а потому что человек не знает как можно по-нормальному. а все хором кинулись помогать ему квадратное катать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 11:30 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, можно подумать, кто-то знает, как надо. У каждого свои тараканы, кто-то и 200 000 записей в динамике кажет. Зачем-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 11:46 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
09.10.2020 11:46, ъъъъъ пишет: > кто-то и 200 000 записей в динамике кажет. монитор треснет! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 15:07 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Мимопроходящиймонитор треснет! А если ему пикселей побольше дать?.. Нынче, говорят, и 4кк не предел. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 15:15 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, 4kk ought to be enough for anybody - (c). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 15:24 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Refresh каждые несколько секунд - извращение. В тексте не указано какой используется сервер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 15:28 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
DimaBrВ тексте не указано какой используется сервер В лучших традициях местных нубов: трёхзвёнка с оракулом на конце. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 15:31 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
vavan Zelius датасет в памяти, загрузить раз при старте и обновлять его инкрементами Благодарю за дельный совет. Собираюсь держать всю форму, чтоб выпрыгивал мгновенно по кнопке. Апдейт, если сделать инкрементный, затронет малое число строк, тоже очень быстро. Если бы грид умел обновляться целиком без зависания на пару секунд, можно было бы сэкономить работу по вычислению инкрементов на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2020, 01:16 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий постановка задачи такая извращенная не потому что так надо, а потому что человек не знает как можно по-нормальному. а все хором кинулись помогать ему квадратное катать. Постановка задачи разведочная. Поэтому "было бы удобно если есть" Я в курсе некоторых основных технологий, но всего не знаю. Если бы базы данных обладали способностями веб серверов конца прошлого века, можно было бы подписаться на оповещения об изменениях и не мудрить с доморощенными решениями. Для кастом кода чем его меньше - тем лучше. Думаю, что в 1990 кто-то самодовольно поучал других: "он хочет чтоб веб сервер к браузеру стучался, да он азов интернета не понимает". Потом сделали, теперь я могу в Гугл докс таблицу редактировать одновременно с другими, все вживую и никакого поллинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2020, 01:34 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
НеофитSQL можно было бы подписаться на оповещения об изменениях и не мудрить с доморощенными решениями QRCN https://www.devart.com/odac/docs/work_toradependency.htm http://docwiki.embarcadero.com/RADStudio/Sydney/en/Data_Change_Notifications_(FireDAC)#Oracle_CQN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2020, 10:01 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
В многопользовательской среде ты НИКОГДА не сможешь гарантировать синхронность отображенных и реальных данных. Тупо, пока ты получаешь по сети данные, десятки других юзверей могут эти данные изменить. Другими словами любые данные которые ты получил - уже (потенциально) протухли. И в 99. 9% процентах на это не заморачиваться не нужно. Кому нужна актуальность в конкретный момент - просто запросит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2020, 13:53 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
white_nigger В многопользовательской среде ты НИКОГДА не сможешь гарантировать синхронность отображенных и .... Да, и ещё скорость света, гамма лучи и воля бога. Мы тут не теоретической математикой занимаемся, а прикладные задачи решаем. Меня устраивала "мягкая" синхронизация (я написал про несколько секунд), и если бы существовал готовый контроль который это умел делать инкрементально, без постоянного поллинга всего запроса, я бы скорее всего его использовал для прототипа. А если он работает без причуд , то и в работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 00:41 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
НеофитSQL Мы тут не теоретической математикой занимаемся, а прикладные задачи решаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 12:31 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
НеофитSQL ... Если бы базы данных обладали способностями веб серверов конца прошлого века, можно было бы подписаться на оповещения об изменениях и не мудрить с доморощенными решениями. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 13:11 |
|
||
|
DBGrid синхронизованный с таблицей
|
|||
|---|---|---|---|
|
#18+
s62Так они, по крайней мере некоторые, могут это делать. Могут, но в архитектуру DB VCL это не укладывается. А чтобы использовать TDrawGrid + массив структур (или его аналог из DevExpress) - приложение у ТСа придётся переписать чуть менее чем полностью. Плюс пробросить Oracle Database Change Notification сквозь сервер приложений. Бесперспетивняк. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 13:28 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40006831&tid=2037917]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 366ms |

| 0 / 0 |
