|
|
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
V.Borzov> Какой наш выбор? В грид выводи первые N записей, а итоги считай отдельным запросом, на сервере. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:08 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам В грид выводи первые N записей, а итоги считай отдельным запросом, на сервере. С чего ТС и начал, стандартным датасетом такое не сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:10 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
ъъъъъ> С чего ТС и начал, стандартным датасетом такое не сделать. Он начал с экономии памяти с помощью выгрузки в файл. :) Чтобы на каждого клиента по 100тыщ на каждый чих таскать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:11 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
ъъъъъ V.Borzov Никому не интересно это в виде превью в фастрепорте. В окне у людей куча кнопок с кучей всяких действий. Это просто ты так сделал, и теперь думаешь, что так правильно. Из это формы можно произвести разные действия. Хотя бы переходы в документы. Из превью в фастрепорте ничего этого не сделаешь же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:12 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам V.Borzov> Какой наш выбор? В грид выводи первые N записей, а итоги считай отдельным запросом, на сервере. Когда юзер захочет что-то найти поиском по таблице, или просто пролистав, то упрется в fetch с базы. К тому же, если он дойдет-таки до конца, то получит тот же самый Out of memory, а о выводе данных в отдельном потоке и говорить не приходится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:13 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
V.Borzov Какой наш выбор? Если продолжать все показывать - то придется создавать виртуальный датасет, в той или иной форме. Нормальное велосипедостроение, только все равно когда-то упрёшьтся в предел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:15 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
V.Borzov переходы в документы. Из превью в фастрепорте ничего этого не сделаешь же? Сделаешь: https://www.fastreport.ru/public_download/html/ProgMan-ru/index.html?12.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:17 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
ъъъъъ V.Borzov переходы в документы. Из превью в фастрепорте ничего этого не сделаешь же? Сделаешь: https://www.fastreport.ru/public_download/html/ProgMan-ru/index.html?12.htm Только я не уверен, что отчет размером 6Гб сформируется за разумное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:18 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
V.Borzov> упрется в fetch с базы. К тому же, если он дойдет-таки до конца "Первые N" - это Select First N fields. По дефолту 100 или 1000, настраивается в Options на все или для опр. форм/объектов. > о выводе данных в отдельном потоке и говорить не приходится. Если возникают вопросы/проблемы/сомнения - лучше озвучивай их, а не свой (возможно неудачный/неоптимальный) опыт/решение. К примеру, у тебя в потоке делается то, что делается - что всё это время делает (может делать) пользователь? Открывает другую такую же форму с другим фильтром? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:19 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
ъъъъъ V.Borzov ъъъъъ, У вас нет такого отчета, как журнал продаж? Пользовательские наборы данных в таких объемах - не формируются, хотя данных реально дохрена. При отображении данные всегда как-то сгруппированы. Примерно, как в файловой системе Windows, только признаков группировки .. Благодарю за урок, но сейчас у меня стоит вопрос, как то, что уже давно работает, перетащить на новую технологию с минимальными, насколько возможно. затратами. Потом, возможно, буду ломать всё и рисовать новые прогрессивные отчеты в фастрепорте, в treeview или прямо в экселе. Но я и так уже слишком много переломал, настолько, что для того, чтобы перейти с BDE Paradox на Firebird, мне нужно переписать всю программу с нуля. С таким же успехом я мог её переписать на C++, немного бы потерял с точки зрения потраченного времени. Сижу вот и думаю, а мог ли я, почти ничего не меняя, перейти сначала на firebird из-под BDE, а потом уже дальше пойти? Не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:19 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
ъъъъъ> Сделаешь: https://www.fastreport.ru Не, FR ему для сабжа нафиг не сдался. Только хуже может стать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:20 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам ъъъъъ> Сделаешь: https://www.fastreport.ru Не, FR ему для сабжа нафиг не сдался. Только хуже может стать. Пожалуй, что да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:21 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
У ТС вылезли ограничения выбранной архитектуры. Раз сейчас перелопачивать никак, придется ещё немного подождать, когда совсем невмоготу станет. Нормальный процесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:24 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
V.Borzov . Теперь выгружаю полученный результат в DBF-файл с помощью TDBF. Получился файл размером 6 гиг. Разве dbf файлы таких размеров могут существовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:26 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам К примеру, у тебя в потоке делается то, что делается - что всё это время делает (может делать) пользователь? Открывает другую такую же форму с другим фильтром? В старом BDE приложении сидит и тупо смотрит на приложение, которой в одном потоке и рисует и считает. Разве что только еще одно приложение открыть, рискуя, что BDE подвиснет. В новом приложении уже шаг вперед: расчет выводится в отдельном потоке, и в той форме. Юзер же может так же тупо смотреть, а может еще что-то открыть в приложении. При таком подходе лучше сразу уже всё с сервера забрать, разместить в форме, и пусть себе дальше работает с этой формой, если она ему так нужна. Если не нужна, повторяюсь, то есть другие отчеты, всякие там сводные, где он увидит просто сумму, без детализации. Но раз ему тут надо, то пусть тут сидит. Выводить первые N строк, а потом заставлять фетчить при попытке юзера поискать что-то - это тот же самый старый подход: и счет, и отображение - в одном потоке. И скорость - одно дело я этот 6-гигабайтный DBF испоьзую, где все поиски и вся беготня практически мгновенно (я писал выше - while not eof do next за 5 секунд), а совсем другое дело, когда я юзеру показал N строк быстренько, а когда он сказал: "а найди-ка мне позицию с текстом "АБС", и приложение замерло, а, не на подходе к последним строкам еще и умерло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:28 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
ъъъъъ V.Borzov . Теперь выгружаю полученный результат в DBF-файл с помощью TDBF. Получился файл размером 6 гиг. Разве dbf файлы таких размеров могут существовать? Ну, изначально я и поинтересовался: 1) есть ли в FibPlus штатное средство для скидывания кэша на диск и работы с ним потом, не загружая это всё в оперативку, чтобы велосипед не изобретать. Ибо велосипед это 2) какие существуют удобные для этого датасеты. Например BDE-шные DBF и DB упрутся в 2 гига в лучшем случае, там всё. взял TDBF, он сохранил при tablelevel=5. Но у него других ограничений куча. Может, еще что-то есть для применения, чтобы избежать изобретения очередного велосипеда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:34 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Только я не уверен, что отчет размером 6Гб сформируется за разумное время. Ну, в FibDataset этот набор данных занял 1.2 гига в памяти, а выкачивал в память целиком 3 минуты, а в на диске - 900 мб, куда он сбрасывал секунды 4, не больше. Это DBF развернул его в 6 гиг. С какой скоростью выкидывать это в DBF - это еще можно поработать будет, пока не очень быстро. Зато отображается это всё ой как быстро и ой как экономно с точки зрения оперативной памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:39 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
V.Borzov ъъъъъ Только я не уверен, что отчет размером 6Гб сформируется за разумное время. Ну, в FibDataset этот набор данных занял 1.2 гига в памяти, а выкачивал в память целиком 3 минуты, а в на диске - 900 мб, куда он сбрасывал секунды 4, не больше. Это DBF развернул его в 6 гиг. С какой скоростью выкидывать это в DBF - это еще можно поработать будет, пока не очень быстро. Зато отображается это всё ой как быстро и ой как экономно с точки зрения оперативной памяти. Ну, можно по зернышку клевать. Например, при формировании dbf не использовать загрузку в TpFIBDataSet, а использовать однонаправленный TpFIBQuery. Или, если используется готовый конвертер "датасет" -> dbf, попробовать включить у TpFIBDataSet флаг Unidirectional. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:47 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
Почитайте документацию по Фаердаку: Арефьев предпринимал какие-то шаги для имитации работы BDE. Фаердак фаерберд поддерживает. А вообще меняйте подход работы с данными: данные надо не искать, не фильтровать, а отбирать. С сервера должно приходить только то, что нужно сейчас, а не то, что может понадобиться вообще. Да, сначала это тяжело (вам повезло: BDE очень удачно скрывал разницу вплоть до средних объемов), но потом оцените. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 20:59 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Ну, можно по зернышку клевать. Например, при формировании dbf не использовать загрузку в TpFIBDataSet, а использовать однонаправленный TpFIBQuery. Или, если используется готовый конвертер "датасет" -> dbf, попробовать включить у TpFIBDataSet флаг Unidirectional. Это да, разумеется. Грузить в DBF без лишних затрат оперативки. Остается открытым вопрос: может, в fibPlus штатные средства есть, или как-то довольно просто что-то там реализуется... Кажется, что вон оно рядом что-то там, но не могу найти. Еще не нравятся ограничения DBF на поля: нет BigInt, размер строки максимум 254 символа. Хотя, конечно, это всё обходится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 21:07 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
bk0010, понял, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 21:08 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
IBExpert, к слову, не так давно научился полный фетч делать на данные. Раньше Out of memory давал. Сейчас набирает данных в память, а когда размер занимаемой приложением памяти выпрыгивает за 1.3 гига примерно, он всё набранное скидывает в файл и дальше спокойненько туда фетчит до упора, занимая не больше 80мб оперативки и время от времени спрашивая юзера, не одумался ли он, хочет ли он еще на 15 гиг увеличить размер файла-буфера. Потом бегаем по гриду довольно-таки быстро. Правда вот пытаться отсортировать, кликая по заголовку, не стоит. Вот именно об этом я и говорю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 21:14 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
V.Borzov> В старом BDE приложении сидит и тупо смотрит на V.Borzov> приложение, которой в одном потоке и рисует и считает Значит, поток был нафиг не нужен, и можно было анимашку показать. V.Borzov> Юзер ... может еще что-то открыть в приложении А точно может? Проверь на всякий случай. V.Borzov> При таком подходе лучше сразу уже всё с сервера забрать Нет. Если пользователь ровно один - по всякому можно извращаться, не беда, если же их много - фетчить всё на клиента не годится. V.Borzov> Выводить первые N строк, а потом заставлять V.Borzov> фетчить при попытке юзера поискать что-то - V.Borzov> это тот же самый старый подход... в одном потоке Нет. Я уже советовал выкинуть старые заблуждения из головы (или если не из головы, то хотя бы при обсуждении на форуме). V.Borzov> а когда он сказал: "а найди-ка мне позицию с текстом "АБС", и V.Borzov> приложение замерло, а, не на подходе к последним строкам еще и умерло. Ты уже проверял? Сделай небольшую формочку и проверь. Кстати, эти аптеки - это одна сеть аптек с центральной БД или это разные клиенты? Или как? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 21:34 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам А точно может? Проверь на всякий случай. Может. Открываю 5 форм, в каждой свой запрос, спокойно работает. Firebird 3.0 SS распиливает по потокам раздачу. Нет. Я уже советовал выкинуть старые заблуждения из головы (или если не из головы, то хотя бы при обсуждении на форуме). То есть, мне на форуме нельзя было задать озвученный в топике вопрос? Или о чем Вы, я не понял. Обсуждаем, потому что спрашиваете, зачем мне всё это надо. Я не спрашивал, как мне сменить подход, я спрашивал, есть ли в FibPlus штатное средство. Но за советы спасибо, конечно. V.Borzov> а когда он сказал: "а найди-ка мне позицию с текстом "АБС", и V.Borzov> приложение замерло, а, не на подходе к последним строкам еще и умерло. Ты уже проверял? Сделай небольшую формочку и проверь. А чего тут проверять. Ctrl+End - и привет, приложение будет висеть, пока не отфетчит всё до последней записи. Кстати, эти аптеки - это одна сеть аптек с центральной БД или это разные клиенты? Или как? Есть сеть центральной базой с 80 аптечными пунктами. Её очень хочется уже на firebird всё перевести, хотя бы центральную базу, ибо Paradox скрипит кое-как, валится на простейших запросах, приходится постоянно изголяться и усложнять пути. Остальные клиенты имеют по 1-3-5-10-15 аптек, им вообще по барабану, firebird у меня или BDE, поэтому и дела с Firebird идут по остаточному принципу. Был клиент с 40 аптеками, но отвалился в прошлом месяце, падла. Наверное, из-за моих заблуждений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 22:03 |
|
||
|
pFibDataset - скинуть буфер на диск для экономии памяти
|
|||
|---|---|---|---|
|
#18+
V.Borzov, для того, чтобы не запрашивать каждый раз сотни тысяч записей с удалённого сервера, можно реализовать локальную базу Firebird с периодической репликацией. Я для таких целей использую элементарный способ: в каждой таблице создаю поле MODIFYTIME и с помощью триггера обновляю его при каждом изменении записи (желательно, чтобы записи из таблицы не удалялись, т.к. для отслеживания удаляемых записей нужен другой механизм). Раз в минуту делаю простейший запрос к серверу SELECT * FROM TABLE WHERE MODIFYTIME > :LastReplicationServerTime - 10 sec. (на всякий случай даю 10 секунд, чтобы учесть незавершённые пишущие транзакции). Ничего сложного. Могут быть проблемы, если на сервере сбойнёт время, но это крайне редкая ситуация (может раз в 10 лет что-то такое и возникнет). А по поводу попытки впихнуть в датасет сотни тысяч записей - так не делают. Во времена BDE прокатывало, но это не означает, что так делать правильно. Лучше ограничивать количество выводимых записей, например SELECT FIRST 10000, плюс применять различные фильтры и перезапрашивать данные при изменении фильтров уже с локальной копии базы данных. Итоги вычислять отдельными запросами. А про BDE вспоминаю как про кошмарный сон. 11 лет назад переходили с BDE на Firebird. Перед этим целое исследование было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2020, 22:28 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39952566&tid=2038369]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 266ms |
| total: | 397ms |

| 0 / 0 |
