Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Компоненты для работы с БД PostgreSQL.   Найти похожие ветки 

 
Fredericco ©   (2004-09-27 19:44) [0]

Возникла необходимость работать с сабжевой БД.
Был выбран компонент от фирмы MicroOLAB.

Исходные данные:
Записей в таблице  - 21400
Физически таблица занимает места - 10 мегабайт
Сами данные от сервака на клиентскую машину, после sql запроса,   идут -  3-4 секунды (что, для нас, удовлетворительно)

Недостаток:
Когда таким количеством записей наполнен DataSet, то перебор всех записей у DataSet"а методами Next или MoveBy, становиться до неприличия долгим.
Простой код:

 First;
 While EOF do Next;

выполняется за 5-6 минут!
В связи с этим вопросы:
 1) Может кто уже работал с этими компонентами, и сталкивался с этой проблемой?
 2) Нет ли других компонентов для работы с сабжевой БД?

Заранее благодарен,
с уважением Fredericco.


 
Fredericco ©   (2004-09-28 10:05) [1]

Сорри очепятка, есессно:

 First;
 While not EOF do Next;



 
Nikolay M. ©   (2004-09-28 10:13) [2]


> 2) Нет ли других компонентов для работы с сабжевой БД?

Zeos Library. Сам не работал.


 
Fredericco ©   (2004-09-28 10:23) [3]

2 Nikolay M. ©   (28.09.04 10:13) [2]
Уже пробывал.
Чего то не работают.
Скорей всего они не совместимы с нашей версией сервака (7.4)


 
Плохиш ©   (2004-09-28 10:32) [4]

Чем АДО не нравится?


 
Плохиш ©   (2004-09-28 10:36) [5]

http://gborg.postgresql.org/project/psqlodbc/projdisplay.php

Ответ на следующий (ещё не заданный) вопрос ;-)


 
Anatoly Podgoretsky ©   (2004-09-28 10:44) [6]

PostgreSQL говоришь, а чего же работаешь навигационными методами, а не реляционными. Все должно летать.


 
Fredericco ©   (2004-09-28 10:51) [7]

2 Anatoly Podgoretsky ©   (28.09.04 10:44) [6]
Это не я так работаю :-)
Я лишь член небольшой команды.
И тут лишь в планах работать реляционными. Пока основной упор делается на работу с большим числом различных БД.


 
Денис   (2004-09-28 10:53) [8]

Вы для начала с Paradox разберитесь (First, Next :-)


 
Fredericco ©   (2004-09-28 11:00) [9]

2 Плохиш ©   (28.09.04 10:32) [4]
Спасибо за ссылку, но я его уже пробывал и либо лыжи, либо я:

BDE Error: 12550
Invalid configuration parameter.
Alias: ODBC1

Скорей всего я, да? :-)


 
Плохиш ©   (2004-09-28 11:11) [10]


> Fredericco ©   (28.09.04 11:00) [9]

> BDE Error: 12550

с BDE не работаю, не знаю. АДО работает без проблем.

> Скорей всего я, да? :-)

это не я сказал ;-)


 
Плохиш ©   (2004-09-28 11:16) [11]


> Fredericco ©   (28.09.04 11:00) [9]

Только что попробовал БДЕ, все работает!
Настой правилино ODBC-драйвер.


 
Плохиш ©   (2004-09-28 11:17) [12]


> Плохиш ©   (28.09.04 11:16) [11]

Фи :-)
правилино = правильно
Настрой DNS


 
pasha_golub ©   (2004-09-28 11:23) [13]

Рассказываю прикол.
PostgreSQLDAC. DAC - Direct Access Component
И на кой этот гемор с БДЕ, ОДБС, АДО и т.д.

Далее, тебе Подгорецкий умную вещь сказал!!! На хера бегать по всему датасету из начала в конец?

Ты когда нибудь видел чтобы оператор напрямую работал с 21000 записей? Это в страшном сне такого не увидишь! Если видел, то привели плиз ситуацию.


 
Плохиш ©   (2004-09-28 11:35) [14]


> pasha_golub ©   (28.09.04 11:23) [13]

Вы про это http://microolap.com/dac/pgsql/index.htm ?
Больше всего понравились два пункта "PostgresDAC is a royalty-free product" и "Try a fully functional trial version" :-)
учитывая, что psqlODBC распостраняется под LGPL.


 
pasha_golub ©   (2004-09-28 11:40) [15]

Плохиш ©   (28.09.04 11:35) [14]
Да, я про это.

А что смущает? Версия действительно полнофункциональная, единственное отличий зарегистрированной - это наличие тех. поддержки и отсутствие модального окошка с напоминанием при коннекте к БД. Все.


 
Плохиш ©   (2004-09-28 12:03) [16]


> pasha_golub ©   (28.09.04 11:40) [15]
> Версия действительно полнофункциональная,
> единственное отличий зарегистрированной - это наличие тех.
> поддержки и отсутствие модального окошка с напоминанием
> при коннекте к БД.

