powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли держать читающую трансакцию открытой всё время работы приложения?
56 сообщений из 56, показаны все 3 страниц
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39632852
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Прошу подсказать: есть ли какие-то противопоказания к subj? Не накапливается ли мусор?

Спасибо
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39632869
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov,

http://www.ibase.ru/ibtrans/
http://www.ibase.ru/ibx/

транзакции read read committed начиная с InterBase 6 стартуют типа сразу как committed, поэтому не влияют на "накопление версий".
"Накопление мусора" - терминологически некорректно, потому что мусор убирается. А вот удержание активными транзакциями версий от превращения в мусор - это да, плохо. За исключением read read committed.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39632870
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сказал так: в умелых руках это безопасно, но в целом - очень плохой знак типа "тут
говнокод".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39632939
sg729
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovЯ бы сказал так: в умелых руках это безопасно, но в целом - очень плохой знак типа "тут говнокод".
Если все-таки необходимо длительное время отображать результат Select-а на мониторе клиента, как лучше/безопаснее/надежнее сделать?
- CommitRetaining
- что-то другое?
Select выполняется с уровнем изоляции Read Committed.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39632940
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg729Dimitry SibiryakovЯ бы сказал так: в умелых руках это безопасно, но в целом - очень плохой знак типа "тут говнокод".
Если все-таки необходимо длительное время отображать результат Select-а на мониторе клиента, как лучше/безопаснее/надежнее сделать?
- CommitRetaining
- что-то другое?
Select выполняется с уровнем изоляции Read Committed.

Перестать использовать идиотские компоненты для которых "завершение транзакции== закрытие датасета"
Правда не уверен что такие есть.
У меня самодельный :)
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39632954
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

такие уже давно есть, только они требует полного фетча резалтсета
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39632967
sg729
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
frakssg729пропущено...

Если все-таки необходимо длительное время отображать результат Select-а на мониторе клиента, как лучше/безопаснее/надежнее сделать?
- CommitRetaining
- что-то другое?
Select выполняется с уровнем изоляции Read Committed.

Перестать использовать идиотские компоненты для которых "завершение транзакции== закрытие датасета"
Правда не уверен что такие есть.
У меня самодельный :)
Использую FIB+ 7.5 (офиц.купленные). Подскажите не идиотские -)
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39632988
dennis-r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg729Использую FIB+ 7.5 (офиц.купленные). Подскажите не идиотские -)В FIB+ есть режим CachedUpdates. Ещё есть разные memory dataset'ы. И да, собственный dataset лучше.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633022
sg729
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dennis-rsg729Использую FIB+ 7.5 (офиц.купленные). Подскажите не идиотские -)В FIB+ есть режим CachedUpdates. Ещё есть разные memory dataset'ы. И да, собственный dataset лучше.
Если правильно понимаю раздел "Использование кэшированных изменений" в FIBPlus Developers Guide, CachedUpdates предназначен для кэширования изменений. Разве он влияет на чтение?
dennis-rЕщё есть разные memory dataset'ы.
Клиентские компы слабые - мало оперативки. Нет ли здесь тупика?
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633030
dennis-r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg729Если правильно понимаю раздел "Использование кэшированных изменений" в FIBPlus Developers Guide, CachedUpdates предназначен для кэширования изменений. Разве он влияет на чтение?Он позволяет считать данные и вообще отключиться от базы.
sg729dennis-rЕщё есть разные memory dataset'ы.
Клиентские компы слабые - мало оперативки. Нет ли здесь тупика?Если не выгребать миллионы записей, то никаких проблем.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633058
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg729Клиентские компы слабые - мало оперативки. Нет ли здесь тупика?

Это тупик если, во-первых, плохой разработчик приложения решил отображать весь триллион
записей и во-вторых, плохие компоненты этот дикий резалт-сет умеют держать исключительно в
ОЗУ. Устрани любую кривизну из этих двух и проблем со слабыми компами не будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633120
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovПрошу подсказать: есть ли какие-то противопоказания к subj? Не накапливается ли мусор?


