powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
91 сообщений из 91, показаны все 4 страниц
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887236
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В ходе переноса данных из удаленной базы данных на локальную обнаружил презабавный глюк, который вылавливал несколько часов.
Приведу запросы полностью, чтоб что-то случайно не затереть, хотя все дело было в 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.
execute block
as
declare variable CARDID type of column CARDS.CARDID;
declare variable CARDNAME type of column CARDS.CARDNAME;
declare variable CARDOWNER type of column CARDS.CARDOWNER;
declare variable TELNO type of column CARDS.TELNO;
declare variable CARDTYPE type of column CARDS.CARDTYPE;
declare variable CARDDATE type of column CARDS.CARDDATE;
declare variable CARDDISCNT type of column CARDS.CARDDISCNT;
declare variable CARDBLOCKED type of column CARDS.CARDBLOCKED;
declare variable CARDTOTAL type of column CARDS.CARDTOTAL;
declare variable OWNERDOC type of column CARDS.OWNERDOC;
declare variable DATEBIRTH type of column CARDS.DATEBIRTH;
declare variable CARDCOMMENTS type of column CARDS.CARDCOMMENTS;
declare variable LASTDATE type of column CARDS.LASTDATE;
declare variable DBDATE type of column CARDS.DBDATE;
declare variable CARDAMOUNT type of column CARDS.CARDAMOUNT;
declare variable CARDPROPS type of column CARDS.CARDPROPS;
declare variable CARDSTATUS type of column CARDS.CARDSTATUS;

begin
  for execute statement 'select first 100 CARDID, CARDNAME, CARDOWNER, TELNO, CARDTYPE, CARDDATE, CARDDISCNT, CARDBLOCKED,
                                 CARDTOTAL, OWNERDOC, DATEBIRTH, CARDCOMMENTS , LASTDATE, DBDATE, CARDAMOUNT, CARDPROPS,
                                 CARDSTATUS from cards'
          on external data source '192.168.97.1:d:\basa\dbserver.fdb'
          as user 'SYSDBA' password 'masterkey'
          into :CARDID, :CARDNAME, :CARDOWNER, :TELNO, :CARDTYPE, :CARDDATE, :CARDDISCNT, :CARDBLOCKED, :CARDTOTAL,
          :OWNERDOC, :DATEBIRTH, :CARDCOMMENTS, :LASTDATE, :DBDATE, :CARDAMOUNT, :CARDPROPS, :CARDSTATUS
  do
  begin
    update or insert into CARDS (CARDID, CARDNAME, CARDOWNER, TELNO, CARDTYPE, CARDDATE, CARDDISCNT, CARDBLOCKED,
                                 CARDTOTAL, OWNERDOC, DATEBIRTH, CARDCOMMENTS, LASTDATE, DBDATE, CARDAMOUNT, CARDPROPS,
                                 CARDSTATUS)
    values (:CARDID, :CARDNAME, :CARDOWNER, :TELNO, :CARDTYPE, :CARDDATE, :CARDDISCNT, :CARDBLOCKED, :CARDTOTAL,
            :OWNERDOC, :DATEBIRTH, :CARDCOMMENTS, :LASTDATE, :DBDATE, :CARDAMOUNT, :CARDPROPS, :CARDSTATUS);
  end
end



Как удалось повысить скорость на несколько порядков!!!!! - в селекте на удаленной БД приводим блоб-поле к типу 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.
execute block
as
declare variable CARDID type of column CARDS.CARDID;
declare variable CARDNAME type of column CARDS.CARDNAME;
declare variable CARDOWNER type of column CARDS.CARDOWNER;
declare variable TELNO type of column CARDS.TELNO;
declare variable CARDTYPE type of column CARDS.CARDTYPE;
declare variable CARDDATE type of column CARDS.CARDDATE;
declare variable CARDDISCNT type of column CARDS.CARDDISCNT;
declare variable CARDBLOCKED type of column CARDS.CARDBLOCKED;
declare variable CARDTOTAL type of column CARDS.CARDTOTAL;
declare variable OWNERDOC type of column CARDS.OWNERDOC;
declare variable DATEBIRTH type of column CARDS.DATEBIRTH;
declare variable CARDCOMMENTS type of column CARDS.CARDCOMMENTS;
declare variable LASTDATE type of column CARDS.LASTDATE;
declare variable DBDATE type of column CARDS.DBDATE;
declare variable CARDAMOUNT type of column CARDS.CARDAMOUNT;
declare variable CARDPROPS type of column CARDS.CARDPROPS;
declare variable CARDSTATUS type of column CARDS.CARDSTATUS;