Дальше продолжать нет смысла. Хотя попробуем :-) Zeos тест не прошёл :-) Посмотрим, чего накрутили здесь


 
pasha_golub ©   (2004-09-28 12:12) [17]

Плохиш ©   (28.09.04 12:03) [16]
А что за тест? У меня? например? Зеос неправильно возвращал сложные запросы типа:

(SELECT ...)
UNION
(SELRCT ...)

Вернее возвращал правильно, а потом вешался, когда пытался понять что к чему.


 
Fredericco ©   (2004-09-28 12:13) [18]

Плохиш ©  
Сенкс, но через АДО получается 30-40 секунд. Причем это время уходит на скачивание записей с сервера. Как только загрузка завершена то данные готовы.
Правда 30 секунд все равно много :-((


 
sniknik ©   (2004-09-28 12:26) [19]

> Сенкс, но через АДО получается 30-40 секунд.
30-40 сек много? вместо 5-6мин?

т.к. то что похоже у тебя было
>  Сами данные от сервака на клиентскую машину, после sql запроса,   идут -  3-4 секунды (что, для нас, удовлетворительно)
похоже это просто открытие серверного курсора
и
> First;
> While not EOF do Next;
> выполняется за 5-6 минут!
а это fetchall, скачка на клиента по мере обращения.
что теперь с ADO на похожем цикле? должно "пролетать" мгновенно.

> Правда 30 секунд все равно много :-((
смени клиентский курсор на серверный, поведение будет аналогично описанному в [0]
ускорить открытие клиентского можно асинхронным выполнением (откроется с неполными данными, до конца докачается в фоне)


 
Fredericco ©   (2004-09-28 12:50) [20]

sniknik ©   (28.09.04 12:26) [19]
Все равно много :-)
Просто достаточно большой проект. Со своими ошибками на этапе разработки. Я не руководитель :-). Ошибка в следующем. Тут все данные имеющиеся в базе отображаются сразу. То есть в программе не предусмотренно никаких фильтров. Хуже того, таблицы по lookup полям тоже сразу забираються после начитывания родительской. Полностью. Ну вот так вот тут - неправильно. Переделыать будем. Но потом.
К примеру в IB таблица в 30000 записей отображается за 3-4 сек. Полностью.


 
Johnmen ©   (2004-09-28 12:59) [21]

>Fredericco ©   (28.09.04 12:50) [20]
>в IB таблица в 30000 записей отображается за 3-4 сек. Полностью.

На экране ?
:))))))


 
Fredericco ©   (2004-09-28 13:02) [22]

2 Johnmen ©   (28.09.04 12:59) [21]
Да. Зрелище не очень.


 
sniknik ©   (2004-09-28 13:33) [23]

> sniknik ©   (28.09.04 12:26) [19]
> Все равно много :-)
при серверном курсоре будут те же 3-4 сек (в основном при первом подключении, на само время подключения)
при ассинхронном запросе открытие и показ первой порции будет мгновенным (не считая того же времени подключения если его не было), и это много? а сколько в самый раз, минус пол часа?

> 2 Johnmen ©   (28.09.04 12:59) [21]
> Да. Зрелище не очень.
ну так в чем проблема? такое количество одновременно отображонных записей (30тыс) на экране, это слошной серый фон... вставьте такую картинку на  открытие и не морочте всем мозги.

по моему тебе нужно заполнить пробелы в образовании, по теме клиентские/серверные курсоры, и что именно отображается в гридах/dbконтролах, а что нет.
тогда все станент на свои места.


 
pasha_golub ©   (2004-09-28 14:20) [24]

sniknik ©   (28.09.04 13:33) [23]

по моему тебе нужно заполнить пробелы в образовании, по теме клиентские/серверные курсоры, и что именно отображается в гридах/dbконтролах, а что нет.
тогда все станент на свои места.


Я бы тоже с удовольствием почитал. Можно ссылочку?


 
Плохиш ©   (2004-09-28 14:22) [25]


> Fredericco ©   (28.09.04 12:13) [18]

Ну sniknik уже всё объяснил :-))

> pasha_golub ©   (28.09.04 12:12) [17]

Тест на скорость. Имеется работающая программа с использованием ADO, переделывается на другой движок и сравнивается время. Результаты для PostgresDAC не утешительные. В 4 раза медленней чем ADO.


 
Fredericco ©   (2004-09-28 14:30) [26]

2 sniknik ©   (28.09.04 13:33) [23]
//по моему тебе нужно заполнить пробелы в образовании, по теме ..клиентские/серверные курсоры, и что именно отображается в гридахdbконтролах, а что нет.
тогда все станент на свои места.

