SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » ANN: Статья "Передача BLOB по сети в Firebird"
ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5987] Mon, 24 March 2025 12:49 Переход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 350
Зарегистрирован: June 2022
Senior Member
В HQbird 2024R2 Update 2 и Firebird 5.0.3 значительно улучшена передача коротких BLOB по сети (см. Революция BLOB)

Подробное описание того как передаются BLOB по сети и что было улучшено в версиях Firebird 5.0.2 и 5.0.3 читайте в статье Передача BLOB по сети в Firebird
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5990 является ответом на сообщение #5987] Wed, 26 March 2025 12:01 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 81
Зарегистрирован: July 2022
Member
Замечательно!

Единственно, что, как мне кажется, кэш блобов на клиенте (10 Мб) быстро заполнится и перестанет работать. Наверное, правильнее было бы при нехватке места высвобождать старые блобы, а не запрещать добавление новых.

P.S. В текущих версиях использую cast(substring(blob_field from 1 for 255) as varchar(255)) при отображении данных блоб-полей в таблицах.
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5991 является ответом на сообщение #5990] Wed, 26 March 2025 16:06 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 371
Зарегистрирован: August 2022
Senior Member
ggreggory писал(а) Wed, 26 March 2025 11:01
Замечательно!

Единственно, что, как мне кажется, кэш блобов на клиенте (10 Мб) быстро заполнится и перестанет работать.
И почему это так кажется ?
Цитата:
Наверное, правильнее было бы при нехватке места высвобождать старые блобы, а не запрещать добавление новых.
Ещё правильнее было бы читать блобы по мере их поступления, а не запихивать в кеш "на всякий случай".
Кроме того, чем "новые" блобы лучше "старых" ?

PS кому мало 10МБ - размером кеша можно управлять
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5992 является ответом на сообщение #5991] Thu, 27 March 2025 01:31 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 435
Зарегистрирован: August 2022
Senior Member
А они из кэша удаляются после вычитки приложением?
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5993 является ответом на сообщение #5991] Thu, 27 March 2025 15:00 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 81
Зарегистрирован: July 2022
Member
hvlad писал(а) Wed, 26 March 2025 16:06
И почему это так кажется ?

Это я написал чисто "теоретически", просто похожая ситуация была с execute statement до появления кэша запросов. Там или 15, или 16 записей запоминается и дальше всё тормозит.

Тут нужна практика использования.

SD писал(а) Thu, 27 March 2025 01:31
А они из кэша удаляются после вычитки приложением?

В статье написано - удаляет. Единственно, не понял что в старых библиотеках, это isc_close_blob что ли? И что произойдет при закрытии транзакции, блобы останутся?
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5994 является ответом на сообщение #5993] Thu, 27 March 2025 15:17 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 435
Зарегистрирован: August 2022
Senior Member
BLOB ID гарантируется только в пределах транзакции (да и то не всегда). Поэтому закрывать транзакцию если хочешь читать блобы из записей, полученных в ней - нельзя.
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5995 является ответом на сообщение #5994] Thu, 27 March 2025 16:36 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 81
Зарегистрирован: July 2022
Member
SD писал(а) Thu, 27 March 2025 15:17
BLOB ID гарантируется только в пределах транзакции (да и то не всегда). Поэтому закрывать транзакцию если хочешь читать блобы из записей, полученных в ней - нельзя.

Это же какие-то новые "inline" блобы. Может переделали логику, непонятно. В статье так написано:

Цитата:
Отправленные inline BLOB-объекты кешируются на стороне клиента на уровне соединения (IAttachment).

