|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Здравствуйте, Прошу подсказать: есть ли какие-то противопоказания к subj? Не накапливается ли мусор? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 21:37 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzov, http://www.ibase.ru/ibtrans/ http://www.ibase.ru/ibx/ транзакции read read committed начиная с InterBase 6 стартуют типа сразу как committed, поэтому не влияют на "накопление версий". "Накопление мусора" - терминологически некорректно, потому что мусор убирается. А вот удержание активными транзакциями версий от превращения в мусор - это да, плохо. За исключением read read committed. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 22:20 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Я бы сказал так: в умелых руках это безопасно, но в целом - очень плохой знак типа "тут говнокод". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 22:20 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЯ бы сказал так: в умелых руках это безопасно, но в целом - очень плохой знак типа "тут говнокод". Если все-таки необходимо длительное время отображать результат Select-а на мониторе клиента, как лучше/безопаснее/надежнее сделать? - CommitRetaining - что-то другое? Select выполняется с уровнем изоляции Read Committed. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 08:42 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
sg729Dimitry SibiryakovЯ бы сказал так: в умелых руках это безопасно, но в целом - очень плохой знак типа "тут говнокод". Если все-таки необходимо длительное время отображать результат Select-а на мониторе клиента, как лучше/безопаснее/надежнее сделать? - CommitRetaining - что-то другое? Select выполняется с уровнем изоляции Read Committed. Перестать использовать идиотские компоненты для которых "завершение транзакции== закрытие датасета" Правда не уверен что такие есть. У меня самодельный :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 08:50 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
fraks, такие уже давно есть, только они требует полного фетча резалтсета ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 09:24 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
frakssg729пропущено... Если все-таки необходимо длительное время отображать результат Select-а на мониторе клиента, как лучше/безопаснее/надежнее сделать? - CommitRetaining - что-то другое? Select выполняется с уровнем изоляции Read Committed. Перестать использовать идиотские компоненты для которых "завершение транзакции== закрытие датасета" Правда не уверен что такие есть. У меня самодельный :) Использую FIB+ 7.5 (офиц.купленные). Подскажите не идиотские -) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 09:40 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
sg729Использую FIB+ 7.5 (офиц.купленные). Подскажите не идиотские -)В FIB+ есть режим CachedUpdates. Ещё есть разные memory dataset'ы. И да, собственный dataset лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:19 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
dennis-rsg729Использую FIB+ 7.5 (офиц.купленные). Подскажите не идиотские -)В FIB+ есть режим CachedUpdates. Ещё есть разные memory dataset'ы. И да, собственный dataset лучше. Если правильно понимаю раздел "Использование кэшированных изменений" в FIBPlus Developers Guide, CachedUpdates предназначен для кэширования изменений. Разве он влияет на чтение? dennis-rЕщё есть разные memory dataset'ы. Клиентские компы слабые - мало оперативки. Нет ли здесь тупика? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:59 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
sg729Если правильно понимаю раздел "Использование кэшированных изменений" в FIBPlus Developers Guide, CachedUpdates предназначен для кэширования изменений. Разве он влияет на чтение?Он позволяет считать данные и вообще отключиться от базы. sg729dennis-rЕщё есть разные memory dataset'ы. Клиентские компы слабые - мало оперативки. Нет ли здесь тупика?Если не выгребать миллионы записей, то никаких проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 11:08 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
sg729Клиентские компы слабые - мало оперативки. Нет ли здесь тупика? Это тупик если, во-первых, плохой разработчик приложения решил отображать весь триллион записей и во-вторых, плохие компоненты этот дикий резалт-сет умеют держать исключительно в ОЗУ. Устрани любую кривизну из этих двух и проблем со слабыми компами не будет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 11:39 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
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 ?????? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 13:01 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
sg729Если все-таки необходимо длительное время отображать результат Select-а на мониторе клиента, как лучше/безопаснее/надежнее сделать? я же дал ссылку. Пропиши в параметрах транзакции read read_committed rec_version sg729- CommitRetaining это зло, не надо его использовать. sg729Select выполняется с уровнем изоляции Read Committed. просто read committed недостаточно. См. выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 13:23 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
dennis-r, Dimitry Sibiryakov, kdv Спасибо за помощь! -) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 09:00 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Всем спасибо. Убираю длинные читающие транзакции. И тут сильно поможет 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 для полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 16:18 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
20.04.2018 16:18, V.Borzov пишет: > Однако напоролся на проблему, пытаюсь сейчас локализовать. А выглядит она так 1. Делфи ту никто не знает. 2. Плюсы никем не саппортятся. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 16:25 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Мимопроходящий, Об этом выше речь шла. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 16:38 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
20.04.2018 16:38, V.Borzov пишет: > Об этом выше речь шла. и что? читай по буквам: ЗДЕСЬ НЕ ТУТ! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 17:31 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzov, а для зачем ты загружаешь датасет в отдельном треде? Все равно же, пока не завершится процесс загрузки, работать не сможешь, в чем профит? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 17:34 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzov Убираю длинные читающие транзакции зачем??? с read read_committed ведь все хорошо. V.BorzovУдаление Database нужно для возможности заполнения датасета в отдельном потоке. ну началось... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 17:53 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvну началось... Ещё в самом начале я написал про очень-очень плохой знак. И вот мы видим подтверждение этого в действии. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:10 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvV.Borzov Убираю длинные читающие транзакции зачем??? с read read_committed ведь все хорошо. V.BorzovУдаление Database нужно для возможности заполнения датасета в отдельном потоке. ну началось... Как правильный программист должен делать селфи [spoiler] ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:27 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvзачем??? с read read_committed ведь все хорошо. Спасибо, я понял. Но если есть техническая возможность закрыть всё лишнее за собой, то почему бы это не сделать. КотовасияV.Borzov, а для зачем ты загружаешь датасет в отдельном треде? Все равно же, пока не завершится процесс загрузки, работать не сможешь, в чем профит? Гружу отчет, пока отчет грузится, приложение адекватно реагирует на запросы пользователя, вплоть до того, что можно еще пару отчетов открыть и загрузить. В варианте, когда поток отрабатывает с отдельным коннектом, требуется отдельный database. В случае, если возвращаемый в форму датасет является tpFibdataset, ему требуется оставлять открытым и транзакцию, с помощью которой он загрузил данные, и этот датабейс, который создан был в потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:37 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, У меня аж сердце ёкнуло, когда молотком по объективу... Фотодизайнеры - козлы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:41 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.BorzovГружу отчет, пока отчет грузится, приложение адекватно реагирует на запросы пользователя, вплоть до того, что можно еще пару отчетов открыть и загрузить. Для создания таких приложений следует забыть про DB-aware, которое рассчитано исключительно на мышекликанье поделок класса фишфак и начать-таки программировать. Для начала можешь посмотреть на MVC паттерн (в котором из хороших идей только инкапсуляция отображения данных и отрыв его от процесса получения данных, но и то уже хлеб). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:47 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovV.BorzovГружу отчет, пока отчет грузится, приложение адекватно реагирует на запросы пользователя, вплоть до того, что можно еще пару отчетов открыть и загрузить. Для создания таких приложений следует забыть про DB-aware, которое рассчитано исключительно на мышекликанье поделок класса фишфак и начать-таки программировать. Для начала можешь посмотреть на MVC паттерн (в котором из хороших идей только инкапсуляция отображения данных и отрыв его от процесса получения данных, но и то уже хлеб). Чего-то я Вас не пойму. В чем проблема-то? Открываем отдельный коннект, загружаем данные, передаем форме. Ньюансы лишь в том, в какой форме передаем данные. Почему бы приложению не открыть параллельно еще пару отчетов и не включить на их выполнение? FibPlus позволяет, не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:54 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzovплоть до того, что можно еще пару отчетов открыть и загрузить. где ты такую хрень видел? Это только в трехзвенном сервере отчетов отчеты параллельно выполняются, сохраняются, и выдаются пользователю потом, по запросу. В общем - для briefcase надо использовать TClientDataSet. Параллельно запросы работают только в разных коннектах к БД. Раз надо несколько коннектов - значит надо. Коннект с активной транзакцией read read_committed никак не нагружает сервер. В общем, фигней вы занимаетесь, гражданин. Что с потоками, что с CachedUpdates. Нельзя вот так взять, и сразу собрать трактор, если не знать как устроен двигатель, и прочее. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 18:54 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.BorzovВ чем проблема-то? Открываем отдельный коннект, загружаем данные, передаем форме. Практически во всём. Начиная с того, что уже тут мы откладываем "передачу данных" на конец загрузки. А всё это время пользователь наблюдает пустую форму. И да, параллельно можно ещё пар отчётов запустить, вот только, насколько я помню, FastReport так и не научился строить их в фоне, он "унутре" мается всякой фигнёй, начиная с Application.PrecessMessages. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 19:00 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvV.Borzovплоть до того, что можно еще пару отчетов открыть и загрузить. где ты такую хрень видел? Это только в трехзвенном сервере отчетов отчеты параллельно выполняются, сохраняются, и выдаются пользователю потом, по запросу. В общем - для briefcase надо использовать TClientDataSet. Параллельно запросы работают только в разных коннектах к БД. Раз надо несколько коннектов - значит надо. Коннект с активной транзакцией read read_committed никак не нагружает сервер. В общем, фигней вы занимаетесь, гражданин. Что с потоками, что с CachedUpdates. Нельзя вот так взять, и сразу собрать трактор, если не знать как устроен двигатель, и прочее. Я и сказал про отдельный коннект к БД. И больше проблем не вижу. Вопрос только в том, держать ли этот коннект и дальше, если возвращаемый датасет является TpFibDataset, пока юзер форму не закроет (я так и делаю), или можно всё закрыть, оставив его открытым с помощью CachedUpdates. С TClientDataset всё проще, но затраты на перекачивание данных в него бывают иногда достаточно большими, и лучше уж прямо TpFibDataset передать. Писали тут на форуме, что можно и одним коннектом в FibPlus даже обойтись. Я тестировал, вроде и правда всё работает, но на практике клиенты пока это не гоняют. Вопрос мой про длинную активную транзакцию никак не пересекается с этим вопросом, не пугайтесь Вы :) Просто в топике зашел разговор о cachedupdates, а я еще попытался избавиться с помощью этого CachedUpdates и от самого отдельного коннекта в отдельном потоке, это третья тема :) Но поднял их тут не я. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 19:10 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovV.BorzovВ чем проблема-то? Открываем отдельный коннект, загружаем данные, передаем форме. Практически во всём. Начиная с того, что уже тут мы откладываем "передачу данных" на конец загрузки. А всё это время пользователь наблюдает пустую форму. И да, параллельно можно ещё пар отчётов запустить, вот только, насколько я помню, FastReport так и не научился строить их в фоне, он "унутре" мается всякой фигнёй, начиная с Application.PrecessMessages. Любой отчет чтобы получить, нужно дождаться окончания его расчета. А как иначе? Или я Вас не понял. Поэтому в любом случае юзер сидит и смотрит на пустую форму. Неужели Вы считаете, что Application.ProcessMessages - это достойная замена выполнению в отдельном потоке? А насчет маяться фигней - ну, частенько клиенты открывают другой экземпляр приложения, чтобы, пока "грузится отчет", что-то другое поделать. Так что почему бы не дать им возможность делать это прямо в этом же экземпляре приложения? Насчет FastReport: да, много самостоятельных отчетов накопилось в нем в старой системе, и просто скриптов, выдающих в результате не всегда даже и фастрепортовские отчеты, а просто таблицы в эксель, и надо будет с этим что-то решать, но умные люди пишут, что и он могет threadsafe работать, и всё у них получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 19:18 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.BorzovDimitry Sibiryakovпропущено... Для создания таких приложений следует забыть про DB-aware, которое рассчитано исключительно на мышекликанье поделок класса фишфак и начать-таки программировать. Для начала можешь посмотреть на MVC паттерн (в котором из хороших идей только инкапсуляция отображения данных и отрыв его от процесса получения данных, но и то уже хлеб). Чего-то я Вас не пойму. В чем проблема-то? Открываем отдельный коннект, загружаем данные, передаем форме. Ньюансы лишь в том, в какой форме передаем данные. Почему бы приложению не открыть параллельно еще пару отчетов и не включить на их выполнение? FibPlus позволяет, не так? А свести все дела в одно приложение - это вопрос принципа? Ну, чтобы на экране торчали друг из-под друга пяток окон с таблицами отчётов, пяток с графиками, в половине открыты лукапные формяжки со справочниками, в половине формяшки редактирования и в них тоже лукапы и тэ дэ и тэ пэ... Ну, чтобы ползатель покрепче запутался где он и кто он. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 21:56 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Старый плюшевый мишкаА свести все дела в одно приложение - это вопрос принципа? Ну, чтобы на экране торчали друг из-под друга пяток окон с таблицами отчётов, пяток с графиками, в половине открыты лукапные формяжки со справочниками, в половине формяшки редактирования и в них тоже лукапы и тэ дэ и тэ пэ... Ну, чтобы ползатель покрепче запутался где он и кто он. А чем это лучше пяти открытых приложений с теми же формами? Да и потом, это одна из задач, а другая - сделать приложение адекватно реагирующим на команды пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 22:06 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
чем это хуже, хотел я сказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 22:07 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzovчем это хуже, хотел я сказать. Ориентироваться в 5 SDI через альт-таб или трей, понимая куда и зачем идёшь, пользователю гораздо проще, чем в разлапистом MDI с непрогнозируемыми перекрытиями. Мне так кажется. И программисту тоже жить проще - пространство для всяких коллизий сужено. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 22:21 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Старый плюшевый мишкаV.Borzovчем это хуже, хотел я сказать. Ориентироваться в 5 SDI через альт-таб или трей, понимая куда и зачем идёшь, пользователю гораздо проще, чем в разлапистом MDI с непрогнозируемыми перекрытиями. Мне так кажется. И программисту тоже жить проще - пространство для всяких коллизий сужено. Я тут с Вами поспорю: Во-первых, надо давать пользователю возможность работы как в MDI, так в SDI. Во-вторых, пусть пользователь сам решает, удобнее ли ему открыть пять раз одно приложение, или открыть в одном приложении пять отчетов. И тут в полный рост может встать проблема использования локальных ресурсов приложения, таких как инишки, например. Ибо пять приложений будут работать с одним и тем же ini-файлом. Это к примеру. То есть, к базе получаем комфортный для программиста доступ, но задаем ему задачки разделения между приложениями локальных ресурсов. В-третьих, вопрос возможности выполнения запросов в отдельном потоке нужен далеко не только для того, чтобы юзер мог открыть одновременно 5 форм, а, еще раз говорю, для адекватной реакции приложения на юзерские команды. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 22:28 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzov, расскажите мне, какая разница между - вашим мультитредовым приложением, которое позволяет запустить отчет и параллельно делать что-то другое - двумя приложениями, в одном запущен отчет, в другом делается что-то другое. С точки зрения СУБД это один хрен два коннекта, причем с одного компа или разных, СУБД пофиг. С точки зрения клиента - по идее, ему может быть проще запустить именно два приложения, чем рыться в кнопках "отчет готовится" и прочем. Я может откровение выдам - юзеры запускают приложение по 2-3 экземпляра даже если долго и параллельно в них ничего не делается. Кроме того, что запретит юзеру запустить ваше параллельное приложение, нажать там кнопку "сделать отчет", и вместо тыканья в этом же приложении запустить второй экземпляр приложения? Отсюда вопрос - нафига тогда у вас в приложении "треды для отчетов"? Я прекрасно понимаю, что замутить что-то параллельное и "вот эдакое" для программиста - хлебом не корми. Но в глубине души вы вероятно сами понимаете, что практический выхлоп от этого будет практически нулевой. Ну разве что, кроме приобретенного опыта (что само по себе весьма ценно). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 00:35 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdv, Возможность запуска нескольких отчетов всплыла как приятный бонус, это не было целью. Главная задача - дать приложению возможность адекватно реагировать на юзерские действия. Однако, если такая возможность есть, то уж лучше пусть это делается в одном приложении. Это - на мой взгляд, и не вижу тут предмета спора, чистая вкусовщина. Даем возможность юзеру, а он пусть сам решает. Тем более, что с вопросами запуска нескольких приложений могут возникнуть другие проблемы (работа с локальными данными, не рассчитанными на мультиюзерскую работу, tinifile, например). А возможность такую дают, как ВЫ заметили, и сам Firebird, и, вроде как теоретически и FibPlus (подключение нескольких потоков через один TpFibDatabase), и тогда это вообще один коннект. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 00:52 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzov и тогда это вообще один коннект. в одном коннекте параллельные операции невозможны. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 09:24 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.BorzovГлавная задача - дать приложению возможность адекватно реагировать на юзерские действия. И решаешь ты эту задачу проктостоматологическими методами. И вроде бы каждый отдельный компонент решения нормален, но ты их так сваливаешь в кучу, что получается кучка. Открывать запросы в потоке это хорошо, но при этом следует запросы писать так, чтобы открытие и получение первой записи было быстрее реакции пользователя. А для этого надо особым образом проектировать БД. Фетчить записи в потоке это хорошо, но с наследниками TDataSet не работает. Строить отчёты в потоке это хорошо, но см. предыдущие два пункта. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 11:42 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovФетчить записи в потоке это хорошо, но с наследниками TDataSet не работает. Почему не работает? Что случилось с TDataset? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 11:53 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovV.BorzovГлавная задача - дать приложению возможность адекватно реагировать на юзерские действия. И решаешь ты эту задачу проктостоматологическими методами. И вроде бы каждый отдельный компонент решения нормален, но ты их так сваливаешь в кучу, что получается кучка. Открывать запросы в потоке это хорошо, но при этом следует запросы писать так, чтобы открытие и получение первой записи было быстрее реакции пользователя. А для этого надо особым образом проектировать БД. Фетчить записи в потоке это хорошо, но с наследниками TDataSet не работает. Строить отчёты в потоке это хорошо, но см. предыдущие два пункта. Открываю форму, запускаю запрос, пока он идет открываю такую же, запускаю запрос, ещё и еще, все 8 ядер нагружены по самое не хочу, полет нормальный. Сообщить потоку о своем желании его остановить могу в любой момент, а сам поток отзовется между фетчами. Проблем нет. Не знаю, что у Вас там не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 12:03 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.BorzovЧто случилось с TDataset? BDE-шная архитектура fetch-on-demand с ним случилась. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 12:08 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzovвсе 8 ядер нагружены по самое не хочу, полет нормальный эээ. чем они нагружены? фетчем данных с сервера, что-ль? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 22:23 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvV.Borzovвсе 8 ядер нагружены по самое не хочу, полет нормальный эээ. чем они нагружены? фетчем данных с сервера, что-ль? Вот сейчас запустил 5 одинаковых отчетов, на 8 ядрах сам файерберд-процесс (третий суперсервер) - 60% процессорного времени, приложение - 6%. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 22:51 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
По 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.
Не знаю, работает пока :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 23:08 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvV.Borzov и тогда это вообще один коннект. в одном коннекте параллельные операции невозможны. Да, согласен. Направил все потоки на один FibDatabase, вышло забавно: он всё отрулил, не упал, данные выдал корректные. Но отсемафорил, естественно, всё в одном своем потоке. запусти хоть 5 хоть 10 потоков, без разницы. Такая схема работы, конечно, на фиг не нужна, разве что только в качестве аварийного случая. А так- если уже подключаться, то каждый раз отдельным коннектом. Однако это всё равно с точки зрения интерфейса всё выглядело лучше, чем Application.processMessages :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 23:17 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzov, что-то мне эти откровения про FIBplus кажутся бессмысленными. Эксперимент ради эксперимента? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2018, 23:57 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvV.Borzov, что-то мне эти откровения про FIBplus кажутся бессмысленными. Эксперимент ради эксперимента? Вы про один коннект на все потоки? Ну, когда пройден путь с разными коннектами, почему не проверить, как это работает с одним коннектом, раз умные люди пишут, что fibPlus настолько ThreadSafe. И еще был когда-то давным-давно затык с какими-то там версиями виндов, когда количество подключений к серверу базы оказалось ограничено.... Может, этого нет уже ничего, но почему бы не перебдеть (а то наплодим коннектов), если это почти ничего не стоит по затратам :) А вот отчеты в отдельных потоках с отдельными коннектами - это обязательно. Стараюсь во всех отчетах этого придерживаться сейчас. Кроме, конечно, отображения справочников, там тупо открываем первые строчки, в потоке приложения, а потом дофетчиваем по 21 строке по Application.idle. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 00:12 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.BorzovВы про один коннект на все потоки? нет, я вообще про ваши изыскания в этом топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 00:56 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
V.Borzovраз умные люди пишут, что fibPlus настолько ThreadSafe да не в fibplus дело, а в клиенте ФБ, который потокобезопасный только с версии 2.5. И вообще, нет у sql-серверов "мультипотоковых коннектов". V.BorzovИ еще был когда-то давным-давно затык с какими-то там версиями виндов, когда количество подключений к серверу базы оказалось ограничено. ага, и затык этот был в антивирусе (или клиенте прокси). V.BorzovА вот отчеты в отдельных потоках с отдельными коннектами - это обязательно кому это надо? Вы на работу пользователей в своем приложении хоть раз смотрели? Или вы такие отчетные запросы пишете, что они у вас по 20 минут выполняются? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 01:00 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvОтсюда вопрос - нафига тогда у вас в приложении "треды для отчетов"?Чтобы получать отчеты, внезапно. Мои юзеры, кто реально собирает долгоиграющие отчеты, любят потом крутить оные в экселе, поэтому в начале треда задается что надо получить и куда положить, после тред рапортует, что эксель совметимую хмл-ку можно забирать в том каталоге, куда юзер сказал ее положить. К тому же еще и втихаря юзер перебрасывается на вспомогательный сервер, чтобы не создавал пиковых нагрузок рабочему серверу. Предлагаешь запустить полдюжины АРМ-ов в большей части которых будет висеть ждалка-прогресс бар? Ненавижу ждалки и прогресс бары. Короче не вижу смысла борьбы с тредами, зело напоминает Дон Кихота. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 11:34 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
kdvИли вы такие отчетные запросы пишете, что они у вас по 20 минут выполняются?И такие тоже и что? Предвосхищая следующий вопрос, скажу, что ночью сервер занят сильнее, чем днем. агрегирует, подготавливает отчеты и проводит регламеты типа бэапа, свипа и т.п. Чтоб днем на лету вычислять поменьше. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 11:39 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyНенавижу ждалки и прогресс бары.А поток, который xml готовит - он это молча делает? Т.е. юзер нажил "сформировать" - и всё пропало, а через два часа внезапный MessageBox с текстом "заберите в c:\users\... свою xml"? Точно так, без ждалок? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 11:40 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
YuRock, а почему бы и нет. Вот только я бы отличал относительно оперативные отчёты которые готовит FastReport, и когда что-то сохраняется в файлы для просмотра потом. Вторые можно и в фоне готовить ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 11:47 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
YuRockIvan_PisarevskyНенавижу ждалки и прогресс бары.А поток, который xml готовит - он это молча делает? Т.е. юзер нажил "сформировать" - и всё пропало, а через два часа внезапный MessageBox с текстом "заберите в c:\users\... свою xml"? Точно так, без ждалок? )Да. Не совсем пропало, тот пункт меню, где был вызов блокируется с надписью, что идет сбор отчета. И на выходе предупреждает, что не стОит сейчас выходить, т.к. идут фоновые процессы. Симонов Денисотчёты которые готовит FastReportНу эти-то все на лету в реальном времени показываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 12:09 |
|
Можно ли держать читающую трансакцию открытой всё время работы приложения?
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyНе совсем пропало, тот пункт меню, где был вызов блокируется с надписью, что идет сбор отчетаХм. Интересный дизайнерский подход. Ivan_PisarevskyИ на выходе предупреждает, что не стОит сейчас выходить, т.к. идут фоновые процессыНу это понятно. Не без запроса же TerminateProcess делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2018, 13:08 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561144]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
135ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
1ms |
others: | 297ms |
total: | 559ms |
0 / 0 |