Автор | Сообщение |
|
| постоянный участник
|
Пост N: 4890
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.05.16 14:39. Заголовок: MiniGui + PostgreSQL
|
|
|
Ответов - 133
, стр:
1
2
3
4
5
6
7
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 1248
Зарегистрирован: 27.01.07
|
|
Отправлено: 26.07.16 16:31. Заголовок: Andrey пишет: Сдела..
Andrey пишет: цитата: | Сделал тест для МиниГуи + PostgreSQL, копирование dbf-файла 13000 записей за 3 мин. Тормоза однако. Но это копирование записей в лоб: одна за другой. Искал варианты ускорения процесса. |
| Андрюха, SQL никак не ускорит копирование файла. Это же ж Structured Query Language таки...)))
|
|
|
|
| постоянный участник
|
Пост N: 5021
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.07.16 18:14. Заголовок: PSP пишет: Андрюха,..
PSP пишет: цитата: | Андрюха, SQL никак не ускорит копирование файла. Это же ж Structured Query Language таки...))) |
| Смотри Пост N: 5017 и читай по ссылке.
|
|
|
|
| постоянный участник
|
Пост N: 5022
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.07.16 18:16. Заголовок: Петр пишет: Почитай..
Петр пишет: цитата: | Почитайте README.md из поставки harbour |
| Не ту у меня такого файла... Давно не обновлялся с CVS.
|
|
|
|
| постоянный участник
|
Пост N: 1210
Зарегистрирован: 09.10.06
|
|
Отправлено: 26.07.16 19:45. Заголовок: Andrey пишет: Давно..
|
|
|
|
| постоянный участник
|
Пост N: 1249
Зарегистрирован: 27.01.07
|
|
Отправлено: 26.07.16 20:23. Заголовок: Andrey пишет: Смотр..
Andrey пишет: цитата: | Смотри Пост N: 5017 и читай по ссылке. |
| И чё? "...in order to make the insertion of large portions of data into PostgreSQL faster..." Одна простая вещь: физическая среда передачи данных. Всё остальное вторично. Если эта самая large portions of data пролазит через физику с трудом, то никакой SQL тут не поможет. Пойми это. ps. nPreBuffer: автор подразумевает размер 1400 байт, чтобы был ниже стандартного MTU=1500 байт. Но, 1500 байт бывает только в случае соединения IPoE или в локальной сети. Все другие типы соединений имеют свой MTU. Это значит, что фрагментация пакетов будет в любом случае. Она там и пишет: "needs testing how libPQ is doing buffering by itself, and if this is needed?"
|
|
|
|
| постоянный участник
|
Пост N: 5023
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.07.16 21:10. Заголовок: Петр пишет: Ну тогд..
|
|
|
|
| |
Пост N: 5927
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.07.16 21:56. Заголовок: вернул тему на место..
вернул тему на место
|
|
|
|
| постоянный участник
|
Пост N: 5048
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.08.16 21:32. Заголовок: Разобрался со скорос..
Разобрался со скоростью загрузки в базу для PostgeSql. Конвертор Dbf -> PostgeSql на MiniGui заработал ! База 18 Мб, 14 тыс.записей за 40 секунд всего - отправка ОДНИМ запросом. То что надо. LetoDb так же примерно качает, может чуть быстрей, только за 15-20 транзакций. Раньше было примерно 4 минуты. Читал что в PostgeSql можно одним запросом отправлять 1Gb. Пока ещё не проверял...
|
|
|
|
| |
Пост N: 5967
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.16 21:36. Заголовок: Andrey И в чем дело..
Andrey И в чем дело было ?
|
|
|
|
| постоянный участник
|
Пост N: 1253
Зарегистрирован: 27.01.07
|
|
Отправлено: 16.08.16 21:45. Заголовок: Andrey пишет: Читал..
Andrey пишет: цитата: | Читал что в PostgeSql можно одним запросом отправлять 1Gb. Пока ещё не проверял... |
| К примеру, есть два канала: один - 10Миб/с, а второй 100Мбит/с. Как думаешь, одинаковое время будет затрачено на передачу пакета данных размером в 1Gb в обоих случаях? Может не стоит озвучивать цифры, зависящие от массы других факторов? Если на передачу тех же твоих 14тыс. записей через хреновый канал сотового оператора понадобится час, ты скажешь, что PostgeSQL - это отстой? Прости уж за сарказм)) цитата: | LetoDb так же примерно качает, может чуть быстрей, только за 15-20 транзакций. |
| Это только подтверждает, что всё упирается в физику.
|
|
|
|
| постоянный участник
|
Пост N: 5049
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.08.16 14:26. Заголовок: PSP пишет: Это толь..
PSP пишет: цитата: | Это только подтверждает, что всё упирается в физику. |
| Да я не спорю с этим. Просто долго ковырялся с простым решением у себя в тестовом примере, пока не догадался как сделать. Dima пишет: цитата: | Andrey И в чем дело было ? |
| Делал как раньше на LetoDb - отправка по одной записи. Потом сделал (SergKis помог, без него бы не получилось!) отправку через транзакции. В PostgreSql сделал отправку всей базы ОДНОЙ транзакцией. Просто привыкнуть надо к Sql, работа с DBF это просто. Хотя дай поработать кто не работал с DBF, то для него будет много непоняток.
|
|
|
|
|
| постоянный участник
|
Пост N: 1256
Зарегистрирован: 27.01.07
|
|
Отправлено: 17.08.16 14:29. Заголовок: Andrey пишет: Да я ..
Andrey пишет: цитата: | Да я не спорю с этим. Просто долго ковырялся с простым решением у себя в тестовом примере, пока не догадался как сделать. |
| Ок, я тоже перегибаю)
|
|
|
|
| постоянный участник
|
Пост N: 5051
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.08.16 20:01. Заголовок: Хотелось бы иметь от..
Хотелось бы иметь отдельный модуль postgres_aadd.c Чтобы не зависить от разработчиков contrib_hbpgsql, когда они ещё это сделают. В свой проект я добавил модуль: postgres_aadd.c ---------------- файл postgres_aadd.c ------------------ /* * Добавочный файл к postgres.c * Для определения версии libpq */ #include "hbapierr.h" #include "hbapiitm.h" HB_FUNC( PQLIBVERSION ) { //#if PG_VERSION_NUM >= 90100 hb_retni( PQlibVersion() ); //#else // hb_retni( 0 ); //#endif } ---------------- конец файла postgres_aadd.c --------------- Закоментировал строчки, т.к. всегда возвращается 0 Но потом не идёт компиляция моего проекта, ошибка: postgres_aadd.c: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_PQlibVersion' referenced from .... hbmk2[dbf_to_PostgreSQL]: Error: Running linker. 2 Нашел в исходниках функцию: int PQlibVersion(void) { return PG_VERSION_NUM; } Помогите пожалуйста кто может - как подсоединить эту функцию ?
|
|
|
|
| постоянный участник
|
Пост N: 1257
Зарегистрирован: 27.01.07
|
|
Отправлено: 20.08.16 21:51. Заголовок: PG_VERSION_NUM поищи..
PG_VERSION_NUM поищи для начала.
|
|
|
|
| постоянный участник
|
Пост N: 5052
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.08.16 04:28. Заголовок: PSP пишет: PG_VERSI..
PSP пишет: цитата: | PG_VERSION_NUM поищи для начала. |
| Не нашёл... Где хоть искаь то ?
|
|
|
|
| Администратор
|
Пост N: 3483
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.08.16 09:00. Заголовок: Andrey пишет: Помог..
Andrey пишет: цитата: | Помогите пожалуйста кто может - как подсоединить эту функцию ? |
| Наверное надо подключить файлы в начале модуля: #include "libpq-fe.h" #include "pg_config.h" А еще лучше #include "hbpgsql.h" в которм находятся соответствующий определения А саму функцию лучше написать так: #include "hbapi.h" #include "hbpgsql.h" HB_FUNC( PQLIBVERSION ) { hb_retni( PG_VERSION_NUM ); }
|
|
|
|
| постоянный участник
|
Пост N: 1264
Зарегистрирован: 09.10.06
|
|
Отправлено: 21.08.16 12:30. Заголовок: Pasha пишет: А сам..
Pasha пишет: цитата: | А саму функцию лучше написать так: |
|
Если Андрею дать грабли - он рано или поздно на них наступит.
|
|
|
|
| постоянный участник
|
Пост N: 5053
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.08.16 14:17. Заголовок: Петр пишет: Если Ан..
Петр пишет: цитата: | Если Андрею дать грабли - он рано или поздно на них наступит. |
| Не надо мне давать. Я и сам их найду ! Pasha пишет: цитата: | А саму функцию лучше написать так: |
| Спасибо ! Получилось. Только фигня получается. Эта функция возвращает 80408, т.е. номер библиотеки libpq.lib А мне надо было версию libpq.dll лежащий рядом с ехе-ником, через которую обращаюсь с сервером PostgreSql.
|
|
|
|
| постоянный участник
|
Пост N: 1265
Зарегистрирован: 09.10.06
|
|
Отправлено: 21.08.16 14:24. Заголовок: Andrey пишет: Тольк..
Andrey пишет: Не думал. что все получится так быстро (в смысле - грабли) А ну попробуйте это « /* * IT IS IMPORTANT: in my case Postgres ver. 9.5.3 for Windows systems * was installed on local machine, port 5432 (default) */ #include "hbdyn.ch" PROCEDURE Main() LOCAL hLib LOCAL nVersion := 0 LOCAL cConnInfo LOCAL host := "localhost" LOCAL hostaddr := "127.0.0.1" LOCAL port := 5432 LOCAL connect_timeout := 10 ? PQlibVersion() ? hb_DynCall( { "PQlibVersion", "libpq.dll", HB_DYN_CTYPE_INT } ) //? hb_DynCall( { "PQlibVersion", "libpq_8.dll", HB_DYN_CTYPE_INT } ) hLib := hb_libLoad ( "libpq.dll" ) IF ! Empty( hLib ) nVersion := hb_DynCall( { "PQlibVersion", hLib, HB_DYN_CTYPE_INT } ) IF nVersion < 90100 ? "The function PQping() not supported." QUIT ENDIF // 1) !!databases!! is not valid word for ConnInfo cConnInfo := "host = localhost database = test" PingTest( cConnInfo, hLib ) // 2) the default port for Postgres is 5432, but we can try connect to port 3333 and see what is happen cConnInfo := "host = " + host + " port = " + "3333" PingTest( cConnInfo, hLib ) // 3) next attempt cConnInfo := hb_strFormat( "host = %1$s hostaddr = %2$s port = %3$d connect_timeout = %4$d", host, hostaddr, port, connect_timeout ) PingTest( cConnInfo, hLib ) hb_libFree( hLib ) ENDIF RETURN /*--- * */ STATIC PROCEDURE PingTest( c, hLib ) ? 'cConnInfo is "' + c + '"' ? "PQPing( cConnInfo ) returns ", GetPingResult( hb_DynCall( { "PQping", hLib, HB_DYN_CTYPE_INT }, c ) ) RETURN /*--- * */ STATIC FUNCTION GetPingResult( n ) LOCAL aMsg := ; { ; { "PQPING_OK", "(server is accepting connections)"}, ; { "PQPING_REJECT", "(server is alive but rejecting connections)"}, ; { "PQPING_NO_RESPONSE", "(could not establish connection)"}, ; { "PQPING_NO_ATTEMPT", "(connection not attempted (bad params))"} ; } IF n >= 0 .AND. n < Len( aMsg ) RETURN ( aMsg[ n + 1 ][ 1 ] + " " + aMsg[ n + 1 ][ 2 ] ) ENDIF RETURN "" #pragma BEGINDUMP #include "hbpgsql.h" HB_FUNC( PQLIBVERSION ) { hb_retni( PG_VERSION_NUM ); } #pragma ENDDUMP »
|
|
|
|
| постоянный участник
|
Пост N: 5054
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.08.16 15:15. Заголовок: Петр пишет: А ну по..
Петр пишет: Немного модифицировал под МиниГуи. Вот результат: 80408 90407 90407 cConnInfo is "host = localhost database = test" PQPing( cConnInfo ) returns PQPING_NO_ATTEMPT (connection not attempted (bad params)) cConnInfo is "host = localhost port = 3333" PQPing( cConnInfo ) returns PQPING_NO_RESPONSE (could not establish connection) cConnInfo is "host = localhost hostaddr = 127.0.0.1 port = 5432 connect_timeout = 10" PQPing( cConnInfo ) returns PQPING_NO_RESPONSE (could not establish connection) Я так понял, что для определения версии libpq.dll достаточно всего этой строчки (и и новой функции): ? hb_DynCall( { "PQlibVersion", "libpq.dll", HB_DYN_CTYPE_INT } ) ? А выгружать/убить после этой функции hb_DynCall() - не надо ? А то не пользовался такой функцией.
|
|
|
Ответов - 133
, стр:
1
2
3
4
5
6
7
All
[только новые]
|
|