begin
  for execute statement 'select first 100 CARDID, CARDNAME, CARDOWNER, TELNO, CARDTYPE, CARDDATE, CARDDISCNT, CARDBLOCKED,
                                 CARDTOTAL, OWNERDOC, DATEBIRTH, cast(CARDCOMMENTS as varchar(2000)), LASTDATE, DBDATE, CARDAMOUNT, cast(CARDPROPS as varchar(2000)),
                                 CARDSTATUS from cards'
          on external data source '192.168.97.1:d:\basa\dbserver.fdb'
          as user 'SYSDBA' password 'masterkey'
          into :CARDID, :CARDNAME, :CARDOWNER, :TELNO, :CARDTYPE, :CARDDATE, :CARDDISCNT, :CARDBLOCKED, :CARDTOTAL,
          :OWNERDOC, :DATEBIRTH, :CARDCOMMENTS, :LASTDATE, :DBDATE, :CARDAMOUNT, :CARDPROPS, :CARDSTATUS
  do
  begin
    update or insert into CARDS (CARDID, CARDNAME, CARDOWNER, TELNO, CARDTYPE, CARDDATE, CARDDISCNT, CARDBLOCKED,
                                 CARDTOTAL, OWNERDOC, DATEBIRTH, CARDCOMMENTS, LASTDATE, DBDATE, CARDAMOUNT, CARDPROPS,
                                 CARDSTATUS)
    values (:CARDID, :CARDNAME, :CARDOWNER, :TELNO, :CARDTYPE, :CARDDATE, :CARDDISCNT, :CARDBLOCKED, :CARDTOTAL,
            :OWNERDOC, :DATEBIRTH, :CARDCOMMENTS, :LASTDATE, :DBDATE, :CARDAMOUNT, :CARDPROPS, :CARDSTATUS);
  end
end
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887237
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFominне в инете дело

Да нет, именно в нём. Ключевое слово "латентность".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887238
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

это не баг, а особенность передачи BLOB по сети
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887240
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

GrigoriyFominне в инете дело

Да нет, именно в нём. Ключевое слово "латентность".

Если можно - поподробнее - как инет влияет на передачу пустой строки как блоба, и как varchar? Неужели 2 х 16кБайт блока данных с блобом вызывают ТАКИЕ тормоза?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887241
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис
GrigoriyFomin,

это не баг, а особенность передачи BLOB по сети

Ну мож тогда этот аспект где-то осветить? ЗА 10 лет работы с ФБ в документации такого не встречал, хотя мож не заметил. Хорошо, а обычная работа с базой по сети тоже будет проявлять эту особенность блобов? Для пустой строки все равно будет гнаться 16кБ кусок данных?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887244
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

для этого достаточно посмотреть Firebird API, а именно как осуществляется работа с БЛОБ и тогда всё станет ясно.

В отличие от полей других типов Блобы не вытаскиваются сразу в записи при фетче. Вместо блобов вытаскивается только их идентификатор, а затем блоб надо открыть и прочитать все его сегменты.

В случае простых типов в firebird есть оптимизация сетевого протокола, например префетч записей курсора.
В случае блобов на каждый блоб приходится два дополнительных раудтрипа 1. открыть, 2 прочитать сегмент. Причём если блоб большой, то 2 ещё и может быть повторён много раз.

GrigoriyFominзначение которых во всех записях - пустая строка (не нулл).

а надо было хранить null, это позволило бы не открывать блоб вовсе экономя сетевые пакеты.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887245
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисВ случае блобов на каждый блоб приходится два дополнительных раудтрипа 1. открыть, 2
прочитать сегмент. Причём если блоб большой, то 2 ещё и может быть повторён много раз.

Если верить последнему тикету в трекере, там после последнего сегмента какие-то странные
тормоза происходят.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887248
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис
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-тикратное превышение времени передачи одного и того же количества страниц. Явно не в сетевом соединении узкое горлышко, и явно не в скорости считывания блоба из БД.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887249
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
В случае блобов на каждый блоб приходится два дополнительных раудтрипа 1. открыть, 2 прочитать сегмент.
3. закрыть
И ещё 1а прочитать инф-цию (необязательный, зависит от того, как написан код).
Т.е. 3-4 раундтрипа. На каждый блоб. В каждой записи.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887250
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

Что ты прицепился к этим несуществующим 16КБ ? Забудь про них.

Пусть пинг в твоей интернет сети 10 мс (это весьма оптимистично)
2 блоба * 3 раундтрипа * 100 записей * 10 мс = 6 сек

У тебя реально 24 сек ? Значит пинг около 40 мс.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887251
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

я тебе по передачу блоба по сети и рассказывал. Ещё раз загляни в API как происходит работа с блобами.

GrigoriyFominНо ведь физически даже после приведения типа все равно считывается блоб по своему обычному алгоритму - те же шаги проходят

нет после того как ты привёл блоб к строке передавать его по сети как блоб уже не надо. По крайней мере в ES это самостоятельно определяется

GrigoriyFominУ меня сегмент БД установлен 16кБ, значит 2 блоб поля вынуждают гнать лишних 32кБ по сети.

ты не прав. Где ты этот размер сегмента устанавливаешь?

Опять же ты считаешь какие-то мегабайты, а проблема не в них, а в количестве сетевых пакетов.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887261
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

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

Насчет размера сегмента - имел ввиду размер страницы БД, который указываю при восстановлении ее из бэкапа. Устанавливаю 16кБ (макс.возможный)
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887350
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFominкоторый указываю при восстановлении ее из бэкапа.
размер страницы задается 1 раз при создании БД, и может быть изменен при восстановлении из бэкапа.
Постоянно указывать при restore один и тот же размер страницы нет смысла.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887355
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

не надо искажать смысл моего ответа. Я не переходил с сетевого уровня на уровень движка.

Вот что происходит схематично при работе с blob (полная семантику вызовов я не повторял)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
st = attachment->prepare(tr, SQL);
rs = st->openCursor();
while(rs->fetch(&buffer)) {
  // обрабатываем обычные типы
  // ....
  if (!blobIdNull) {
    blob = attachment->openBlob(tr, blobId);
    while(blob->get_segment(&blb)) {
      // ...
    }
    blob->close();
  }
  // ...
}
rs->closeCursor();



Итак не каждый вызов rs->fetch() требует нового сетевого пакета, поскольку есть префетч и за один пакет может быть выбрано несколько записей, потом просто до поры до времени сетевой пакет не генерируется.

Но блобы выбираются отдельно от fetch, который даёт только их id. А вот openBlob, get_segment и close требуют каждый раз новый сетевой пакет. Ну возможно есть кое-какая оптимизация в get_segment.

Теперь понял?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887637
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
медленная скорость передачи блобов из базы в базу по сети с высокими пингами это мелочи.
Я периодически получаю битые блобы. Сначала пересылал из базы в базу большие xml и они оказывались не валидными.
Потом стал сжимать их gzip. И они не распаковывались на получателе.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887639
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.11.2019 17:45, vvvait пишет:
> Потом стал сжимать их gzip. И они не распаковывались на получателе.

у тебя ошибка в программе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887722
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvait,

напиши программу, которая миллион раз передаст сжатый файл, примет и проверит его. О количестве ошибок (с номерами блоков) напиши сюда.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887747
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvait
медленная скорость передачи блобов из базы в базу по сети с высокими пингами это мелочи.
Я периодически получаю битые блобы. Сначала пересылал из базы в базу большие xml и они оказывались не валидными.
Потом стал сжимать их gzip. И они не распаковывались на получателе.

Тоже такое было.
Расследование всякий раз показывало, что это я нарукожопил.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887748
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

к слову, риторически. что за проблема - взять два бинария, один исходный, другой из блоба (сохраненный сторонней программой в том числе), и сравнить их - посмотреть, где данные искорёжены.
Если там повреждены начало или конец, так это софт. Если всё перепутано - так значит в блоб залито такое. А вот если где-то посередине - тогда, скорее всего, повреждено при передаче.
ФБ что принял, то и сохранил. Если такой блоб целиком поврежден, я могу разве что списать на дефект памяти на компе, но и то, такие вещи опять же бинарным сравнением видны без монокля.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887749
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

дабы окончательно понять - доступ к блобам удаленной БД происходит на удаленной стороне или на локальной? По идее я запрашиваю селект на удаленной БД и по сети должен передаться датасет с полями тех типов, которые в БД, то есть блобы должны по сети дергаться. Тогда это объясняет такую разницу в скорости доступа. Но поять-таки, неплохо это где-то в гайде написать, чтоб предостеречь.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887750
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
доступ к блобам удаленной БД происходит на удаленной стороне или на локальной?
Симонов Денис
В отличие от полей других типов Блобы не вытаскиваются сразу в записи при фетче. Вместо блобов вытаскивается только их идентификатор, а затем блоб надо открыть и прочитать все его сегменты.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887754
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

у вас какие-то совершенно дикие представления о том как работает клиент-сервер. Тебе же объяснили что чтение блобов просто отложенное. Естественно на стороне сервера оно читается движком, а затем передаётся по сети. Да по сети они передаются в несколько сетевых пакетов, но зато это позволяет читать очень большие блобы, ибо их не возможно поместить в буфер фиксированной ширины как для остальных типов.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887757
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ошибки в передаче блобов наблюдаются редко, менее 1%, и только на каналах с большой и плавающей задержкой от 70 до 500 мс.
это по вашему ошибка в программе? ну если только её имя fbserver
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887758
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvaitэто по вашему ошибка в программе? ну если только её имя fbserver

Эх, молодо-зелено...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887768
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvait
ошибки в передаче блобов наблюдаются редко, менее 1%, и только на каналах с большой и плавающей задержкой от 70 до 500 мс.
это по вашему ошибка в программе? ну если только её имя fbserver


Фигассе, "редко", 1%...
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887792
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
GrigoriyFomin
доступ к блобам удаленной БД происходит на удаленной стороне или на локальной?
Симонов Денис
В отличие от полей других типов Блобы не вытаскиваются сразу в записи при фетче. Вместо блобов вытаскивается только их идентификатор, а затем блоб надо открыть и прочитать все его сегменты.

так вопрос - кто их тащит - если удаленный ФБ, то это его внутренние локальные проблемы и по сети должен лететь уже готовый ответ без всяких дерганий дополнительных, если их по сети тащит локальный ФБ, тогда понятно, что он дергает базу как локальный сервер, где эти накладные расходы незаметны, а по сети, из-за чего резко возрастают тормоза. Только в чем тогда смысл удаленной СУБД? Файловый сервер? Если все работы по вытаскиванию блобов идут на локальной машине удаленно по сети.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887795
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

вот, теперь ясность полная - локальный сервис работает с удаленной БД как с локальной, выполняя все обычные задачи, только по сети, из-за чего растут накладные расходы на передачу именно блобов. То есть это надо просто учитывать при разработке механизма работы с удаленной БД. И повторюсь третий раз - может стоит это описать где-то в документации, так как мне кажется логичнее, чтоб данные выдергивал удаленный ФБ, паковал их в сетевой пакет и передавал его запрашиваемому ФБ.
Мы ж в синтаксисе так и указываем - сделай селект полей и запихни их в локальные переменные, то есть по сети должен прийти некий готовый датасет, подготовленный удаленным ФБ, который локальный ФБ распихает по переменным и будет уже с ними творить что хочет.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887803
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
...может стоит это описать где-то в документации...


в "документации" указано, что если "клиентское приложение работает с BLOB посредством Firebird API", то "в этом случае все зависит от приложения, и не рассматривается в этом руководстве".

Особенности работы с BLOB для разных клиентских библиотек описаны в разных статейках. Например, Blob & fib+.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887805
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
...вот, теперь ясность полная - локальный сервис работает с удаленной БД как с локальной, выполняя все обычные задачи, только по сети...


Это что вообще за фигня.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887806
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё
GrigoriyFomin
...может стоит это описать где-то в документации...


в "документации" указано, что если "клиентское приложение работает с BLOB посредством Firebird API", то "в этом случае все зависит от приложения, и не рассматривается в этом руководстве".

Особенности работы с BLOB для разных клиентских библиотек описаны в разных статейках. Например, Blob & fib+.

классное предупреждение, наверное, кого-то наставит на пусть истинный, но фишка в том, что я задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ (внутренние кишки на С++ меня по идее не должны волновать - это работа движка), так может в разделе документации по работе с удаленной БД и описать про накладные расходы при селекте БЛОБ полей? Не? Вот, например, я тут вычитал в доках, что поле типа массив хранится в виде блоба, то есть если я буду запрашивать данные из удаленного целочисленного массива ФБ будут работать теже механизмы, что и при явном обращении к блобу. А так ли это очевидно??
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887807
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё,

может почитать предыдущие сообщения? Тогда и подобного рода вопросов возникать не будет....
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887809
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
...фишка в том, что я задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ...


С чего бы связь между серверами должна работать особым образом?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887810
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFominя задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ

Ага, ага, а "унутре у неё неонка" и "возникает синекдоха отвечания".
"Сон разума порождает чудовищ." (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887814
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё
GrigoriyFomin
...фишка в том, что я задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ...


С чего бы связь между серверами должна работать особым образом?

А зачем тогда нужна прослойка в виде удаленной СУБД? Тогда пусть локальный ФБ работает с удаленной базой как с простым файлом на сетевом ресурсе. Раз мы используем удаленный ФБ для отработки запроса к удаленной БД, почему он не может выполнять работу с блобами локально, отдавая результирующий набор данных по сети в "крависом" виде? Ну это как предположение? Навеяно работой с Датаснэпом - мы ему запрос, он нам готовый ответ в нужном нам виде - хуч джейсон, хуч эксэмэл, хуч бинарник проприетарный.....
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887817
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

GrigoriyFominя задаю УДАЛЕННЫЙ запрос средствами ФБ, не прибегая к дерганью АПИ

Ага, ага, а "унутре у неё неонка" и "возникает синекдоха отвечания".
"Сон разума порождает чудовищ." (с)

процитирую местного гуру ёёёёё на мою вопрошайку - "Это что вообще за фигня. " )
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887818
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, всего-то прошу описать особенность работы с блоб-полями удаленно по сети парой предложений, ощущение, что требую от разработчиков толкать пару десятков Сизифовых камней в гору Арарат. Ну не очевидно, что селект блоб-полей на удаленной БД ведет к резкому нарастанию сетевого трафика, как вам еще доступнее объяснить? У ФБ одно из главных преимуществ - низкий порог вхождения для разраба, что налагает ряд неприятных клише. Почему не пойти на встречу доморощенным (это я про себя) фуллстек программерам, которые должны быть "и швец, и жнец, и на дуде игрец", и не прописать эту особенность в доке?
Простите за крик души...
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887821
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
Блин, всего-то прошу описать особенность работы с блоб-полями удаленно по сети парой предложений, ощущение, что требую от разработчиков толкать пару десятков Сизифовых камней в гору Арарат. Ну не очевидно, что селект блоб-полей на удаленной БД ведет к резкому нарастанию сетевого трафика, как вам еще доступнее объяснить? У ФБ одно из главных преимуществ - низкий порог вхождения для разраба, что налагает ряд неприятных клише. Почему не пойти на встречу доморощенным (это я про себя) фуллстек программерам, которые должны быть "и швец, и жнец, и на дуде игрец", и не прописать эту особенность в доке?
Простите за крик души...


Ну ты сформулируй мысль в правильной форме да выложи её - например, тут. https://www.sql.ru/forum/1315752/ann-rukovodstvo-po-yazyku-sql-subd-firebird-4-0

