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

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

ZeosDBO [D6, MySQL]


Доброжелатель ©   (2003-08-22 10:43:00) 

Имеется база в MySQL. Доступ к ней происходит через ZeosDBO 6.0.12-stable. База данных содержит около 12 млн. записей и ежедневно пополняется. Записи вносятся через компоненту TZQuery, к которой прикреплен TZUpdateSQL. При открытии TZQuery (установлении свойства Active в True) происходит полная загрузка базы в память :(
Кто-нибудь может подкинуть реальный совет, как сделать, чтобы база не грузилась в память?
С уважением, Доброжелатель


Доброжелатель   (2003-08-22 11:40:00) [1]

To Nikolay M.:
Спасибо, попробую :)


Nikolay M.   (2003-08-22 11:28:00) [2]


> к сожалению таблиц в ZeosDBO 6.x нет

У меня 5.3 - там есть.


> ...
> Работает быстрее, чем через INSERT.

Да ну?

Тогда в твоем случае можно рекомендовать следующее (по крайней мере мы так делаем): создаешь файл а-ля mysqldump:
INSERT INTO ... VALUES ...;
INSERT INTO ... VALUES ...;
Если на сервере с mysql-сервером есть НТТР-сервер (а он наверняка там есть), то создаешь там РНР или любой другой скрипт, который будет принимать предварительно сгенеренный тобой и залитый туда файлик и выполнять одну-единственную шеловскую команду mysql -uXX -pXX -f mydb < insert.sql
Все. Работает быстро.


Доброжелатель   (2003-08-22 11:21:00) [3]

To Nikolay M.:
Так а представь, что в день по 250 тыс. записей вливается. При использовании напрямую операции INSERT - пустая трата времени. При присоединении к TZQuery компоненты TZUpdateSQL, к запросу можно обращаться как к таблице (к сожалению таблиц в ZeosDBO 6.x нет), т. е. можно использовать
...
ZQuery.Append;
ZQuery.Fields[0].AsString:="значение";
ZQuery.Post;
...
Работает быстрее, чем через INSERT. Хотя, если никто не придумает способа, чтобы не засорять память, придется пользоваться этой командой напрямую :)


Nikolay M.   (2003-08-22 11:15:00) [4]


> открытии TZQuery (установлении свойства Active в True) происходит
> полная загрузка базы в память

Хм. А чего ты хотел добиться, устанавливая Active в True?
Использовать просто INSERT INTO table VALUES () религия не позволяет?

ПС
12 млн... клева... :)


Vlad   (2003-08-22 11:07:00) [5]

Чесно скажу, по Zeos не спец, но в DOA напр. есть такая проперть, как QueryAllRecords. Так вот если ее поставить False, то будут отбираться только часть данных (напр. видимая в DBGrid"е), а затем, по мере скроллинга данные подкачиваются с сервера. Есть примерно такая же возможность и в ADO.
Думаю, что и у вас можно найти нечто подобное.


Наверх

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