metaclass: (Default)
[personal profile] metaclass
Я тут таки закончил кодогенератор на F# и запустил ноччу конвертировать базу в PGSQL.
Работало оно у меня два часа на базе с 20 таблицами и около 2.5 млн объектов, в результате получилось 1.3 гига на сервере и 500 мег нескомпрессированного дампа базы.

Но больше меня интересует другой аспект.
Я сейчас снял снифером дамп взаимодействия клиента и сервера и просто пребываю в шоке. Я сделал заранее препарированный запрос, с bind-параметрами, как положено, подставляю нужные значения и делаю выполнение запроса. А оно на сервер шлет его в виде тупого плейн-текста, т.е. insert into (поля) values (все значения параметров в виде строк).

Для интереса сделал то же самое с Firebird - вроде там все культурно - т.е. сначала препаре запроса, а потом посылка хендла запроса со списком текущих параметров на на выполнение.

Потом сделал select * from table на Postgresql - тоже вроде культурно, шлет бинарный поток с данными.

Это скажите - у меня клиентский софт такой тупой, или я тупой, и сейчас insert модно делать в лоб текстом и парсить запрос с параметрами на клиентской стороне?
Причем это ж все с кучей проблем типа того, что текст запроса будет зависеть от кучи параметров локали которые нужно учитывать.

Так што текстовый бэкап PGSQL - это не обязательно сознательное решение разработчиков, а вполне может оказаться "сделано по историческим причинам, потому что всегда разговаривали с сервером в тексте". Хотя нет - счас проверил pg_dump - читает он с сервера бинарнейший дальше некуда поток.

Date: 2010-03-13 11:39 am (UTC)
From: [identity profile] vromanov.livejournal.com
Странно. Так точно быть не должно!

Драйвер npgsql?

Date: 2010-03-13 11:47 am (UTC)
From: [identity profile] ex-vdom.livejournal.com
The Prepare method lets you optimize the performance of frequently used queries. Prepare() basically "caches" the query plan so that it's used in subsequent calls.

Re: Драйвер npgsql?

Date: 2010-03-13 11:53 am (UTC)
From: [identity profile] metaclass.livejournal.com
Для доступа используется libpq.dll и дельфийские компоненты PostgresDAC.
Чувствую, придется изучить api libpq.dll, я не верю, что оно не умеет слать инсерты в нормальном виде.

Date: 2010-03-13 12:55 pm (UTC)
From: [identity profile] theiced.livejournal.com
а вот теперь расскажите как вы это делаете и чейтали ли вы http://www.postgresql.org/docs/8.4/interactive/sql-prepare.html

Date: 2010-03-13 01:02 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Т.е. prepare нужно вызывать явно? :)
Я наивно предполагаю, что если я вызываю mQuery.Prepare то это должно произойти само собой волшебным образом, как в Firebird :)

Date: 2010-03-13 01:26 pm (UTC)
From: [identity profile] theiced.livejournal.com
в этом случае оно будет на клиенте делать вроде (клиент депендант??!). как то так. меня это особо не грузило, так что не разбираюсь.

Date: 2010-03-13 01:05 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Почитал, забавненько.
Если бы не кодогенератор, я бы сейчас свои запросы еще неделю переписывал на это дело :)

Date: 2010-03-13 04:10 pm (UTC)
From: [identity profile] vp.livejournal.com
Дык в итоге, что это было?

Date: 2010-03-13 05:04 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Пока не знаю, нужно читать сырцы компонентов и описание API libpq.dll

Date: 2010-03-15 02:15 am (UTC)
From: [identity profile] theiced.livejournal.com
и таки да - текстовый бэкап - решение несознательное. ибо делается как то автоматически любым вменяемым девелопером. что бы сделать бинарный бэкап - надо быть мегадолбоёбом и долго над этим думать.

Date: 2010-03-15 07:24 am (UTC)
From: [identity profile] metaclass.livejournal.com
Ну да, бинарный сильно сложнее. Зато можно выебнуться умением делать сложные бинарные графы :)

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 4th, 2025 04:22 am
Powered by Dreamwidth Studios