могут накапливаться временные БЛОБы (например функция LIST в Fb 2.1), потому что они "умирают" только вместе с транзакцией.

Например http://www.sql.ru/forum/827880-a/mnogokratnye-update-blobov-in-place-bez-kommitov-utechka-pamyati?hl=blob ??????
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633145
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg729Если все-таки необходимо длительное время отображать результат Select-а на мониторе клиента, как лучше/безопаснее/надежнее сделать?
я же дал ссылку. Пропиши в параметрах транзакции
read
read_committed
rec_version
sg729- CommitRetaining
это зло, не надо его использовать.
sg729Select выполняется с уровнем изоляции Read Committed.
просто read committed недостаточно. См. выше.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633518
sg729
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dennis-r, Dimitry Sibiryakov, kdv
Спасибо за помощь! -)
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633841
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо. Убираю длинные читающие транзакции. И тут сильно поможет FibDataset.CachedUpdates.

Однако напоролся на проблему, пытаюсь сейчас локализовать. А выглядит она так:
После открытия Dataset с CachedUpdates = true, если объект Database уничтожить, то при отрисовке в гриде, например, на некоторых полях (не на всех) начинают вылазить ошибки "Database not assigned for ...SelectQuery", и вылазит это на полях, в которых, как выясняется, FPrepared = false, а почему на них сейчас false, а на других - true вот это пока не понял, тестирую. Интересно так же, что dataset.transaction.DefaultDatabase := nil будет, конечно, обязательно и правильно, но ошибки оно не устраняет. А вот если физически не удалить Database, то ошибки не вылазит, даже после DefaultDatabase := nil.
Удаление Database нужно для возможности заполнения датасета в отдельном потоке. То есть, если в потоке отдельном открываем этот датасет и хотим использовать отдельный коннект, то создаем FibDatabase, заполняем dataset, который объявлен с CachedUpdates = true заранее, удаляем поток и FibDatabase. Если использовать в потоке доступ к отдельному FibDatabase, а к главному в приложении, а писали умные люди в форуме, что это теоретически не запрещено, то проблема не вылазит. Также проблема не вылазит, если завершившийся поток не прибить, а вместе с ним и Database оставить в памяти. Ошибка возникает только после физического удаления Database. Попробую разобраться с FPrepared для полей.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633848
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20.04.2018 16:18, V.Borzov пишет:
> Однако напоролся на проблему, пытаюсь сейчас локализовать. А выглядит она так

1. Делфи ту никто не знает.
2. Плюсы никем не саппортятся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633866
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,
Об этом выше речь шла.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633909
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20.04.2018 16:38, V.Borzov пишет:
> Об этом выше речь шла.

и что?
читай по буквам:

ЗДЕСЬ НЕ ТУТ!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633911
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov,
а для зачем ты загружаешь датасет в отдельном треде? Все равно же, пока не завершится процесс загрузки, работать не сможешь, в чем профит?
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633919
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov Убираю длинные читающие транзакции
зачем??? с read read_committed ведь все хорошо.
V.BorzovУдаление Database нужно для возможности заполнения датасета в отдельном потоке.
ну началось...
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633925
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvну началось...
Ещё в самом начале я написал про очень-очень плохой знак. И вот мы видим подтверждение
этого в действии.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633933
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvV.Borzov Убираю длинные читающие транзакции
зачем??? с read read_committed ведь все хорошо.
V.BorzovУдаление Database нужно для возможности заполнения датасета в отдельном потоке.
ну началось...