Не спорю. :-)

 Но вот какая задача стоит передо мной.
 Трое человек, в том числе и я, пишут компонент-переходник между нашей программой и разными типами БД. Я создаю класс, наследуясь от одного нашего стандартного. Среди прочих методов, которые мне надо перекрыть( что б мой компонент, собственно, работал нормально со все программой), есть два: Open, RecordCount и LoadRecord(RecNum:integer; aRecord:TObject). Есессно там есть и многие другие, но это не важно.
 Когда в программе хотят отобразить таблицу, вызывают Open, а потом последовательно LoadRecord для всех записей. Так вот, после Open я данные из таблицы должен уже иметь. Что бы на каждый LoadRecord выдавать запись из моего набора данных (TDataSet, наследник от TDataSet, какого угодно хоть TList, главное что б данные уже были у меня). Где потом эти данные отображаются мне все равно. А отображаются они в самых различных местах. И впринципе без разницы где будет задержка выборки данных: на этапе  Open или на каждом вызове LoadRecord - главное что б ее не было.
Да и кстати, мои познания в программировании не ограничиваются киданием мышкой компонентов на форму и прописыванием свойств в ObjectInspector"е. :-)


 
pasha_golub ©   (2004-09-28 14:35) [27]

Плохиш ©   (28.09.04 14:22) [25]
Тест тесту рознь. Зато при большщом кол-ве записей АДО выдаст "Out of memory". Был уже прецендент, а ДАС не выдаст.

ДАС проигрывает по скорости тестам по навигации, сродни коду в [0]. А в остальном не думаю.

Fredericco ©   (28.09.04 14:30) [26]
Да и кстати, мои познания в программировании не ограничиваются киданием мышкой компонентов на форму и прописыванием свойств в ObjectInspector"е. :-)

Забыл добавить про поиск файлов FindFirst\FindNext. :-D


 
Плохиш ©   (2004-09-28 14:37) [28]


> Fredericco ©   (28.09.04 14:30) [26]

Так и ищи данные только когда их у тебя попросят.

> главное что б ее не было

Все процессы в мире протекают с конечной скоростью.


 
sniknik ©   (2004-09-28 14:39) [29]

> Я бы тоже с удовольствием почитал. Можно ссылочку?
выбирай любую
http://www.yandex.ru/yandsearch?stype=www&nl=0&text=%C5%EB%EC%E0%ED%EE%E2%E0

у меня вот такая
http://books.dore.ru/bs/f1bid405.html
(сразу попалась)
и такая
http://books.dore.ru/bs/f1bid1156.html
http://www.yandex.ru/yandsearch?text=%CC%E0%E9%EA%EB+%CE%F3%F2%E5%E9&stype=www
и еще 3 или 4 дома (не помню авторов поэтому найти проблемно)
покупалось в основном ради кусочка инфы... того чего почемуто не оказывалось в других книгах, елманову к примеру купил ради RDS которое там так полностью и не раскрывается ;( как оказалось, а начинал учить (ADO) по хелпам, книг вначале не было ;о( да и в инете статьи не находились (первую нашол на королевстве, поздно, в основном все уже сам пробовал).

> пишут компонент-переходник между нашей программой и разными типами БД. ...
ADO решили заменить? ;о))
делать ничего не надо, перекрой ADODataSet (не закрывая имеющиеся сейчас свойства), будеш иметь все что описал + еще много много всего.


 
Плохиш ©   (2004-09-28 14:39) [30]


> pasha_golub ©   (28.09.04 14:35) [27]
> Плохиш ©   (28.09.04 14:22) [25]
> Тест тесту рознь.

Никто и не спорит.

>Зато при большщом кол-ве записей АДО выдаст
> "Out of memory

Цифру большого количества в студию.


 
sniknik ©   (2004-09-28 14:46) [31]

> Зато при большщом кол-ве записей АДО выдаст "Out of memory". Был уже прецендент, а ДАС не выдаст.
ADO со стандартными настройками (как компонент с палитры ложиш) работает с локальным курсором (весь датасет перекачивается на клиента сразу), дак видать настроен на серверный, раз памяти меньше "ест", ничего не стоит и ADO на то же настроить.
потом, в старых версиях была проблема с памятью (встречался), помогает установка новой (все проблемы с этим решились после включения последнего MDAC-а в инсталяшку (6-й на тот момент)).


 
pasha_golub ©   (2004-09-28 14:59) [32]

Плохиш ©   (28.09.04 14:39) [30]
Не скажу. Информация получена от разработчика лично. Я лично с этим прецентдентом не сталкивался.

sniknik ©   (28.09.04 14:46) [31]
ДАС работает через клиентскую ДЛЛку pglib.dll, а та в свою очередь сама разбирается с данными. И что к чему у этой библиотеки знает только разработчик видимо.



Страницы: 1 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.026 c
1-1097297511
3J106UH
2004-10-09 08:51
2004.10.24
Определение номера строки в listbox


4-1095421090
don
2004-09-17 15:38
2004.10.24
Как открыть диалог FileOpen с возможностью просмотра картинок


3-1096281014
Леонид
2004-09-27 14:30
2004.10.24
Не удается проапдейтить запись БД-access


1-1097169006
F1
2004-10-07 21:10
2004.10.24
Как узнать нажата ли только что созданая кнопка?


14-1096884818
1008
2004-10-04 14:13
2004.10.24
Теоретически всё правильно, а вот на практике ...