|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
В ходе переноса данных из удаленной базы данных на локальную обнаружил презабавный глюк, который вылавливал несколько часов. Приведу запросы полностью, чтоб что-то случайно не затереть, хотя все дело было в 2-х блоб-полях: CARDCOMMENTS и CARDPROPS, значение которых во всех записях - пустая строка (не нулл). Зная, что на форуме есть представители команды разработчиков ФБ, думаю, обратят на этот нюанс внимание. Итак - обычное извлечение 100 первых записей занимает у меня 24 секунды. Это очень много, так как записей 20 тыс. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
Как удалось повысить скорость на несколько порядков!!!!! - в селекте на удаленной БД приводим блоб-поле к типу varchar. И скорость выполнения запроса падает до 0,3 с!!!!!! Причем, объявление локальных переменных простого строкового типа ускорения не дало, только приведение типа в самом запросе. Настройки серверов ФБ что на локальной, что на удаленной машинах одинаковые, дефолтные, суперсервер, v3.0.4, соединение по ВПН по инету со скоростью 10мбит (не в инете дело) Вот слегка модифицированный предыдущий запрос, который решил проблему тормозов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 22:02 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFominне в инете дело Да нет, именно в нём. Ключевое слово "латентность". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 22:04 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin, это не баг, а особенность передачи BLOB по сети ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 22:13 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov GrigoriyFominне в инете дело Да нет, именно в нём. Ключевое слово "латентность". Если можно - поподробнее - как инет влияет на передачу пустой строки как блоба, и как varchar? Неужели 2 х 16кБайт блока данных с блобом вызывают ТАКИЕ тормоза? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 22:15 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис GrigoriyFomin, это не баг, а особенность передачи BLOB по сети Ну мож тогда этот аспект где-то осветить? ЗА 10 лет работы с ФБ в документации такого не встречал, хотя мож не заметил. Хорошо, а обычная работа с базой по сети тоже будет проявлять эту особенность блобов? Для пустой строки все равно будет гнаться 16кБ кусок данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 22:18 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin, для этого достаточно посмотреть Firebird API, а именно как осуществляется работа с БЛОБ и тогда всё станет ясно. В отличие от полей других типов Блобы не вытаскиваются сразу в записи при фетче. Вместо блобов вытаскивается только их идентификатор, а затем блоб надо открыть и прочитать все его сегменты. В случае простых типов в firebird есть оптимизация сетевого протокола, например префетч записей курсора. В случае блобов на каждый блоб приходится два дополнительных раудтрипа 1. открыть, 2 прочитать сегмент. Причём если блоб большой, то 2 ещё и может быть повторён много раз. GrigoriyFominзначение которых во всех записях - пустая строка (не нулл). а надо было хранить null, это позволило бы не открывать блоб вовсе экономя сетевые пакеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 22:34 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов ДенисВ случае блобов на каждый блоб приходится два дополнительных раудтрипа 1. открыть, 2 прочитать сегмент. Причём если блоб большой, то 2 ещё и может быть повторён много раз. Если верить последнему тикету в трекере, там после последнего сегмента какие-то странные тормоза происходят. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 22:36 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис GrigoriyFomin, В отличие от полей других типов Блобы не вытаскиваются сразу в записи при фетче. Вместо блобов вытаскивается только их идентификатор, а затем блоб надо открыть и прочитать все его сегменты. ..... В случае простых типов в firebird есть оптимизация сетевого протокола, например префетч записей курсора. В случае блобов на каждый блоб приходится два дополнительных раудтрипа 1. открыть, 2 прочитать сегмент. Причём если блоб большой, то 2 ещё и может быть повторён много раз. Но ведь физически даже после приведения типа все равно считывается блоб по своему обычному алгоритму - те же шаги проходят. Значит проблема при передаче самого блоба по сети. У меня сегмент БД установлен 16кБ, значит 2 блоб поля вынуждают гнать лишних 32кБ по сети. Но все равно как-то многовато - почти тысячекратная разница в передаче блоба и варчара, учитывая, что другие поля совсем не нулевые и тоже место в трафике занимают. 32кБ * 100 записей - это 3,2 МБ лишнего трафика, и на них тратиться аж 24с!!! Это при том, что вся таблица CARDS (20к записей) занимает в файле БД 8,2 МБ, умещается на 504 страницах и передается по новому SQL-коду за 9с. Получается сетевые расходы на 100 записей с 2-мя блобами = лишние 200 страниц за 24с, а вся таблица на 504 страницах (без блобов ессно) - за 8 с. Более чем 6-тикратное превышение времени передачи одного и того же количества страниц. Явно не в сетевом соединении узкое горлышко, и явно не в скорости считывания блоба из БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 22:57 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис В случае блобов на каждый блоб приходится два дополнительных раудтрипа 1. открыть, 2 прочитать сегмент. И ещё 1а прочитать инф-цию (необязательный, зависит от того, как написан код). Т.е. 3-4 раундтрипа. На каждый блоб. В каждой записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 23:09 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin, Что ты прицепился к этим несуществующим 16КБ ? Забудь про них. Пусть пинг в твоей интернет сети 10 мс (это весьма оптимистично) 2 блоба * 3 раундтрипа * 100 записей * 10 мс = 6 сек У тебя реально 24 сек ? Значит пинг около 40 мс. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 23:09 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin, я тебе по передачу блоба по сети и рассказывал. Ещё раз загляни в API как происходит работа с блобами. GrigoriyFominНо ведь физически даже после приведения типа все равно считывается блоб по своему обычному алгоритму - те же шаги проходят нет после того как ты привёл блоб к строке передавать его по сети как блоб уже не надо. По крайней мере в ES это самостоятельно определяется GrigoriyFominУ меня сегмент БД установлен 16кБ, значит 2 блоб поля вынуждают гнать лишних 32кБ по сети. ты не прав. Где ты этот размер сегмента устанавливаешь? Опять же ты считаешь какие-то мегабайты, а проблема не в них, а в количестве сетевых пакетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 23:15 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис, то есть вы намекаете, что при работе с удаленной базой данных обычные локальные процессы начинают происходить по сети? Я полагал, что запрос отрабатывает удаленный сервер, упаковывая готовые данные для транспортировке по сети. А по вашим описаниям то же многостадийное считывание блоба происходит по сети, генеря при этом кучу вспомогательных сетевых запросов? Насчет размера сегмента - имел ввиду размер страницы БД, который указываю при восстановлении ее из бэкапа. Устанавливаю 16кБ (макс.возможный) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 23:54 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFominкоторый указываю при восстановлении ее из бэкапа. размер страницы задается 1 раз при создании БД, и может быть изменен при восстановлении из бэкапа. Постоянно указывать при restore один и тот же размер страницы нет смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 10:54 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin, не надо искажать смысл моего ответа. Я не переходил с сетевого уровня на уровень движка. Вот что происходит схематично при работе с blob (полная семантику вызовов я не повторял) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Итак не каждый вызов rs->fetch() требует нового сетевого пакета, поскольку есть префетч и за один пакет может быть выбрано несколько записей, потом просто до поры до времени сетевой пакет не генерируется. Но блобы выбираются отдельно от fetch, который даёт только их id. А вот openBlob, get_segment и close требуют каждый раз новый сетевой пакет. Ну возможно есть кое-какая оптимизация в get_segment. Теперь понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 11:04 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
медленная скорость передачи блобов из базы в базу по сети с высокими пингами это мелочи. Я периодически получаю битые блобы. Сначала пересылал из базы в базу большие xml и они оказывались не валидными. Потом стал сжимать их gzip. И они не распаковывались на получателе. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 17:45 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
11.11.2019 17:45, vvvait пишет: > Потом стал сжимать их gzip. И они не распаковывались на получателе. у тебя ошибка в программе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 17:47 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
vvvait, напиши программу, которая миллион раз передаст сжатый файл, примет и проверит его. О количестве ошибок (с номерами блоков) напиши сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 19:46 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
vvvait медленная скорость передачи блобов из базы в базу по сети с высокими пингами это мелочи. Я периодически получаю битые блобы. Сначала пересылал из базы в базу большие xml и они оказывались не валидными. Потом стал сжимать их gzip. И они не распаковывались на получателе. Тоже такое было. Расследование всякий раз показывало, что это я нарукожопил. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 20:59 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё, к слову, риторически. что за проблема - взять два бинария, один исходный, другой из блоба (сохраненный сторонней программой в том числе), и сравнить их - посмотреть, где данные искорёжены. Если там повреждены начало или конец, так это софт. Если всё перепутано - так значит в блоб залито такое. А вот если где-то посередине - тогда, скорее всего, повреждено при передаче. ФБ что принял, то и сохранил. Если такой блоб целиком поврежден, я могу разве что списать на дефект памяти на компе, но и то, такие вещи опять же бинарным сравнением видны без монокля. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 21:03 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис, дабы окончательно понять - доступ к блобам удаленной БД происходит на удаленной стороне или на локальной? По идее я запрашиваю селект на удаленной БД и по сети должен передаться датасет с полями тех типов, которые в БД, то есть блобы должны по сети дергаться. Тогда это объясняет такую разницу в скорости доступа. Но поять-таки, неплохо это где-то в гайде написать, чтоб предостеречь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 21:19 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin доступ к блобам удаленной БД происходит на удаленной стороне или на локальной? Симонов Денис В отличие от полей других типов Блобы не вытаскиваются сразу в записи при фетче. Вместо блобов вытаскивается только их идентификатор, а затем блоб надо открыть и прочитать все его сегменты. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 21:25 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin, у вас какие-то совершенно дикие представления о том как работает клиент-сервер. Тебе же объяснили что чтение блобов просто отложенное. Естественно на стороне сервера оно читается движком, а затем передаётся по сети. Да по сети они передаются в несколько сетевых пакетов, но зато это позволяет читать очень большие блобы, ибо их не возможно поместить в буфер фиксированной ширины как для остальных типов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 21:51 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ошибки в передаче блобов наблюдаются редко, менее 1%, и только на каналах с большой и плавающей задержкой от 70 до 500 мс. это по вашему ошибка в программе? ну если только её имя fbserver ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 22:00 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
vvvaitэто по вашему ошибка в программе? ну если только её имя fbserver Эх, молодо-зелено... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 22:06 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
vvvait ошибки в передаче блобов наблюдаются редко, менее 1%, и только на каналах с большой и плавающей задержкой от 70 до 500 мс. это по вашему ошибка в программе? ну если только её имя fbserver Фигассе, "редко", 1%... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 22:37 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
_Vasilisk_ GrigoriyFomin доступ к блобам удаленной БД происходит на удаленной стороне или на локальной? Симонов Денис В отличие от полей других типов Блобы не вытаскиваются сразу в записи при фетче. Вместо блобов вытаскивается только их идентификатор, а затем блоб надо открыть и прочитать все его сегменты. так вопрос - кто их тащит - если удаленный ФБ, то это его внутренние локальные проблемы и по сети должен лететь уже готовый ответ без всяких дерганий дополнительных, если их по сети тащит локальный ФБ, тогда понятно, что он дергает базу как локальный сервер, где эти накладные расходы незаметны, а по сети, из-за чего резко возрастают тормоза. Только в чем тогда смысл удаленной СУБД? Файловый сервер? Если все работы по вытаскиванию блобов идут на локальной машине удаленно по сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:01 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис, вот, теперь ясность полная - локальный сервис работает с удаленной БД как с локальной, выполняя все обычные задачи, только по сети, из-за чего растут накладные расходы на передачу именно блобов. То есть это надо просто учитывать при разработке механизма работы с удаленной БД. И повторюсь третий раз - может стоит это описать где-то в документации, так как мне кажется логичнее, чтоб данные выдергивал удаленный ФБ, паковал их в сетевой пакет и передавал его запрашиваемому ФБ. Мы ж в синтаксисе так и указываем - сделай селект полей и запихни их в локальные переменные, то есть по сети должен прийти некий готовый датасет, подготовленный удаленным ФБ, который локальный ФБ распихает по переменным и будет уже с ними творить что хочет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:07 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin ...может стоит это описать где-то в документации... в "документации" указано, что если "клиентское приложение работает с BLOB посредством Firebird API", то "в этом случае все зависит от приложения, и не рассматривается в этом руководстве". Особенности работы с BLOB для разных клиентских библиотек описаны в разных статейках. Например, Blob & fib+. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:39 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin ...вот, теперь ясность полная - локальный сервис работает с удаленной БД как с локальной, выполняя все обычные задачи, только по сети... Это что вообще за фигня. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:49 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё GrigoriyFomin ...может стоит это описать где-то в документации... в "документации" указано, что если "клиентское приложение работает с BLOB посредством Firebird API", то "в этом случае все зависит от приложения, и не рассматривается в этом руководстве". Особенности работы с BLOB для разных клиентских библиотек описаны в разных статейках. Например, Blob & fib+. классное предупреждение, наверное, кого-то наставит на пусть истинный, но фишка в том, что я задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ (внутренние кишки на С++ меня по идее не должны волновать - это работа движка), так может в разделе документации по работе с удаленной БД и описать про накладные расходы при селекте БЛОБ полей? Не? Вот, например, я тут вычитал в доках, что поле типа массив хранится в виде блоба, то есть если я буду запрашивать данные из удаленного целочисленного массива ФБ будут работать теже механизмы, что и при явном обращении к блобу. А так ли это очевидно?? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:51 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё, может почитать предыдущие сообщения? Тогда и подобного рода вопросов возникать не будет.... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:52 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin ...фишка в том, что я задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ... С чего бы связь между серверами должна работать особым образом? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:58 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFominя задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ Ага, ага, а "унутре у неё неонка" и "возникает синекдоха отвечания". "Сон разума порождает чудовищ." (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:59 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё GrigoriyFomin ...фишка в том, что я задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ... С чего бы связь между серверами должна работать особым образом? А зачем тогда нужна прослойка в виде удаленной СУБД? Тогда пусть локальный ФБ работает с удаленной базой как с простым файлом на сетевом ресурсе. Раз мы используем удаленный ФБ для отработки запроса к удаленной БД, почему он не может выполнять работу с блобами локально, отдавая результирующий набор данных по сети в "крависом" виде? Ну это как предположение? Навеяно работой с Датаснэпом - мы ему запрос, он нам готовый ответ в нужном нам виде - хуч джейсон, хуч эксэмэл, хуч бинарник проприетарный..... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 01:07 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov GrigoriyFominя задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ Ага, ага, а "унутре у неё неонка" и "возникает синекдоха отвечания". "Сон разума порождает чудовищ." (с) процитирую местного гуру ёёёёё на мою вопрошайку - "Это что вообще за фигня. " ) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 01:11 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Блин, всего-то прошу описать особенность работы с блоб-полями удаленно по сети парой предложений, ощущение, что требую от разработчиков толкать пару десятков Сизифовых камней в гору Арарат. Ну не очевидно, что селект блоб-полей на удаленной БД ведет к резкому нарастанию сетевого трафика, как вам еще доступнее объяснить? У ФБ одно из главных преимуществ - низкий порог вхождения для разраба, что налагает ряд неприятных клише. Почему не пойти на встречу доморощенным (это я про себя) фуллстек программерам, которые должны быть "и швец, и жнец, и на дуде игрец", и не прописать эту особенность в доке? Простите за крик души... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 01:19 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin Блин, всего-то прошу описать особенность работы с блоб-полями удаленно по сети парой предложений, ощущение, что требую от разработчиков толкать пару десятков Сизифовых камней в гору Арарат. Ну не очевидно, что селект блоб-полей на удаленной БД ведет к резкому нарастанию сетевого трафика, как вам еще доступнее объяснить? У ФБ одно из главных преимуществ - низкий порог вхождения для разраба, что налагает ряд неприятных клише. Почему не пойти на встречу доморощенным (это я про себя) фуллстек программерам, которые должны быть "и швец, и жнец, и на дуде игрец", и не прописать эту особенность в доке? Простите за крик души... Ну ты сформулируй мысль в правильной форме да выложи её - например, тут. https://www.sql.ru/forum/1315752/ann-rukovodstvo-po-yazyku-sql-subd-firebird-4-0 Вот душа и успокоится. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 01:37 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Датасеты по сетям ползают, СУБД - это прослойка, БД - главным и основным образом хранилище блобов, компоненты С++ и даже сам fbclient обходятся без API... Хоспиди, как же я отстал от жизни :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 03:12 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё GrigoriyFomin ...вот, теперь ясность полная - локальный сервис работает с удаленной БД как с локальной, выполняя все обычные задачи, только по сети... Это что вообще за фигня. Что-что. Самурай без меча подобен самураю с мечом, но только без меча. Это, панимаш, могут не только лишь все. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 03:14 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, Этих не спасти, мочи всех. Надо новых набирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 09:20 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin, большего бреда чем ты сейчас пишешь я ещё в жизни не читал. Как по твоему работает EXECUTE STATEMENT ON EXTERNAL? Сюрприз точно также через сетевой протокол, как и любой удалённый клиент. На стороне клиента для работы с сетевым протоколом написан API, чтобы каждая библиотека доступа не писала самостоятельно работу с этим сетевым протоколом (а он не тривиален). С какого бодуна в ES должен быть какой-то другой способ работы нежели через собственный АПИ который предоставляется другим клиентам? Теперь про всякие поползновения в сторону изменения сетевого протокола на использование JSON, XML... С первого взгляда это кажется хорошей идеей, но что если твой запрос возвращает миллиард записей? Что если в каждом БЛОБЕ лежит 100 Мбайт? Как из этого миллиарда отфетчить первый 10 записей и остановится. Где хранить твой мега эксмель до того как он полностью не уйдёт на клиента? А если ещё учесть что активный курсор может быть не один и множество транзакций? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 09:41 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin Блин, всего-то прошу описать особенность работы с блоб-полями удаленно по сети парой предложений, ощущение, что требую от разработчиков толкать пару десятков Сизифовых камней в гору Арарат. у них на это тупо нет времени. Ибо если это делать в официальной документации, то парой предложений не обойдёшься. Здесь они не раз это объясняли. Я тебе ещё раз объяснил. Но может из меня рассказчик хреновый, если ты до сих пор не понял. ёёёёёНу ты сформулируй мысль в правильной форме да выложи её - например, тут. https://www.sql.ru/forum/1315752/ann-rukovodstvo-po-yazyku-sql-subd-firebird-4-0 в принципе можно, только не понятно где. Там где про EXECUTE STATEMENT рассказывается или про сам тип BLOB? И не понятно какими словами это сделать, если даже здесь человек это не понял, хотя пояснений я дал в разы больше чем об этом можно сказать в документации. Там сия ремарка должна быть не более одного-двух предложений в виде примечания. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 10:31 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin всего-то прошу описать особенность работы с блоб-полями удаленно по сети парой предложений Тебе это уже описали в 22013138 , 22013151 и 22013340 , просто до тебя никак не доходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 13:10 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, он это в документации хочет. Типа повесить жирное предупреждение. Только не понятно в какой. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 13:19 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов ДенисТипа повесить жирное предупреждение. Только не понятно в какой. И какое именно предупреждение - тоже непонятно. "Идиотам вход воспрещён"?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 13:21 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFominА зачем тогда нужна прослойка в виде удаленной СУБД? Тогда пусть локальный ФБ работает с удаленной базой как с простым файлом на сетевом ресурсе. ахинея какая-то. - сервер всегда с базой работает только локально. - клиент с сервером обычно работают по сети. В любом случае всегда используется какой-то протокол, клиент с базой не работает. - Execute statement on external работает как клиент с удаленным сервером. Сервер удаленно к базе не обращается, он обращается к удаленному серверу как клиент. Поэтому во всех случаях передача блобов (и всего остального) происходит абсолютно одинаково, как между клиентом и сервером. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 13:21 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
kdv, ТС наивно полагал, что ответ от сервера приходит в каком-то простом формате вроде JSON, где результат запроса сериализован сразу для всего набора данных, включая блобы. Dimitry Sibiryakov, вот чего он хочет GrigoriyFominНу не очевидно, что селект блоб-полей на удаленной БД ведет к резкому нарастанию сетевого трафика только не понятно с какого бодуна я должен распинаться об особенностях сетевого протокола в "Руководстве по языку SQL". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 13:36 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денисне понятно с какого бодуна я должен распинаться об особенностях сетевого протокола в "Руководстве по языку SQL". Не должен. Это намёк на то чтобы написать "Руководство по Firebird API". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 13:43 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
12.11.2019 13:43, Dimitry Sibiryakov пишет: > Это намёк на то чтобы написать "Руководство по Firebird API". а кто его будет читать? неофиты? а нахрен оно им сдалось? это ж не интстаграмм! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 13:44 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис, ТС-у "не очевидно" просто потому что он думал (надеюсь в прошедшем времени) что сервер через ESOE коннектится к базе каким-то волшебным "серверным" образом. Но нет, облом. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 15:41 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin Почему не пойти на встречу доморощенным (это я про себя) фуллстек программерам, которые должны быть "и швец, и жнец, и на дуде игрец", и не прописать эту особенность в доке? почему доморощенным фулстекам не занятся пэхапэ жыэс и майэскуэль? хотя... в топку пэхапэ, сейчас модно все на жыэс делать ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 17:37 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Дегтярев Евгений почему доморощенным фулстекам не занятся пэхапэ жыэс и майэскуэль? хотя... в топку пэхапэ, сейчас модно все на жыэс делать пхп+мускуль прогеров сейчас как грязи, а олдскульных дельфийцев, начинавших на Электроника МК-52 и Спекки, днем с огнем, а в корпоративном сегменте делфи будут еще долго жить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 00:14 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё С чего бы связь между серверами должна работать особым образом? Так из-за чего-то весь сыр-бор! Не встречал в документации КАК работает связка 2-х ФБ при выполнении запроса к удаленной базе. Когда 1 база, 1 сервер - все понятно, расписано и вопросов нет, но когда в цепи отработки запроса ДВА сервера - непонятно (мне по крайней мере) кто какую часть работы выполняет и на каком языке они общаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 00:22 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin, те, кто начинал на МК-52, обычно лезут в суть вещей и таки постигают её. Без обид :) PS у меня был Б3-34 и о МК-52 можно было разве что помечтать ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 00:23 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin Не встречал в документации КАК работает связка 2-х ФБ при выполнении запроса к удаленной базе. Не нужно искать "волшебную пендель палочку" везде, где что-то не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 00:26 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
hvlad GrigoriyFomin, те, кто начинал на МК-52, обычно лезут в суть вещей и таки постигают её. Без обид :) PS у меня был Б3-34 и о МК-52 можно было разве что помечтать ;) Еггог-ологией не увлекался, так что возможно не тру :)) А суть вещей-таки и пытаюсь понять из-за отсутствия искомого в документации. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 00:35 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
GrigoriyFomin пхп+мускуль прогеров сейчас как грязи ну тогда нодэжыэс и монгодиби - стильно модно молодежна ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 07:43 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
hvlad GrigoriyFomin, те, кто начинал на МК-52, обычно лезут в суть вещей и таки постигают её. Без обид :) PS у меня был Б3-34 и о МК-52 можно было разве что помечтать ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 09:47 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
О, на МК-52 я познал дзен языка ассемблера, регистров и косвенной адресации! Сколько лабораторных и курсовых было обсчитано на нём!!! И игры писал для интереса типа "Быки и коровы" и "Посадки на Луну" Да, жив, есть к нему два внешних ПЗУ с программами (номер 2 и номер 4, ЕМНИП). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 10:40 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Коваленко Дмитрий Ничегоссе состояние - я свой в 94 году купил - только мк-52, БП и 2 мануала родных. Тогда отдал $6 по тем ценам :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 23:08 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис только не понятно с какого бодуна я должен распинаться об особенностях сетевого протокола в "Руководстве по языку SQL". Это называется "порог вхождения". Если новички проекту Файрбёрд не нужны - то не нужно. Чем сложнее - тем лучше фильтрация. В клубе джентльменов должны быть только джентльмены. Симонов Денис Как по твоему работает EXECUTE STATEMENT ON EXTERNAL? там не совсем ES там for ES ... into VARIABLE и тут вопрос, сама Variable - она lazy или как ? когда реально вытаскивается БЛОБ - сразу когда отработал шаг цикла, или когда (если) к этой переменной в самом деле обратились? если чтение выполняется всегда - то в принципе можно ещё в сетевом поставить флажок, hint "это поле понадобится, высылай". хотя "правильнее", наверное, было бы сделать, чтобы у переменной в SP была lazy-загрузка Симонов Денис С первого взгляда это кажется хорошей идеей, но что если твой запрос возвращает миллиард записей? Что если в каждом БЛОБЕ лежит 100 Мбайт? Конкретно к даннмоу случаю - хватило бы просто отправлять длинну блоба. Если она нулевая - то конент блоба можно рассчитать на клиенте и не тянуть по сети, хоть бы даже и прямым перебором. Другой вопрос - насколько это типовая ситуация, хранить в блобах данные нулевой длины??? Как вариант, можно в любой БД хранить специальный константный блоб нулевой длины с заранее известныйм ID, вот специально для таких БД. Много места он не займет. В общем же случае - сделать какую-то оценку, статическую или динамическую на основе наблюдаемой задержки в round-trip. Блобы меньшей длины конвертируются в VARCHAR с эквивалентным CHARSET, большей - остаются блобами. При этом, видимо, в протокол потребуется вводить понятие типа shadow column, который существует только как отображение основного столбца на другой тип данных. Если он null, то отображения нет и читай из основного. Если он not null - то клиент может рассчитать данные основного столбца на основании теневого столбца и основной столбец не дёргать, если захочет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 14:24 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Симонов ДенисТипа повесить жирное предупреждение. Только не понятно в какой. И какое именно предупреждение - тоже непонятно. "Идиотам вход воспрещён"?.. Какое - примерно понятно. В описании BLOB'ов как типа указать, что чтение их выполняется множеством маленьких сетевых запросов, у каждого - свой раундтрип, и ограничивать скорость работы будет не пропускная способность сети, а латентность. И что хранить в блобах данные малого размера поэтому очень неэффективно как для места на диске, так и особенно для скорости работы по сети. А случай GF туда хорошим примером будет. "У друга моего друга однажды..." И ссылки - на википедию в статьи по раундтрипам и латентности, а заодно на статью на Хабре про Видео mail.ru, как оно из США не работало, и пока разработчик лично в США не съездил и не убедился на месте - поправить не могли Там как раз хорошая обзорная статья по проблеме. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 14:36 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch, Это так мило - описывать возможные пути решения проблемы, которую сам же и придумал. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 14:38 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch, Ariochтам не совсем ES там for ES ... into VARIABLE какая разница? AriochКонкретно к даннмоу случаю - хватило бы просто отправлять длинну блоба. Если она нулевая - то конент блоба можно рассчитать на клиенте и не тянуть по сети, хоть бы даже и прямым перебором. Другой вопрос - насколько это типовая ситуация, хранить в блобах данные нулевой длины??? Как вариант, можно в любой БД хранить специальный константный блоб нулевой длины с заранее известныйм ID, вот специально для таких БД. Много места он не займет. ещё один. Ты в API работы с блобами заглядывал вообще? В куда ты содержимое блоба собираешься класть? Напомню наш API для простых типов работает с буфером фиксированной ширины. Сколько же надо отвести памяти под маленький блоб? А если он не один? Где её отвести? Как клиентское приложение должно догадаться что вот здесь блоб целиком, а вот тут надо ещё докачивать? Ты бы взял и продумал протокол, структуры и апи да и расписал здесь. Глядишь натолкнёшь разработчиков на путь истинный ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 14:39 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Разница именно в том, что простой select то ли будет читать поле с BLOBом, то ли нет а PSQL FOR SELECT - вероятно читает всегда. Или не всегда? Или в SP переменная после SELECT может содержать только BLOB id, пока её реально не попытаются прочитать в коде? Сколько - та самая оценка, когда ожидаемые минусу перевесят ожидаемые плюсы. Где - в буфере под строку, в сетевых пакетах - в запись каждой строки. Несколько блобов от одного не отличаются, оценка делается для "сферического блоба в вакууме". Конечно, идеально было бы иметь статистику для конкретного столбца в конкретной таблице, да ещё и с конкретным приложением-клиентом на конкретном рабочем месте - но это не реально. А вот roundtrip latency известна. Клиентское приложение догадываться не будет, если использует старый API. Возможно, это вообще не нужно на уровень публичного API вытаскивать и можно целиком внутри wire protocol держать. "Докачивать" блоб не нужно, он или полностью влез в shadow column, или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 14:58 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch, зачем select или for select будет читать содержимое блоба? ему типа, делать больше нечего? Блоб читается если только ты из него что-то выколупываешь, ищешь в нем функцией или udf, и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 15:13 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch, ты давай без абстракций. Про сферического коня в вакууме и я могу фантазировать. Скажи сколько надо в байтах? А то когда ожидаемые минусу перевесят ожидаемые плюсы... Это когда? Напиши структуру буфера. Надеюсь для простых типов ты это умеешь делать? Необязательно в виде SQLDA. Можно просто record на который буфер маппиться будет, как это в UDR делают. Типа того Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Давай воткни сюда свои фантомные блобы. И главное подумай как не сломать обратную совместимость и донести о своём желании движку ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 15:31 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
kdv зачем select или for select будет читать содержимое блоба? Намекаешь на то, что айдишники блобов ценны сами по себе, без содержания блобов? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 15:33 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис, я ведь уже сказал, что такое делать надо на уровне сетевого протокола, и вываливать это наружу в виде SQLDA скорее всего нe нужно обратная совместимость - а как это сейчас решается в wire протокол? скорее всего, версией протокола. Если не введи "локальную" расширяемость на тэгах. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 16:07 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё, SP не обязана обращаться к переменным. Переменная может быть "просто так, на будущее" Может быть, обращение к ней было, но потом его убрали/закомментировали. Может быть, обращение к ней будет условным, в зависимости от других переменных. Но - для этого у переменных в SP должен быть механизм lazy evaluation, а я очень сомневаюсь, что такой есть. Но судя по реплике KDV - таки есть ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 16:09 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё, SP не обязана обращаться к переменным. Переменная может быть "просто так, на будущее" Может быть, обращение к ней было, но потом его убрали/закомментировали. Может быть, обращение к ней будет условным, в зависимости от других переменных. Но - для этого у переменных в SP должен быть механизм lazy evaluation, а я очень сомневаюсь, что такой есть. Но судя по реплике KDV - таки есть ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 16:09 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
ёёёёё, blob id - это не содержимое блоба. При этом Arioch пишет "простой select то ли будет читать поле с BLOBом, то ли нет а PSQL FOR SELECT - вероятно читает всегда." я телепатирую, что имеется в виду содержимое блоба, а не его id в блоб-столбце. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 16:11 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch, Сетевой протокол это как данные передаются по сети. Но когда ты эти данные прокачал ты должен их где-то хранить. Я тебя спрашиваю где? В случае курсоров есть префетч, и там хранятся несколько записей, чтобы не слать сетевой пакет на каждый фетч из курсора. С блобами что ли так же хочешь? В принципе наверное возможно, но я не уверен ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 16:20 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch, хотя тут есть проблема с отложенностью чтения блоба через API. А что если его вообще не прочитают? Лишний трафик по сети гонять. И сколько он должен хранится этот самый буфер под подкаченные блобы? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 16:27 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис Arioch, хотя тут есть проблема с отложенностью чтения блоба через API. А что если его вообще не прочитают? Лишний трафик по сети гонять. И сколько он должен хранится этот самый буфер под подкаченные блобы? Да, именно так. Как и с любой оптимизацией и любой эвристикой - есть риск "зря стараться". То же "предсказание ветвлений" или "упреждающее чтение" в процессоре, уж какие там сложности наворачивают, детекторы того, детекторы всего, и всё равно иногда ошибаются. Поэтому скорее всего бесполезно задавать константу (разве что только для отсечения совсем маргинальных случаев вида пустой строки или строки из 3 букв). А только динамическое подстраивание под реально наблюдаемые в данном подключении условия сети. И если в firebird.conf или database.conf, то тоже, видимо, подстройка может быть лишь не в абсолютных единицах, а в каких-то условных и вероятностных "больше склоняемся к такому варианту". Симонов Денис Но когда ты эти данные прокачал ты должен их где-то хранить. Я тебя спрашиваю где? Ну я же уже написал! к запросу добавляются специальные невидимые, теневые столбцы "блоб из столбца M, если влезает в короткий nullable varchar(nn)" через fbclient.dll API они недоступны, но при запросе к BLOB'ам клиентская библиотека туда поглядывает jaybird и .net provider сами разберутся, если захотят обновлённый wire protocol реализовывать Симонов Денис И сколько он должен хранится этот самый буфер под подкаченные блобы? Если предположить, что буфер под микроблобы - часть буфера строки, невидимый столбец, - то столько же, сколько живёт на клиенте буфер этой строки. Пока он жив - чтение BLOB'a выполняется из него. Уехала строка на радугу - всё, shortcut просрочен, читайте через обычные раунд-трипы. Тут, кстати, ещё будет изредка накладываться ограничение на максимальную ширину запроса... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 17:26 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch к запросу добавляются специальные невидимые, теневые столбцы "блоб из столбца M, если влезает в короткий nullable varchar(nn)" вот этого не надо. Такое ты можешь и сам в запросе написать AriochТут, кстати, ещё будет изредка накладываться ограничение на максимальную ширину запроса... не будет. Это ограничение сейчас довольно большое, не 64K уже ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 17:31 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
AriochЕсли предположить, что буфер под микроблобы - часть буфера строки, невидимый столбец, - то столько же, сколько живёт на клиенте буфер этой строки. Пока он жив - чтение BLOB'a выполняется из него. Он жив пока не прочитан. То есть фетч записи автоматически дропнет все блобы в ней. И смысл?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 17:31 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
kdv, вопрос в том, что в момент выполнения в SP или в Execute Block команды select blob-column into variable ты уже должен ЧТО-ТО в эту переменную положить, а что ты положишь? а) содержимое БЛОБа б) некою информацию, по которой можно добыть содержимое БЛОБа, blob id, blob handle... в) ещё что-то? И отсюда сразу следующий вопрос могут ли в SP/EB быть переменные типа блоб? могут ли в SP/EB переменные типа char/varchar хранить не "а", а "б", быть в режиме lazy evaluation / deferred fetching / you name it ? насколько понимаю, сейчас - нет? если есть переменная в SP, то там УЖЕ значение а это значит, насколько понимаю, что при select into невозможна ситуация, когда blob id получили, в переменную его записали, но содержимое переменной не читаем и блоб не выкачиваем если в PSQL выполняется команда select into - то данные блоба в любом случае выкачаются в переменную, нужна ли они дальше или нет. Или я ошибаюсь и lazy initialization у переменных в SP есть ? Именно про это я и спрашивал в средней части 22019640 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 17:32 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Симонов Денис вот этого не надо. Такое ты можешь и сам в запросе написать Я могу и вообще выкинуть Firebird и на коленке написать самопальный SQL-движок Могу - не аргумент, аргумент - удобство использования и затраты на реализацию Вот сейчас пришёл новичок, и выяснил для себя, что ЕГО затраты навыяснение необычных мест ФБ, методом "бежал по дорожке, споткнулся о невидимый барьер" - такие-то. После нескольких барьеров - получим искреннего пропагандиста против ФБ, который на своём примере будет рассказывать "если хотите неожиданных грабель на каждом повороте, то вперёд, а если хотите просто работать - то возьмите (другой сервер)" Симонов Денис Это ограничение сейчас довольно большое Но оно есть, а значит код должен его учитывать. Dimitry Sibiryakov Он жив пока не прочитан. То есть фетч записи автоматически дропнет все блобы в ней. И смысл?.. Аргумент. Возможно, клиенту надо организовать FIFO-буфер последних микроблобов в текущей транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 17:44 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch FIFO-буфер последних микроблобов в смысле - кольцевой Least Recently буфер, с ограничением сверху либо по количеству ID либо по суммарному их размеру, и освобождением "старых" микроблобов при добавлении новых ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 17:47 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Да, кстати, никто сначала не прочитал заголовок, как "БД удалили, а блоб выжил" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 17:49 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch После нескольких барьеров - получим искреннего пропагандиста против ФБ Сдаётся мне, что он вообще с барьерами бегать ещё не научился, а уже суётся в IB/FB/Oracle/MSSQL/... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 17:53 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
WildSery, может быть, что нет. может быть "тут клуб уважаемых джентльменов, ценителей многолетних экслюзивных коньяков, а желтоклювая молодёжь пусть идёт лесом на модные сервера" - сознательная позиция ФБ-тусовки, но тогда её стоило бы осознать и озвучить ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 18:01 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch Вот сейчас пришёл новичок У вас есть проблемы? Изложите свою проблему, всё то, что мешает вам и то, чего бы вам хотелось. Только не на уровне Манилова, а чуть более конкретно. P.S. Можете написать свой SQL-движок - пишите: флаг в руки, барабан на шею и в шляпу всё, что положено. Не надо только превращать техническую часть форума в широко развёрнутую пятницу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 18:08 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch, Что за чепуха, я никого не собираюсь гнать с FB, или наоборот, завлекать с других серверов. Это просто инструменты, а если кто-то начинает ныть, что вот шуруповёрт недостаточно шуруповёртит, а болгарка плохо болгарит - у меня такое нытьё вызывает одинаковую реакцию. Это не о тебе, а о том гипотетическом новичке-до-первого-барьера. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 18:09 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch сознательная позиция ФБ-тусовки, но тогда её стоило бы осознать и озвучить ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 18:11 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Давайте жить дружно, и не развивать это направление обсуждения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 18:12 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Давайте. Только давайте все вместе не развивать, а не только отдельными участниками. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 18:13 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
а для этого нужно избегать фраз типа > Такое ты можешь и сам в запросе написать которые (предлагаемые в качестве решения) означают, что человек заранее знал о проблеме с чтением множества мелких блобов по сети, знал почему они возникают, и знал на каких костылях их обскакать. а он НЕ знал не говоря обо всех минусах такого подхода, даже ЕСЛИ БЫ знал ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 19:42 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Ariochа он НЕ знал Он много чего не знал, всерьёз полагая, что данные между серверами переносятся телепатически. PS: Смотрю вот на таблицу раундтрипов у ораклятых функций и вижу ту же картину: OCILobOpen() 1 OCILobRead() 0 or 1 * OCILobClose() 1 * For calls whose number of round trips is "0 or 1", if LOB buffering is on, and the request can be satisfied in the client, no round trips are incurred. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 19:52 |
|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#18+
Arioch, потому что псевдополя в запросе это костыль. Костыль втыкать в качестве архитектурного решения это не очень хорошо. А так да можно самому такой костылик сочинить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2019, 20:15 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1560514]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
131ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
114ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 300ms |
0 / 0 |