Как правильный программист должен делать селфи
[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633939
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvзачем??? с read read_committed ведь все хорошо.

Спасибо, я понял. Но если есть техническая возможность закрыть всё лишнее за собой, то почему бы это не сделать.

КотовасияV.Borzov,
а для зачем ты загружаешь датасет в отдельном треде? Все равно же, пока не завершится процесс загрузки, работать не сможешь, в чем профит?
Гружу отчет, пока отчет грузится, приложение адекватно реагирует на запросы пользователя, вплоть до того, что можно еще пару отчетов открыть и загрузить. В варианте, когда поток отрабатывает с отдельным коннектом, требуется отдельный database. В случае, если возвращаемый в форму датасет является tpFibdataset, ему требуется оставлять открытым и транзакцию, с помощью которой он загрузил данные, и этот датабейс, который создан был в потоке.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633941
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

У меня аж сердце ёкнуло, когда молотком по объективу...
Фотодизайнеры - козлы.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633942
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovГружу отчет, пока отчет грузится, приложение адекватно реагирует на запросы пользователя,
вплоть до того, что можно еще пару отчетов открыть и загрузить.

Для создания таких приложений следует забыть про DB-aware, которое рассчитано
исключительно на мышекликанье поделок класса фишфак и начать-таки программировать. Для
начала можешь посмотреть на MVC паттерн (в котором из хороших идей только инкапсуляция
отображения данных и отрыв его от процесса получения данных, но и то уже хлеб).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633944
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovV.BorzovГружу отчет, пока отчет грузится, приложение адекватно реагирует на запросы пользователя,
вплоть до того, что можно еще пару отчетов открыть и загрузить.

Для создания таких приложений следует забыть про DB-aware, которое рассчитано
исключительно на мышекликанье поделок класса фишфак и начать-таки программировать. Для
начала можешь посмотреть на MVC паттерн (в котором из хороших идей только инкапсуляция
отображения данных и отрыв его от процесса получения данных, но и то уже хлеб).

Чего-то я Вас не пойму. В чем проблема-то? Открываем отдельный коннект, загружаем данные, передаем форме. Ньюансы лишь в том, в какой форме передаем данные. Почему бы приложению не открыть параллельно еще пару отчетов и не включить на их выполнение? FibPlus позволяет, не так?
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633945
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzovплоть до того, что можно еще пару отчетов открыть и загрузить.
где ты такую хрень видел? Это только в трехзвенном сервере отчетов отчеты параллельно выполняются, сохраняются, и выдаются пользователю потом, по запросу.
В общем - для briefcase надо использовать TClientDataSet. Параллельно запросы работают только в разных коннектах к БД.
Раз надо несколько коннектов - значит надо.
Коннект с активной транзакцией read read_committed никак не нагружает сервер.
В общем, фигней вы занимаетесь, гражданин. Что с потоками, что с CachedUpdates. Нельзя вот так взять, и сразу собрать трактор, если не знать как устроен двигатель, и прочее.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633948
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovВ чем проблема-то? Открываем отдельный коннект, загружаем данные, передаем форме.

Практически во всём. Начиная с того, что уже тут мы откладываем "передачу данных" на конец
загрузки. А всё это время пользователь наблюдает пустую форму. И да, параллельно можно ещё
пар отчётов запустить, вот только, насколько я помню, FastReport так и не научился строить
их в фоне, он "унутре" мается всякой фигнёй, начиная с Application.PrecessMessages.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633957
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvV.Borzovплоть до того, что можно еще пару отчетов открыть и загрузить.
где ты такую хрень видел? Это только в трехзвенном сервере отчетов отчеты параллельно выполняются, сохраняются, и выдаются пользователю потом, по запросу.
В общем - для briefcase надо использовать TClientDataSet. Параллельно запросы работают только в разных коннектах к БД.
Раз надо несколько коннектов - значит надо.
Коннект с активной транзакцией read read_committed никак не нагружает сервер.
В общем, фигней вы занимаетесь, гражданин. Что с потоками, что с CachedUpdates. Нельзя вот так взять, и сразу собрать трактор, если не знать как устроен двигатель, и прочее.
Я и сказал про отдельный коннект к БД. И больше проблем не вижу. Вопрос только в том, держать ли этот коннект и дальше, если возвращаемый датасет является TpFibDataset, пока юзер форму не закроет (я так и делаю), или можно всё закрыть, оставив его открытым с помощью CachedUpdates. С TClientDataset всё проще, но затраты на перекачивание данных в него бывают иногда достаточно большими, и лучше уж прямо TpFibDataset передать.
Писали тут на форуме, что можно и одним коннектом в FibPlus даже обойтись. Я тестировал, вроде и правда всё работает, но на практике клиенты пока это не гоняют.

Вопрос мой про длинную активную транзакцию никак не пересекается с этим вопросом, не пугайтесь Вы :) Просто в топике зашел разговор о cachedupdates, а я еще попытался избавиться с помощью этого CachedUpdates и от самого отдельного коннекта в отдельном потоке, это третья тема :) Но поднял их тут не я.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633962
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovV.BorzovВ чем проблема-то? Открываем отдельный коннект, загружаем данные, передаем форме.

