агрегация в bytea

_avz
Дата: 06.05.2015 07:49:11
Не нашёл встроенной функции, которая смогла бы агрегировать например набор целых чисел в бинарный шматок. (Зачем надо, вопрос отдельный, вкратце - тотальная оптимизация обмена К-С). Написал свою, но, возможно, есть лучшее решение в плане быстродействия?
Maxim Boguk
Дата: 06.05.2015 08:54:44
_avz
Не нашёл встроенной функции, которая смогла бы агрегировать например набор целых чисел в бинарный шматок. (Зачем надо, вопрос отдельный, вкратце - тотальная оптимизация обмена К-С). Написал свою, но, возможно, есть лучшее решение в плане быстродействия?


Прежде чем начинать это делать надо
1)понять ваш клиент по какому протоколу работает с базой (текстовому или бинарному)

Если по текстовому то учитывая что в bytea с хорошими шансами каждый байт bytea передается в протоколе текстом вида \\xxx (т.е. 5ть байтами) то вы вряд ли на этом получите какой то разумный выйгрыш на старых версиях базы. На новых версиях базы можно попробовать bytea_output=escape и тогда каждый байт будет всего 2мя байтами передаваться, что тоже не думаю что вас порадует. Такие вещи стоит тестировать перед тем как начинать делать.

В случае бинарного протокола как там передается bytea между клиентом и сервером вопрос открытый.
Скорее всего заметного выйгрыша вы не пролучите.

PS: для передачи набора чисел есть массивы.

--
Maxim Boguk
www.postgresql-consulting.ru
_avz
Дата: 06.05.2015 09:38:49
Maxim Boguk
Прежде чем начинать это делать надо
1)понять ваш клиент по какому протоколу работает с базой (текстовому или бинарному)
клиент на Delphi, компоненты pgDAC.
Maxim Boguk
Если по текстовому то учитывая что в bytea с хорошими шансами каждый байт bytea передается в протоколе текстом вида \\xxx (т.е. 5ть байтами) то вы вряд ли на этом получите какой то разумный выйгрыш на старых версиях базы. На новых версиях базы можно попробовать bytea_output=escape и тогда каждый байт будет всего 2мя байтами передаваться, что тоже не думаю что вас порадует. Такие вещи стоит тестировать перед тем как начинать делать.
В случае бинарного протокола как там передается bytea между клиентом и сервером вопрос открытый.
Скорее всего заметного выйгрыша вы не пролучите.
Спасибо
Maxim Boguk
PS: для передачи набора чисел есть массивы.
Сейчас на них и работает. Однако компоненты pgDAC интерпретируют массивы как текстовый тип (ftMemo) и приходится на клиенте парсить строки из тысяч элементов, здесь-то и требуется максимальное быстродействие. Из бинарного куска оптимальней числа вычитывать было б.