Вот душа и успокоится.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887828
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Датасеты по сетям ползают, СУБД - это прослойка, БД - главным и основным образом хранилище блобов, компоненты С++ и даже сам fbclient обходятся без API... Хоспиди, как же я отстал от жизни :-(
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887829
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
GrigoriyFomin
...вот, теперь ясность полная - локальный сервис работает с удаленной БД как с локальной, выполняя все обычные задачи, только по сети...


Это что вообще за фигня.


Что-что. Самурай без меча подобен самураю с мечом, но только без меча. Это, панимаш, могут не только лишь все.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887867
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

Этих не спасти, мочи всех. Надо новых набирать.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887873
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

большего бреда чем ты сейчас пишешь я ещё в жизни не читал.

Как по твоему работает EXECUTE STATEMENT ON EXTERNAL? Сюрприз точно также через сетевой протокол, как и любой удалённый клиент. На стороне клиента для работы с сетевым протоколом написан API, чтобы каждая библиотека доступа не писала самостоятельно работу с этим сетевым протоколом (а он не тривиален). С какого бодуна в ES должен быть какой-то другой способ работы нежели через собственный АПИ который предоставляется другим клиентам?

Теперь про всякие поползновения в сторону изменения сетевого протокола на использование JSON, XML... С первого взгляда это кажется хорошей идеей, но что если твой запрос возвращает миллиард записей? Что если в каждом БЛОБЕ лежит 100 Мбайт? Как из этого миллиарда отфетчить первый 10 записей и остановится. Где хранить твой мега эксмель до того как он полностью не уйдёт на клиента? А если ещё учесть что активный курсор может быть не один и множество транзакций?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39887900
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
Блин, всего-то прошу описать особенность работы с блоб-полями удаленно по сети парой предложений, ощущение, что требую от разработчиков толкать пару десятков Сизифовых камней в гору Арарат.


у них на это тупо нет времени. Ибо если это делать в официальной документации, то парой предложений не обойдёшься.
Здесь они не раз это объясняли. Я тебе ещё раз объяснил. Но может из меня рассказчик хреновый, если ты до сих пор не понял.

ёёёёёНу ты сформулируй мысль в правильной форме да выложи её - например, тут. https://www.sql.ru/forum/1315752/ann-rukovodstvo-po-yazyku-sql-subd-firebird-4-0

в принципе можно, только не понятно где. Там где про EXECUTE STATEMENT рассказывается или про сам тип BLOB? И не понятно какими словами это сделать, если даже здесь человек это не понял, хотя пояснений я дал в разы больше чем об этом можно сказать в документации. Там сия ремарка должна быть не более одного-двух предложений в виде примечания.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888029
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
всего-то прошу описать особенность работы с блоб-полями удаленно по сети парой предложений

Тебе это уже описали в 22013138 , 22013151 и 22013340 , просто до тебя никак не доходит.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888035
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

он это в документации хочет. Типа повесить жирное предупреждение. Только не понятно в какой.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888037
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТипа повесить жирное предупреждение. Только не понятно в какой.

И какое именно предупреждение - тоже непонятно. "Идиотам вход воспрещён"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888038
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFominА зачем тогда нужна прослойка в виде удаленной СУБД? Тогда пусть локальный ФБ работает с удаленной базой как с простым файлом на сетевом ресурсе.
ахинея какая-то.
- сервер всегда с базой работает только локально.
- клиент с сервером обычно работают по сети. В любом случае всегда используется какой-то протокол, клиент с базой не работает.
- Execute statement on external работает как клиент с удаленным сервером. Сервер удаленно к базе не обращается, он обращается к удаленному серверу как клиент.

Поэтому во всех случаях передача блобов (и всего остального) происходит абсолютно одинаково, как между клиентом и сервером.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888050
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

ТС наивно полагал, что ответ от сервера приходит в каком-то простом формате вроде JSON, где результат запроса сериализован сразу для всего набора данных, включая блобы.

Dimitry Sibiryakov,

вот чего он хочет

GrigoriyFominНу не очевидно, что селект блоб-полей на удаленной БД ведет к резкому нарастанию сетевого трафика

только не понятно с какого бодуна я должен распинаться об особенностях сетевого протокола в "Руководстве по языку SQL".
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888051
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисне понятно с какого бодуна я должен распинаться об особенностях сетевого протокола в
"Руководстве по языку SQL".

Не должен. Это намёк на то чтобы написать "Руководство по Firebird API".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888052
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12.11.2019 13:43, Dimitry Sibiryakov пишет:
> Это намёк на то чтобы написать "Руководство по Firebird API".

а кто его будет читать?
неофиты?
а нахрен оно им сдалось?
это ж не интстаграмм!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888117
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ТС-у "не очевидно" просто потому что он думал (надеюсь в прошедшем времени) что сервер через ESOE коннектится к базе каким-то волшебным "серверным" образом. Но нет, облом.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888193
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
Почему не пойти на встречу доморощенным (это я про себя) фуллстек программерам, которые должны быть "и швец, и жнец, и на дуде игрец", и не прописать эту особенность в доке?

почему доморощенным фулстекам не занятся пэхапэ жыэс и майэскуэль?
хотя... в топку пэхапэ, сейчас модно все на жыэс делать
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888323
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений

почему доморощенным фулстекам не занятся пэхапэ жыэс и майэскуэль?
хотя... в топку пэхапэ, сейчас модно все на жыэс делать

пхп+мускуль прогеров сейчас как грязи, а олдскульных дельфийцев, начинавших на Электроника МК-52 и Спекки, днем с огнем, а в корпоративном сегменте делфи будут еще долго жить.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888326
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё


С чего бы связь между серверами должна работать особым образом?

Так из-за чего-то весь сыр-бор! Не встречал в документации КАК работает связка 2-х ФБ при выполнении запроса к удаленной базе. Когда 1 база, 1 сервер - все понятно, расписано и вопросов нет, но когда в цепи отработки запроса ДВА сервера - непонятно (мне по крайней мере) кто какую часть работы выполняет и на каком языке они общаются.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888327
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin,

те, кто начинал на МК-52, обычно лезут в суть вещей и таки постигают её.
Без обид :)

