powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FireBird 3 выборка и Блоб
20 сообщений из 45, страница 2 из 2
FireBird 3 выборка и Блоб
    #39035465
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

даже если бы такой флаг был сделан, то возможен он только в новом API (о чём в принципе и говорит DS), а это потребует переписать компоненты доступа
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035480
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисвозможен он только в новом API (о чём в принципе и говорит DS)
Нет, даже там с этим облом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035488
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

я и не сказал что оно есть. Но теоретически может быть. Что может помешать?
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035490
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисНо теоретически может быть. Что может помешать?

Я же уже сказал: проклятый вопрос выделения буферов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035607
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ни API, ни форматы буферов менять не надо.

Указание серверу можно дать с помощью хинта (подсказки) в самом запросе.
Такая методика применяется в других серверах.

Например:

/* @@load_blob_inplace: имя_поля */
SELECT ... FROM ...

Блобы передаются в месте с выборкой и размещаются в оперативной памяти клиентской библиотеки. Обращение к ним остается таким же -- через вызовы API функций по БЛОБ ІД. Просто теперь эти вызовы не приводят к трафику по сети, а берут данные из переданного БЛОБа, сохраненного в памяти клиентской библиотеки.
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035610
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Sysdba22!
You wrote on 25 августа 2015 г. 13:46:11:

Sysdba22> Ни API, ни форматы буферов менять не надо.
не люблю школьников.
даже если им за 40.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035632
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

прежде чем что-то утверждать наверное следовало бы хоть чуток знать как это устроено сейчас.

И таки что будет делать бедный 32 битный клиент если какой-то чудик запросит хотя бы 1000 строк с блобами каждый из которых занимает по 1 гигабайту?
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035730
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfb userКак?

есть такая агрегатная функция LIST
Я знаю. Но не вижу как её можно использовать.
Давайте на примере:
Код: sql
1.
select * from RDB$PROCEDURES


В табличке 10000 записей.
В каждой записи три непустых блоба, итого 30000 лишних пакетов. С пингом в 10мс получается 300 секунд (думаю на самом деле будет много хуже).

Расскажите как LIST поможет.
Как это сделать на UDF, универсально, для всех возможных запросов и параметров и типов данных, я представляю, т.к. реализовал такую функцию для трёхзвенки. Туда можно хоть EXECUTE BLOCK передать, который набор данных возвращает.

Симонов ДенисЯ тебя конкретно спрашивал про UDR (внешние функции/процедуры/триггеры) которые ты упомянул. Пишутся они совершенно иначе. Хоть одну скомпилировал?

Лично я пробовал два раза хотя бы скомпилировать примеры. И пока не очень удачно. Ибо почему-то, то что содержится в include не достаточно и приходится тащить чуть ли не половину исходников FB. Не знаю может сейчас это и поправлено. Попробую ещё раз как время будет.Я предлагаю использовать UDR, если только их можно использовать хоть для чего-то.
Вообще разницы нет что использовать, хоть UDF, хоть UDR. На скорость влиять не должно.
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035737
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

можно использовать SQL.

операции слияния, преобразования в текст.


если блобы мелкие - свалить их в одно текстовое поле и вывалить клиенту.

Если блобов слишком много, они большие и ненужные, то не парить моск разработчикам, а выполнить СВОЮ работу и переделать структуру БД на удобоваримую.
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035806
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fb user,

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

Зафигачить всё это в один BLOB LISTом я могу, только мне лень. Там с составлением заголовка процедуры много мороки.

примерчик использования LIST

сильно упрощенно. Но понять можно. Не собирается заголовок и не учитываются зависимости. Тут по хорошему сначала надо одни хидеры процедур делать.

Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
CREATE PACKAGE METADATA_UTILS
AS
begin
  function ExtractScript returns blob sub_type text;
end