Практически во всём. Начиная с того, что уже тут мы откладываем "передачу данных" на конец
загрузки. А всё это время пользователь наблюдает пустую форму. И да, параллельно можно ещё
пар отчётов запустить, вот только, насколько я помню, FastReport так и не научился строить
их в фоне, он "унутре" мается всякой фигнёй, начиная с Application.PrecessMessages.


Любой отчет чтобы получить, нужно дождаться окончания его расчета. А как иначе? Или я Вас не понял. Поэтому в любом случае юзер сидит и смотрит на пустую форму. Неужели Вы считаете, что Application.ProcessMessages - это достойная замена выполнению в отдельном потоке? А насчет маяться фигней - ну, частенько клиенты открывают другой экземпляр приложения, чтобы, пока "грузится отчет", что-то другое поделать. Так что почему бы не дать им возможность делать это прямо в этом же экземпляре приложения?

Насчет FastReport: да, много самостоятельных отчетов накопилось в нем в старой системе, и просто скриптов, выдающих в результате не всегда даже и фастрепортовские отчеты, а просто таблицы в эксель, и надо будет с этим что-то решать, но умные люди пишут, что и он могет threadsafe работать, и всё у них получается.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633994
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovDimitry Sibiryakovпропущено...

Для создания таких приложений следует забыть про DB-aware, которое рассчитано
исключительно на мышекликанье поделок класса фишфак и начать-таки программировать. Для
начала можешь посмотреть на MVC паттерн (в котором из хороших идей только инкапсуляция
отображения данных и отрыв его от процесса получения данных, но и то уже хлеб).

Чего-то я Вас не пойму. В чем проблема-то? Открываем отдельный коннект, загружаем данные, передаем форме. Ньюансы лишь в том, в какой форме передаем данные. Почему бы приложению не открыть параллельно еще пару отчетов и не включить на их выполнение? FibPlus позволяет, не так?

А свести все дела в одно приложение - это вопрос принципа? Ну, чтобы на экране торчали друг из-под друга пяток окон с таблицами отчётов, пяток с графиками, в половине открыты лукапные формяжки со справочниками, в половине формяшки редактирования и в них тоже лукапы и тэ дэ и тэ пэ... Ну, чтобы ползатель покрепче запутался где он и кто он.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633996
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаА свести все дела в одно приложение - это вопрос принципа? Ну, чтобы на экране торчали друг из-под друга пяток окон с таблицами отчётов, пяток с графиками, в половине открыты лукапные формяжки со справочниками, в половине формяшки редактирования и в них тоже лукапы и тэ дэ и тэ пэ... Ну, чтобы ползатель покрепче запутался где он и кто он.

А чем это лучше пяти открытых приложений с теми же формами? Да и потом, это одна из задач, а другая - сделать приложение адекватно реагирующим на команды пользователя.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39633997
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем это хуже, хотел я сказать.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634007
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzovчем это хуже, хотел я сказать.

Ориентироваться в 5 SDI через альт-таб или трей, понимая куда и зачем идёшь, пользователю гораздо проще, чем в разлапистом MDI с непрогнозируемыми перекрытиями. Мне так кажется. И программисту тоже жить проще - пространство для всяких коллизий сужено.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634009
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаV.Borzovчем это хуже, хотел я сказать.