PS у меня был Б3-34 и о МК-52 можно было разве что помечтать ;)
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888330
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
Не встречал в документации КАК работает связка 2-х ФБ при выполнении запроса к удаленной базе.
Локальный сервер выступает как клиент удалённого, пользуясь обычным клиентом и обычным API.
Не нужно искать "волшебную пендель палочку" везде, где что-то не понятно.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888335
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad
GrigoriyFomin,

те, кто начинал на МК-52, обычно лезут в суть вещей и таки постигают её.
Без обид :)

PS у меня был Б3-34 и о МК-52 можно было разве что помечтать ;)

Еггог-ологией не увлекался, так что возможно не тру :))
А суть вещей-таки и пытаюсь понять из-за отсутствия искомого в документации.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888371
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
пхп+мускуль прогеров сейчас как грязи

ну тогда нодэжыэс и монгодиби - стильно модно молодежна
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888425
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
GrigoriyFomin,

те, кто начинал на МК-52, обычно лезут в суть вещей и таки постигают её.
Без обид :)

PS у меня был Б3-34 и о МК-52 можно было разве что помечтать ;)


Приезжай, дам поиграться


91 год.

У него брат есть, тоже программируемый. Номер не помню.

Мой первый двухпроцессорный компутер, на котором я гонял тесты решений уравнений с параметрами :)
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888462
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, на МК-52 я познал дзен языка ассемблера, регистров и косвенной адресации!
Сколько лабораторных и курсовых было обсчитано на нём!!!
И игры писал для интереса типа "Быки и коровы" и "Посадки на Луну"

Да, жив, есть к нему два внешних ПЗУ с программами (номер 2 и номер 4, ЕМНИП).
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39888840
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коваленко Дмитрий


Приезжай, дам поиграться


91 год.
У него брат есть, тоже программируемый. Номер не помню.

Ничегоссе состояние - я свой в 94 году купил - только мк-52, БП и 2 мануала родных. Тогда отдал $6 по тем ценам :)
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891094
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
только не понятно с какого бодуна я должен распинаться об особенностях сетевого протокола в "Руководстве по языку 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 - то клиент может рассчитать данные основного столбца на основании теневого столбца и основной столбец не дёргать, если захочет.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891104
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Симонов ДенисТипа повесить жирное предупреждение. Только не понятно в какой.

И какое именно предупреждение - тоже непонятно. "Идиотам вход воспрещён"?..

Какое - примерно понятно.

В описании BLOB'ов как типа указать, что чтение их выполняется множеством маленьких сетевых запросов, у каждого - свой раундтрип, и ограничивать скорость работы будет не пропускная способность сети, а латентность. И что хранить в блобах данные малого размера поэтому очень неэффективно как для места на диске, так и особенно для скорости работы по сети. А случай GF туда хорошим примером будет. "У друга моего друга однажды..."

И ссылки - на википедию в статьи по раундтрипам и латентности, а заодно на статью на Хабре про Видео mail.ru, как оно из США не работало, и пока разработчик лично в США не съездил и не убедился на месте - поправить не могли Там как раз хорошая обзорная статья по проблеме.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891106
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Это так мило - описывать возможные пути решения проблемы, которую сам же и придумал.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891108
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Ariochтам не совсем ES

там for ES ... into VARIABLE


какая разница?

AriochКонкретно к даннмоу случаю - хватило бы просто отправлять длинну блоба. Если она нулевая - то конент блоба можно рассчитать на клиенте и не тянуть по сети, хоть бы даже и прямым перебором.
Другой вопрос - насколько это типовая ситуация, хранить в блобах данные нулевой длины???
Как вариант, можно в любой БД хранить специальный константный блоб нулевой длины с заранее известныйм ID, вот специально для таких БД. Много места он не займет.

ещё один. Ты в API работы с блобами заглядывал вообще?
В куда ты содержимое блоба собираешься класть? Напомню наш API для простых типов работает с буфером фиксированной ширины. Сколько же надо отвести памяти под маленький блоб? А если он не один? Где её отвести? Как клиентское приложение должно догадаться что вот здесь блоб целиком, а вот тут надо ещё докачивать?

Ты бы взял и продумал протокол, структуры и апи да и расписал здесь. Глядишь натолкнёшь разработчиков на путь истинный
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891128
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разница именно в том, что простой select то ли будет читать поле с BLOBом, то ли нет

