|
Обнаружил баг или это неизвестная мне фича - блоб поле на удаленной БД
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=40&msg=39888335&tid=1560514]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 159ms |
0 / 0 |