Ориентироваться в 5 SDI через альт-таб или трей, понимая куда и зачем идёшь, пользователю гораздо проще, чем в разлапистом MDI с непрогнозируемыми перекрытиями. Мне так кажется. И программисту тоже жить проще - пространство для всяких коллизий сужено.
Я тут с Вами поспорю:
Во-первых, надо давать пользователю возможность работы как в MDI, так в SDI.
Во-вторых, пусть пользователь сам решает, удобнее ли ему открыть пять раз одно приложение, или открыть в одном приложении пять отчетов. И тут в полный рост может встать проблема использования локальных ресурсов приложения, таких как инишки, например. Ибо пять приложений будут работать с одним и тем же ini-файлом. Это к примеру. То есть, к базе получаем комфортный для программиста доступ, но задаем ему задачки разделения между приложениями локальных ресурсов.
В-третьих, вопрос возможности выполнения запросов в отдельном потоке нужен далеко не только для того, чтобы юзер мог открыть одновременно 5 форм, а, еще раз говорю, для адекватной реакции приложения на юзерские команды.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634038
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov,

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

С точки зрения СУБД это один хрен два коннекта, причем с одного компа или разных, СУБД пофиг.
С точки зрения клиента - по идее, ему может быть проще запустить именно два приложения, чем рыться в кнопках "отчет готовится" и прочем. Я может откровение выдам - юзеры запускают приложение по 2-3 экземпляра даже если долго и параллельно в них ничего не делается.

Кроме того, что запретит юзеру запустить ваше параллельное приложение, нажать там кнопку "сделать отчет", и вместо тыканья в этом же приложении запустить второй экземпляр приложения?
Отсюда вопрос - нафига тогда у вас в приложении "треды для отчетов"?
Я прекрасно понимаю, что замутить что-то параллельное и "вот эдакое" для программиста - хлебом не корми. Но в глубине души вы вероятно сами понимаете, что практический выхлоп от этого будет практически нулевой. Ну разве что, кроме приобретенного опыта (что само по себе весьма ценно).
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634039
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Возможность запуска нескольких отчетов всплыла как приятный бонус, это не было целью. Главная задача - дать приложению возможность адекватно реагировать на юзерские действия. Однако, если такая возможность есть, то уж лучше пусть это делается в одном приложении. Это - на мой взгляд, и не вижу тут предмета спора, чистая вкусовщина. Даем возможность юзеру, а он пусть сам решает. Тем более, что с вопросами запуска нескольких приложений могут возникнуть другие проблемы (работа с локальными данными, не рассчитанными на мультиюзерскую работу, tinifile, например).
А возможность такую дают, как ВЫ заметили, и сам Firebird, и, вроде как теоретически и FibPlus (подключение нескольких потоков через один TpFibDatabase), и тогда это вообще один коннект.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634074
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov и тогда это вообще один коннект.
в одном коннекте параллельные операции невозможны.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634088
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovГлавная задача - дать приложению возможность адекватно реагировать на юзерские действия.

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

Открывать запросы в потоке это хорошо, но при этом следует запросы писать так, чтобы
открытие и получение первой записи было быстрее реакции пользователя. А для этого надо
особым образом проектировать БД.

Фетчить записи в потоке это хорошо, но с наследниками TDataSet не работает.

Строить отчёты в потоке это хорошо, но см. предыдущие два пункта.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634090
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovФетчить записи в потоке это хорошо, но с наследниками TDataSet не работает.

Почему не работает? Что случилось с TDataset?
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634091
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovV.BorzovГлавная задача - дать приложению возможность адекватно реагировать на юзерские действия.

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

Открывать запросы в потоке это хорошо, но при этом следует запросы писать так, чтобы
открытие и получение первой записи было быстрее реакции пользователя. А для этого надо
особым образом проектировать БД.

Фетчить записи в потоке это хорошо, но с наследниками TDataSet не работает.

