LINUX.ORG.RU

Оптимизация plpgsql кода


0

0

Добречко! Есть такая тема: биллинг, построенный целиком на Postgres, plpgsql функциях и тригах. Стоит задача увеличить его быстродействие. Сначала планировалось сделать это переписыванием функций на C и компиляцией во внешние so. Но кое-что прочитав я так и не обнаружил способов выполнить запрос из C функции, кроме как воспользовавшись клиентским интерфейсом. Вопроса собственно 2: 1. Стоит ли вообще связываться с С? И если да, то как делать оттуда запросы? 2. Как вообще можно разогнать такую систему?

Спасибо заранее.


Мне кажется что нужно перерабатывать саму базу данных - грамотно добавить индексы, разбить данные на таблицы и выстроить связи. В любом случае алгоритмическая оптимизация в разы эффективней чем переписывание на компилируемом языке и заворачивание ключей оптимизации компилера. Ну а в Си просто возьми библиотечку для работы с этой БД, документацию по API и вперед.

LX ★★
()

to theserg:

Да нет, как обратиться к базе из С я знаю. Но проблема заключается в том, что если я пишу функцию для Postgres и из этой функции делаю запрос к базе используя клиентский интерфейс, то получится полная фигня IMHO - т.е. одна часть программы базы будет обращаться к другой через UNIX sockets (или вообще по TCP/IP). А это совсем не быстро, особенно подключение. В принципе я думал, что есть способ обратиться к базе непосредственно, используя то преимущество, что сама база и функция находятся в одном адресном пространстве. Например, в plpgsql можно просто написать запрос и присвоить результат переменной. Так же и в SQL функциях.

to LX:

Алгоритмическая оптимизация это хорошо, но оказывается, что там уже все довольно хорошо заоптимизировано (алгоритмически). Пути к дальнейшему ускорению - улучшение железа (пока не приемлемо), пересбор Postgres под конкретную архитектуру с оптимизацией, и переписывание триггеров на C. То есть вариант библиотечка для базы не катит - необходимо чтобы код выполнялся из процесса базы, т.е. функциями в .so. А для C-функций, встраиваемых в базу я не могу найти как выполнить запрос не обращаясь к клиентской библиотеке. Вот в чем дело.

Всем большое спасибо.

k41n
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.