т.е. как я понимаю, пока соединение не закроется, блобы продолжают жить в кэше. В том числе и при закрытии транзакции.
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5996 является ответом на сообщение #5992] Thu, 27 March 2025 19:47 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 371
Зарегистрирован: August 2022
Senior Member
SD писал(а) Thu, 27 March 2025 00:31
А они из кэша удаляются после вычитки приложением?
Да
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5997 является ответом на сообщение #5993] Thu, 27 March 2025 21:28 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 350
Зарегистрирован: June 2022
Senior Member
Цитата:
Единственно, не понял что в старых библиотеках, это isc_close_blob что ли?
Что подразумевается под старой библиотекой. Если это старый fbclient, то он в принципе не может использовать inline blob. Ибо для этого требуется новая версия сетевого протокола. Старые клиенты будут работать как раньше
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #5998 является ответом на сообщение #5997] Thu, 27 March 2025 21:31 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 350
Зарегистрирован: June 2022
Senior Member
Кеш inline blob действительно привязан к соединению. А вот что насчет очистки при завершении транзакции тут хз. Я так глубоко не копал. Тут пусть Влад уточнит
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #6000 является ответом на сообщение #5998] Thu, 27 March 2025 23:13 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 371
Зарегистрирован: August 2022
Senior Member
sim_84 писал(а) Thu, 27 March 2025 20:31
Кеш inline blob действительно привязан к соединению. А вот что насчет очистки при завершении транзакции тут хз. Я так глубоко не копал. Тут пусть Влад уточнит
Все блобы всегда привязаны к тр-ции, в которой были созданы или открыты.
Так что и кеш блобов очищается при завершении тр-ции.
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #6001 является ответом на сообщение #5993] Thu, 27 March 2025 23:16 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 371
Зарегистрирован: August 2022
Senior Member
ggreggory писал(а) Thu, 27 March 2025 14:00
hvlad писал(а) Wed, 26 March 2025 16:06
И почему это так кажется ?
Это я написал чисто "теоретически"
Понятно.

Цитата:
просто похожая ситуация была с execute statement до появления кэша запросов. Там или 15, или 16 записей запоминается и дальше всё тормозит.
Впервые слышу

Цитата:

SD писал(а) Thu, 27 March 2025 01:31
А они из кэша удаляются после вычитки приложением?
В статье написано - удаляет. Единственно, не понял что в старых библиотеках, это isc_close_blob что ли? И что произойдет при закрытии транзакции, блобы останутся?
да, isc_close_blob или isc_cancel_blob. При завершении тр-ции кеш блобов очищается.
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #6002 является ответом на сообщение #6001] Thu, 27 March 2025 23:36 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 84
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
hvlad писал(а) Thu, 27 March 2025 20:16
При завершении тр-ции кеш блобов очищается.
+1 причина не держать бесконечную читающую транзакцию
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #6003 является ответом на сообщение #6002] Thu, 27 March 2025 23:41 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 371
Зарегистрирован: August 2022
Senior Member
shavluk писал(а) Thu, 27 March 2025 22:36
hvlad писал(а) Thu, 27 March 2025 20:16
При завершении тр-ции кеш блобов очищается.
+1 причина не держать бесконечную читающую транзакцию
Ну... возможно. Вообще, нормальное приложение должно читать полученные блобы.
Ибо иначе зачем оно их получало Smile
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #6004 является ответом на сообщение #6003] Thu, 27 March 2025 23:46 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 84
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Если в приложении есть "select * from table" и в списке полей где-то затесался редкоиспользуемый блоб...
То, конечно, автор ССЗБ, но все же
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #6005 является ответом на сообщение #6004] Fri, 28 March 2025 00:13 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 350
Зарегистрирован: June 2022
Senior Member
shavluk писал(а) Thu, 27 March 2025 23:46
Если в приложении есть "select * from table" и в списке полей где-то затесался редкоиспользуемый блоб...
То, конечно, автор ССЗБ, но все же
Это можно регулировать на уровне каждого statement. То есть можно же указать MaxInlineBlobSize = 0 о чем и написано в статье
Re: ANN: Статья "Передача BLOB по сети в Firebird" [сообщение #6006 является ответом на сообщение #6004] Fri, 28 March 2025 00:49 Переход к предыдущему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 371
Зарегистрирован: August 2022
Senior Member
shavluk писал(а) Thu, 27 March 2025 22:46
Если в приложении есть "select * from table" и в списке полей где-то затесался редкоиспользуемый блоб...
То, конечно, автор ССЗБ, но все же
Что именно "всё же" ?
Предыдущая тема: ANN: Статья методы доступа используемые Firebird
Следующая тема: Полнотекстовый поиск для Firebird
Переход к форуму:
  


Текущее время: Fri Mar 28 23:54:46 GMT+3 2025

Общее время, затраченное на создание страницы: 0.01134 секунд