а PSQL FOR SELECT - вероятно читает всегда. Или не всегда? Или в SP переменная после SELECT может содержать только BLOB id, пока её реально не попытаются прочитать в коде?

Сколько - та самая оценка, когда ожидаемые минусу перевесят ожидаемые плюсы.
Где - в буфере под строку, в сетевых пакетах - в запись каждой строки.
Несколько блобов от одного не отличаются, оценка делается для "сферического блоба в вакууме". Конечно, идеально было бы иметь статистику для конкретного столбца в конкретной таблице, да ещё и с конкретным приложением-клиентом на конкретном рабочем месте - но это не реально. А вот roundtrip latency известна.
Клиентское приложение догадываться не будет, если использует старый API. Возможно, это вообще не нужно на уровень публичного API вытаскивать и можно целиком внутри wire protocol держать.
"Докачивать" блоб не нужно, он или полностью влез в shadow column, или нет.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891142
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

зачем select или for select будет читать содержимое блоба? ему типа, делать больше нечего?
Блоб читается если только ты из него что-то выколупываешь, ищешь в нем функцией или udf, и т.д.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891158
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

ты давай без абстракций. Про сферического коня в вакууме и я могу фантазировать.
Скажи сколько надо в байтах? А то когда ожидаемые минусу перевесят ожидаемые плюсы... Это когда?
Напиши структуру буфера. Надеюсь для простых типов ты это умеешь делать? Необязательно в виде SQLDA. Можно просто record на который буфер маппиться будет, как это в UDR делают.
Типа того

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
TRecord = record
  id: Int64;
  nullId: WordBool;
  name: record 
    len: smallint; 
    name: array[0..52] of AnsiChar;
  end;
  nullName: WordBool;
  blobId1: ISC_QUAD;
  nullBlobId1: WordBool;
  blobId2: ISC_QUAD;
  nullBlobId2: WordBool;
end;



Давай воткни сюда свои фантомные блобы. И главное подумай как не сломать обратную совместимость и донести о своём желании движку
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891160
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
зачем select или for select будет читать содержимое блоба?

Намекаешь на то, что айдишники блобов ценны сами по себе, без содержания блобов?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891182
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

я ведь уже сказал, что такое делать надо на уровне сетевого протокола, и вываливать это наружу в виде SQLDA скорее всего нe нужно

обратная совместимость - а как это сейчас решается в wire протокол? скорее всего, версией протокола. Если не введи "локальную" расширяемость на тэгах.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891184
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

SP не обязана обращаться к переменным.

Переменная может быть "просто так, на будущее"
Может быть, обращение к ней было, но потом его убрали/закомментировали.
Может быть, обращение к ней будет условным, в зависимости от других переменных.

Но - для этого у переменных в SP должен быть механизм lazy evaluation, а я очень сомневаюсь, что такой есть.
Но судя по реплике KDV - таки есть
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891185
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

SP не обязана обращаться к переменным.

Переменная может быть "просто так, на будущее"
Может быть, обращение к ней было, но потом его убрали/закомментировали.
Может быть, обращение к ней будет условным, в зависимости от других переменных.

Но - для этого у переменных в SP должен быть механизм lazy evaluation, а я очень сомневаюсь, что такой есть.
Но судя по реплике KDV - таки есть
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891187
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

blob id - это не содержимое блоба. При этом Arioch пишет
"простой select то ли будет читать поле с BLOBом, то ли нет
а PSQL FOR SELECT - вероятно читает всегда."

я телепатирую, что имеется в виду содержимое блоба, а не его id в блоб-столбце.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891195
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Сетевой протокол это как данные передаются по сети. Но когда ты эти данные прокачал ты должен их где-то хранить. Я тебя спрашиваю где?
В случае курсоров есть префетч, и там хранятся несколько записей, чтобы не слать сетевой пакет на каждый фетч из курсора. С блобами что ли так же хочешь? В принципе наверное возможно, но я не уверен
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891201
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

хотя тут есть проблема с отложенностью чтения блоба через API. А что если его вообще не прочитают? Лишний трафик по сети гонять. И сколько он должен хранится этот самый буфер под подкаченные блобы?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891238
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Arioch,

хотя тут есть проблема с отложенностью чтения блоба через API. А что если его вообще не прочитают? Лишний трафик по сети гонять. И сколько он должен хранится этот самый буфер под подкаченные блобы?


Да, именно так. Как и с любой оптимизацией и любой эвристикой - есть риск "зря стараться".
То же "предсказание ветвлений" или "упреждающее чтение" в процессоре, уж какие там сложности наворачивают, детекторы того, детекторы всего, и всё равно иногда ошибаются.

Поэтому скорее всего бесполезно задавать константу (разве что только для отсечения совсем маргинальных случаев вида пустой строки или строки из 3 букв).
А только динамическое подстраивание под реально наблюдаемые в данном подключении условия сети.
И если в firebird.conf или database.conf, то тоже, видимо, подстройка может быть лишь не в абсолютных единицах, а в каких-то условных и вероятностных "больше склоняемся к такому варианту".

Симонов Денис
Но когда ты эти данные прокачал ты должен их где-то хранить. Я тебя спрашиваю где?