Строить отчёты в потоке это хорошо, но см. предыдущие два пункта.


Открываю форму, запускаю запрос, пока он идет открываю такую же, запускаю запрос, ещё и еще, все 8 ядер нагружены по самое не хочу, полет нормальный. Сообщить потоку о своем желании его остановить могу в любой момент, а сам поток отзовется между фетчами. Проблем нет. Не знаю, что у Вас там не работает.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634092
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovЧто случилось с TDataset?

BDE-шная архитектура fetch-on-demand с ним случилась.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634259
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzovвсе 8 ядер нагружены по самое не хочу, полет нормальный
эээ. чем они нагружены? фетчем данных с сервера, что-ль?
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634261
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvV.Borzovвсе 8 ядер нагружены по самое не хочу, полет нормальный
эээ. чем они нагружены? фетчем данных с сервера, что-ль?
Вот сейчас запустил 5 одинаковых отчетов, на 8 ядрах сам файерберд-процесс (третий суперсервер) - 60% процессорного времени, приложение - 6%.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634266
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По CachedUpdates (ну, или poDontCloseAfterEndTransaction), я писал про полученные ошибки жуткие, такая история получилась:

Удалять транзакцию или удалять датабейз после открытия данных, ни в коем случае нельзя, конечно, но деактивировать транзакцию и сам коннект - можно. Только вылез ньюанс, который не заметен, если транзакцию закрываем, а коннект оставляем открытым, но приводит к ошибке "database is not open", если не просто закрыть транзакцию, но и отконнектиться. Выглядит так: открываем данные выводим в грид, делаем дисконнект, вроде всё отфетчено, как и положено, но те поля TFibStringField и TFibWideStringField, и которые оказались в отображенном гриде правее области отрисовки, они оказались не препарированными ( FPrepared = false у них), и когда при прокрутке на них происходит попытка их отрисовки в гриде, поля требуют коннекта. То есть, вроде бы отконнектились, а в буфер-то данные не прочитали.

Вот такой костыль: for i := 0 to fieldcount-1 do fields[i].asvariant , выполненный перед закрытием коннекта, устраняет ошибку. Я же прямо в TFIBCustomDataSet.DoDatabaseDisconnecting и TFIBCustomDataSet.DoTransactionEnding воткнул сразу после FetchAll вот это:

Код: pascal
1.
2.
3.
for i := 0 to FieldsCount-1 do 
        if Fields[i] is TFIBStringField then (Fields[i] as TFIBStringField).GetDataToReserveBuffer
        else if Fields[i] is TFIBWideStringField then (fields[i] as TFIBStringField).GetDataToReserveBuffer;



Не знаю, работает пока :)
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634268
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvV.Borzov и тогда это вообще один коннект.
в одном коннекте параллельные операции невозможны.
Да, согласен. Направил все потоки на один FibDatabase, вышло забавно: он всё отрулил, не упал, данные выдал корректные. Но отсемафорил, естественно, всё в одном своем потоке. запусти хоть 5 хоть 10 потоков, без разницы. Такая схема работы, конечно, на фиг не нужна, разве что только в качестве аварийного случая. А так- если уже подключаться, то каждый раз отдельным коннектом. Однако это всё равно с точки зрения интерфейса всё выглядело лучше, чем Application.processMessages :)
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634272
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov,

что-то мне эти откровения про FIBplus кажутся бессмысленными. Эксперимент ради эксперимента?
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634274
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvV.Borzov,

что-то мне эти откровения про FIBplus кажутся бессмысленными. Эксперимент ради эксперимента?