RECREATE PACKAGE BODY METADATA_UTILS
AS
begin
  function GetHeader(AName char(31)) returns blob sub_type text
  as
  begin
    -- ну тут дофига всего
    return 'CREATE OR ALTER PROCEDURE ' || AName || ASCII_CHAR(13) || 'AS';
  end

  procedure GetProcedures returns (OutText blob sub_type text, OutDelim varchar(10))
  as
  begin
    for
      select
        GetHeader(P.RDB$PROCEDURE_NAME) as header,
        P.RDB$PROCEDURE_SOURCE as source,
        P.RDB$DESCRIPTION as description
      from RDB$PROCEDURES P
      as cursor C
    do begin
      OutText = C.header;
      OutDelim = '^' ||  ASCII_CHAR(13) || ASCII_CHAR(13);
      suspend;
      OutText = C.source;
      OutDelim = ASCII_CHAR(13);
      suspend;
      if (OutText is not null) then
      begin
        OutText = 'COMMENT ON ''' || C.description || '''';
        OutDelim = '^' || ASCII_CHAR(13) || ASCII_CHAR(13);
        suspend;
      end
    end
  end

  function ExtractScript returns blob sub_type text
  as
  begin
    return 'SET TERM ^; ' || ASCII_CHAR(13) || ASCII_CHAR(13) ||
      (select LIST(OutText, OutDelim)
       from GetProcedures) || ASCII_CHAR(13) || ASCII_CHAR(13) || 'SET TERM ;^ ';
  end
end

select METADATA_UTILS.ExtractScript()
from rdb$database



Использовать для этого UDF, да ещё в трёхзвенке это как из пушки по воробьям. Ибо если ты делаешь трёхзвенку, то либо у тебя сервер приложений стоит на том же сервере где и СУБД, либо как минимум соединена по нормальному каналу. А уж тонкому клиенту ты можешь отдавать инфу в каком угодно виде.
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035865
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

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

И ещё. Вы не верно меня поняли. В моей трёхзвенке нет такой UDF. Но там есть то что я описал выше, т.е. реализованный универсальный алгоритм (который вполне можно заиспользовать и для UDF и для UDR, или чтобы просто результат запроса положить в строку (для любых нужд)).
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035880
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Fb User!
You wrote on 25 августа 2015 г. 17:57:48:

Fb User> В моей трёхзвенке нет такой UDF.
и трехзвенки тоже никакой нет...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035888
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fb user,

а понятно. Вы результат запроса сериализуете в XML или JSON. Ну так этому не место в UDF
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035988
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Дениса понятно. Вы результат запроса сериализуете в XML или JSON. Ну так этому не место в UDF
Не понтяно вам. Не в XML и не в JSON. В свой формат, с упором на скорость парсинга.
Чему не место в UDF?
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035993
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fb user,

любой сериализации. Legacy UDF устроены таким образом, что контекст текущего коннекта там не получить. Таким образом придётся внутри UDF делать ещё одно подключение. В общем нафиг, нафиг.
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39035999
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисТаким образом придётся внутри UDF делать ещё одно подключение. В общем нафиг, нафиг.
Если бы я реализовывал, то передал бы хэндлы сессии и текущей транзакции в UDF.
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39036012
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие UDF, XML и т.д.? Все делается проще:
1. добавляем calculated поле, в которое кастуем блоб если он короче некоторой величины.
2. на клиенте добавляем вычисляемое поле, которое смотрит сперва поле из п.1, а если оно null то дергает уже исходный блоб.
Изменений и в БД, и на клиенте минимум, а на каналах с большими задержками ускорение заметно невооруженным глазом, если мелких блобов в разы больше.
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39036020
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fb userпередал бы хэндлы сессии и текущей транзакции в UDF.
Прэлееестно...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39036177
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dimitry Sibiryakov!
You wrote on 26 августа 2015 г. 10:42:48:

Dimitry Sibiryakovfb user> передал бы хэндлы сессии и текущей транзакции в UDF.
> Прэлееестно...per anus ad astra!

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireBird 3 выборка и Блоб
    #39036186
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikeDDКакие UDF, XML и т.д.? Все делается проще:
1. добавляем calculated поле, в которое кастуем блоб если он короче некоторой величины.
2. на клиенте добавляем вычисляемое поле, которое смотрит сперва поле из п.1, а если оно null то дергает уже исходный блоб.
Изменений и в БД, и на клиенте минимум, а на каналах с большими задержками ускорение заметно невооруженным глазом, если мелких блобов в разы больше.

толково, надо будет попробовать.
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FireBird 3 выборка и Блоб
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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