Ну я же уже написал! к запросу добавляются специальные невидимые, теневые столбцы "блоб из столбца M, если влезает в короткий nullable varchar(nn)"

через fbclient.dll API они недоступны, но при запросе к BLOB'ам клиентская библиотека туда поглядывает

jaybird и .net provider сами разберутся, если захотят обновлённый wire protocol реализовывать

Симонов Денис
И сколько он должен хранится этот самый буфер под подкаченные блобы?


Если предположить, что буфер под микроблобы - часть буфера строки, невидимый столбец, - то столько же, сколько живёт на клиенте буфер этой строки. Пока он жив - чтение BLOB'a выполняется из него. Уехала строка на радугу - всё, shortcut просрочен, читайте через обычные раунд-трипы.

Тут, кстати, ещё будет изредка накладываться ограничение на максимальную ширину запроса...
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891246
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch к запросу добавляются специальные невидимые, теневые столбцы "блоб из столбца M, если влезает в короткий nullable varchar(nn)"

вот этого не надо. Такое ты можешь и сам в запросе написать

AriochТут, кстати, ещё будет изредка накладываться ограничение на максимальную ширину запроса...

не будет. Это ограничение сейчас довольно большое, не 64K уже
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891247
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochЕсли предположить, что буфер под микроблобы - часть буфера строки, невидимый столбец, - то
столько же, сколько живёт на клиенте буфер этой строки. Пока он жив - чтение BLOB'a
выполняется из него.

Он жив пока не прочитан. То есть фетч записи автоматически дропнет все блобы в ней. И смысл?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891248
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891259
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
вот этого не надо. Такое ты можешь и сам в запросе написать


Я могу и вообще выкинуть Firebird и на коленке написать самопальный SQL-движок

Могу - не аргумент, аргумент - удобство использования и затраты на реализацию

Вот сейчас пришёл новичок, и выяснил для себя, что ЕГО затраты навыяснение необычных мест ФБ, методом "бежал по дорожке, споткнулся о невидимый барьер" - такие-то.
После нескольких барьеров - получим искреннего пропагандиста против ФБ, который на своём примере будет рассказывать "если хотите неожиданных грабель на каждом повороте, то вперёд, а если хотите просто работать - то возьмите (другой сервер)"


Симонов Денис
Это ограничение сейчас довольно большое


Но оно есть, а значит код должен его учитывать.

Dimitry Sibiryakov
Он жив пока не прочитан. То есть фетч записи автоматически дропнет все блобы в ней. И смысл?..


Аргумент.
Возможно, клиенту надо организовать FIFO-буфер последних микроблобов в текущей транзакции.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891264
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch
FIFO-буфер последних микроблобов


в смысле - кольцевой Least Recently буфер, с ограничением сверху либо по количеству ID либо по суммарному их размеру, и освобождением "старых" микроблобов при добавлении новых
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891265
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати, никто сначала не прочитал заголовок, как "БД удалили, а блоб выжил" ?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891268
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch
После нескольких барьеров - получим искреннего пропагандиста против ФБ
Это как-то нас должно расстроить?
Сдаётся мне, что он вообще с барьерами бегать ещё не научился, а уже суётся в IB/FB/Oracle/MSSQL/...
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891274
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

может быть, что нет.

может быть "тут клуб уважаемых джентльменов, ценителей многолетних экслюзивных коньяков, а желтоклювая молодёжь пусть идёт лесом на модные сервера" - сознательная позиция ФБ-тусовки, но тогда её стоило бы осознать и озвучить
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891279
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch
Вот сейчас пришёл новичок
Не знаю кого как, но лично меня вы уже откровенно замумили своей вселенской заботой о сферических новичках в вакууме.
У вас есть проблемы? Изложите свою проблему, всё то, что мешает вам и то, чего бы вам хотелось.
Только не на уровне Манилова, а чуть более конкретно.

P.S.
Можете написать свой SQL-движок - пишите: флаг в руки, барабан на шею и в шляпу всё, что положено.
Не надо только превращать техническую часть форума в широко развёрнутую пятницу.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891281
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Что за чепуха, я никого не собираюсь гнать с FB, или наоборот, завлекать с других серверов.

Это просто инструменты, а если кто-то начинает ныть, что вот шуруповёрт недостаточно шуруповёртит, а болгарка плохо болгарит - у меня такое нытьё вызывает одинаковую реакцию.
Это не о тебе, а о том гипотетическом новичке-до-первого-барьера.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891282
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch
сознательная позиция ФБ-тусовки, но тогда её стоило бы осознать и озвучить
Извечная рефлексия русской интеллигенции замучала?
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891285
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте жить дружно, и не развивать это направление обсуждения.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891286
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте. Только давайте все вместе не развивать, а не только отдельными участниками.
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891314
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а для этого нужно избегать фраз типа

> Такое ты можешь и сам в запросе написать

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

а он НЕ знал

не говоря обо всех минусах такого подхода, даже ЕСЛИ БЫ знал
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891317
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
    #39891321
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

потому что псевдополя в запросе это костыль. Костыль втыкать в качестве архитектурного решения это не очень хорошо. А так да можно самому такой костылик сочинить.
...
Рейтинг: 0 / 0
91 сообщений из 91, показаны все 4 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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