169 похожих чатов

Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где

бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои доводы о том что глупо выгружать столько записей человек все равно со всеми записями никогда в жизни работать не будет не работают. Дак вот, когда закрывается форма и читающая транзакция комититься это происходит по сети ну очееень долго. Так должно быть? Или можно что то подкрутить

14 ответов

62 просмотра

Отключи fetchall у запроса

У меня есть похожая задача показывать в гриде список из 30000 водителей. Использую для этого мемори датасет, причем при закрытии окна он не закрывается, а при повторном открытии окна в него дописываются только обновленные данные. Работает быстро, задержка секунд 10 только при первом открытии окна.

это какая субд так долго коммитит читающую транзакцию?

Sasha-Sch Автор вопроса
Дмитрий Логинов
У меня есть похожая задача показывать в гриде спис...

А как вы отслеживаите изменения ? Как вы понимаете какие записи надо "дозабрать"?

Дмитрий Логинов
У меня есть похожая задача показывать в гриде спис...

Мемдатасет делает fetch all, поскольку при открытии вы заставляете бежать от first до eof. 30к записей это всегда будет заметная задержка Может можно использовать обычный датасет (query)? Тогда настройками можно при открытии фетчить только видимую на экране часть датасета до 100 строк

Igor
как-то чересчур долго для фетча 30к записей

Нормально, операторы не жалуются 😁 Правда, 10 сек это у меня локально на компе, у них наверно секунд 30. Они привыкли, понимают, сами виноваты, что столько водителей у них развелось 😁

Sasha Sch
А как вы отслеживаите изменения ? Как вы понимаете...

Делаю запрос select ... From ... Where ModifyTime > :LastQueryTime - OneMinute

Paul Zaytsev
Мемдатасет делает fetch all, поскольку при открыти...

1) Мне интересен мемдатасет. Сначала через TIBDataset работало, но были и тормоза и глюки при сбоях в сети. Мемдатасет все вопросы решил. 2) отключение фетча мы перекладываем проблемы с клиента на сервер. Особенно, если это fb2.x, ему бывает тяжело держать у себя в памяти открытые курсоры, особенно если подключено несколько десятков операторов. Курсор на 30000 записей в памяти firebird вполне может занимать 30МБ. Если работают 10 операторов, то это 300МБ. Нафиг накие сложности!

Дмитрий Логинов
1) Мне интересен мемдатасет. Сначала через TIBData...

Попробуй фетчить в мемдатасет через ibsql в цикле while not ibsql.eof do... будешь приятно удивлён 😊 Зы. Я в экспериментах выкачивал 1кк записей на клиента за 15-20 сек

Ed Doc
Попробуй фетчить в мемдатасет через ibsql в цикле ...

Возможно. Честно говоря я ещё не исследовал причину такой задержки. Клиент не жалуется, значит его устраивает. Меня 10 сек на моём компе тоже пока устраивает. Сейчас других забот хватает.

Дмитрий Логинов
1) Мне интересен мемдатасет. Сначала через TIBData...

Не надо писать ерунды. 90% курсоров в Firebird однонаправленные, и памяти им надо только под текущий буфер одной записи + небольшие издержки на поддержание моментального снимка и транзакции. Двунаправленные курсоры в Firebird API появились только в тройке. А в сетевом протоколе только с пятёрки. Так-что никаких там 30Мб на курсор не будет

Denis Simonov
Не надо писать ерунды. 90% курсоров в Firebird одн...

Я не говорю ерунды. Сам проверял. Если запрос простенький, то вы правы, память не требуется. Но если запрос сложный или есть сортировка, то firebird может разместить записи у себя в памяти и оттуда постепенно отдавать их при фетче.

Дмитрий Логинов
Я не говорю ерунды. Сам проверял. Если запрос прос...

HASH JOIN, MERGE и внешняя сортировка действительно потребляют память. Но это зависит от запроса. Грубо говоря от количества записей напрямую это не зависит

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта