Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Компоненты для работы с БД PostgreSQL. [D6, PostgreSQL]


Страницы:   1 2

Fredericco ©   (2004-09-27 19:44:00) 

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

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

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

 First;
 While EOF do Next;

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

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


pasha_golub   (2004-09-28 14:59:00) [1]

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

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


sniknik   (2004-09-28 14:46:00) [2]

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


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


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

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

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

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


sniknik   (2004-09-28 14:39:00) [4]

> Я бы тоже с удовольствием почитал. Можно ссылочку?
выбирай любую
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:37:00) [5]


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

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

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

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


pasha_golub   (2004-09-28 14:35:00) [6]

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

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

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

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


Fredericco   (2004-09-28 14:30:00) [7]

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'е. :-)


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


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

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

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

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


pasha_golub   (2004-09-28 14:20:00) [9]

sniknik ©   (28.09.04 13:33) [23]

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


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


sniknik   (2004-09-28 13:33:00) [10]

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

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

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


Fredericco   (2004-09-28 13:02:00) [11]

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


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

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

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


Fredericco   (2004-09-28 12:50:00) [13]

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


sniknik   (2004-09-28 12:26:00) [14]

> Сенкс, но через АДО получается 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:13:00) [15]

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


pasha_golub   (2004-09-28 12:12:00) [16]

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

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

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


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


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

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


pasha_golub   (2004-09-28 11:40:00) [18]

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

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


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


> 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:23:00) [20]

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

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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо