А теперь насчет Postgresql
Mar. 13th, 2010 10:57 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я тут таки закончил кодогенератор на F# и запустил ноччу конвертировать базу в PGSQL.
Работало оно у меня два часа на базе с 20 таблицами и около 2.5 млн объектов, в результате получилось 1.3 гига на сервере и 500 мег нескомпрессированного дампа базы.
Но больше меня интересует другой аспект.
Я сейчас снял снифером дамп взаимодействия клиента и сервера и просто пребываю в шоке. Я сделал заранее препарированный запрос, с bind-параметрами, как положено, подставляю нужные значения и делаю выполнение запроса. А оно на сервер шлет его в виде тупого плейн-текста, т.е. insert into (поля) values (все значения параметров в виде строк).
Для интереса сделал то же самое с Firebird - вроде там все культурно - т.е. сначала препаре запроса, а потом посылка хендла запроса со списком текущих параметров на на выполнение.
Потом сделал select * from table на Postgresql - тоже вроде культурно, шлет бинарный поток с данными.
Это скажите - у меня клиентский софт такой тупой, или я тупой, и сейчас insert модно делать в лоб текстом и парсить запрос с параметрами на клиентской стороне?
Причем это ж все с кучей проблем типа того, что текст запроса будет зависеть от кучи параметров локали которые нужно учитывать.
Так што текстовый бэкап PGSQL - это не обязательно сознательное решение разработчиков, а вполне может оказаться "сделано по историческим причинам, потому что всегда разговаривали с сервером в тексте". Хотя нет - счас проверил pg_dump - читает он с сервера бинарнейший дальше некуда поток.
Работало оно у меня два часа на базе с 20 таблицами и около 2.5 млн объектов, в результате получилось 1.3 гига на сервере и 500 мег нескомпрессированного дампа базы.
Но больше меня интересует другой аспект.
Я сейчас снял снифером дамп взаимодействия клиента и сервера и просто пребываю в шоке. Я сделал заранее препарированный запрос, с bind-параметрами, как положено, подставляю нужные значения и делаю выполнение запроса. А оно на сервер шлет его в виде тупого плейн-текста, т.е. insert into (поля) values (все значения параметров в виде строк).
Для интереса сделал то же самое с Firebird - вроде там все культурно - т.е. сначала препаре запроса, а потом посылка хендла запроса со списком текущих параметров на на выполнение.
Потом сделал select * from table на Postgresql - тоже вроде культурно, шлет бинарный поток с данными.
Это скажите - у меня клиентский софт такой тупой, или я тупой, и сейчас insert модно делать в лоб текстом и парсить запрос с параметрами на клиентской стороне?
Причем это ж все с кучей проблем типа того, что текст запроса будет зависеть от кучи параметров локали которые нужно учитывать.
Так што текстовый бэкап PGSQL - это не обязательно сознательное решение разработчиков, а вполне может оказаться "сделано по историческим причинам, потому что всегда разговаривали с сервером в тексте". Хотя нет - счас проверил pg_dump - читает он с сервера бинарнейший дальше некуда поток.
no subject
Date: 2010-03-13 11:39 am (UTC)Драйвер npgsql?
Date: 2010-03-13 11:47 am (UTC)Re: Драйвер npgsql?
Date: 2010-03-13 11:53 am (UTC)Чувствую, придется изучить api libpq.dll, я не верю, что оно не умеет слать инсерты в нормальном виде.
no subject
Date: 2010-03-13 12:55 pm (UTC)no subject
Date: 2010-03-13 01:02 pm (UTC)Я наивно предполагаю, что если я вызываю mQuery.Prepare то это должно произойти само собой волшебным образом, как в Firebird :)
no subject
Date: 2010-03-13 01:26 pm (UTC)no subject
Date: 2010-03-13 01:05 pm (UTC)Если бы не кодогенератор, я бы сейчас свои запросы еще неделю переписывал на это дело :)
no subject
Date: 2010-03-13 04:10 pm (UTC)no subject
Date: 2010-03-13 05:04 pm (UTC)no subject
Date: 2010-03-15 02:15 am (UTC)no subject
Date: 2010-03-15 07:24 am (UTC)