Вы про один коннект на все потоки? Ну, когда пройден путь с разными коннектами, почему не проверить, как это работает с одним коннектом, раз умные люди пишут, что fibPlus настолько ThreadSafe. И еще был когда-то давным-давно затык с какими-то там версиями виндов, когда количество подключений к серверу базы оказалось ограничено.... Может, этого нет уже ничего, но почему бы не перебдеть (а то наплодим коннектов), если это почти ничего не стоит по затратам :) А вот отчеты в отдельных потоках с отдельными коннектами - это обязательно. Стараюсь во всех отчетах этого придерживаться сейчас. Кроме, конечно, отображения справочников, там тупо открываем первые строчки, в потоке приложения, а потом дофетчиваем по 21 строке по Application.idle.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634275
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovВы про один коннект на все потоки?
нет, я вообще про ваши изыскания в этом топике.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634276
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzovраз умные люди пишут, что fibPlus настолько ThreadSafe
да не в fibplus дело, а в клиенте ФБ, который потокобезопасный только с версии 2.5. И вообще, нет у sql-серверов "мультипотоковых коннектов".
V.BorzovИ еще был когда-то давным-давно затык с какими-то там версиями виндов, когда количество подключений к серверу базы оказалось ограничено.
ага, и затык этот был в антивирусе (или клиенте прокси).
V.BorzovА вот отчеты в отдельных потоках с отдельными коннектами - это обязательно
кому это надо? Вы на работу пользователей в своем приложении хоть раз смотрели? Или вы такие отчетные запросы пишете, что они у вас по 20 минут выполняются?
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634310
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvОтсюда вопрос - нафига тогда у вас в приложении "треды для отчетов"?Чтобы получать отчеты, внезапно. Мои юзеры, кто реально собирает долгоиграющие отчеты, любят потом крутить оные в экселе, поэтому в начале треда задается что надо получить и куда положить, после тред рапортует, что эксель совметимую хмл-ку можно забирать в том каталоге, куда юзер сказал ее положить. К тому же еще и втихаря юзер перебрасывается на вспомогательный сервер, чтобы не создавал пиковых нагрузок рабочему серверу.

Предлагаешь запустить полдюжины АРМ-ов в большей части которых будет висеть ждалка-прогресс бар?
Ненавижу ждалки и прогресс бары.

Короче не вижу смысла борьбы с тредами, зело напоминает Дон Кихота.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634313
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvИли вы такие отчетные запросы пишете, что они у вас по 20 минут выполняются?И такие тоже и что?

Предвосхищая следующий вопрос, скажу, что ночью сервер занят сильнее, чем днем. агрегирует, подготавливает отчеты и проводит регламеты типа бэапа, свипа и т.п. Чтоб днем на лету вычислять поменьше.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634314
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyНенавижу ждалки и прогресс бары.А поток, который xml готовит - он это молча делает?
Т.е. юзер нажил "сформировать" - и всё пропало, а через два часа внезапный MessageBox с текстом "заберите в c:\users\... свою xml"? Точно так, без ждалок? )
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634317
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

а почему бы и нет. Вот только я бы отличал относительно оперативные отчёты которые готовит FastReport, и когда что-то сохраняется в файлы для просмотра потом. Вторые можно и в фоне готовить
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634323
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockIvan_PisarevskyНенавижу ждалки и прогресс бары.А поток, который xml готовит - он это молча делает?
Т.е. юзер нажил "сформировать" - и всё пропало, а через два часа внезапный MessageBox с текстом "заберите в c:\users\... свою xml"? Точно так, без ждалок? )Да. Не совсем пропало, тот пункт меню, где был вызов блокируется с надписью, что идет сбор отчета. И на выходе предупреждает, что не стОит сейчас выходить, т.к. идут фоновые процессы.
Симонов Денисотчёты которые готовит FastReportНу эти-то все на лету в реальном времени показываются.
...
Рейтинг: 0 / 0
Можно ли держать читающую трансакцию открытой всё время работы приложения?
    #39634331
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyНе совсем пропало, тот пункт меню, где был вызов блокируется с надписью, что идет сбор отчетаХм. Интересный дизайнерский подход.
Ivan_PisarevskyИ на выходе предупреждает, что не стОит сейчас выходить, т.к. идут фоновые процессыНу это понятно. Не без запроса же TerminateProcess делать.
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли держать читающую трансакцию открытой всё время работы приложения?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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