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

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

SQL в {CONSOLE APPLICATION} [D7, FireBird 2.0]


Страницы:   1 2

h8394E ©   (2006-04-18 02:13:00) 

Доброго времени суток!
Мне надо обралиться к базе данных FireBird 2.0 из моего консольного приложения. Выполнить SQL запрос из переменной типа TStringList и получить ответ. Конечно, можно скачать FIB компоненты и во время выполнения моей программы выделить память и создать их, они-то VCL. Есть ли просто модули какие-нибудь, чтоб быстренько подключиться, дать логин, пароль, выполнить запрос, получить ответ и всё запомнить? А то мне не очень нравится создание DataBase, Querry и Transaction компонентов в консоли...


Sergey Masloff   (2006-04-22 07:12:00) [1]

atruhin ©   (22.04.06 06:54) [38]
У ОС файл тоже в кеше ;-)
Я действительно число записей просмотрел. На паре тысяч записей перебор файла быстрее интербеза, оракла и mssql и намного - я проверял ;-)


atruhin   (2006-04-22 06:54:00) [2]

Посмотри первоначальный пост. Т.е. программа на каждый запрос загружается и выгружается. Соответственно: Считать весь файл (15000 записей*28 полей), произвести поиск, закрыть файл. У сервера файл в кэше + поиск по индексам. Эх быстрее будет.


Sergey Masloff   (2006-04-21 22:43:00) [3]

atruhin ©   (21.04.06 22:25) [36]
Никаких индексов. Просто тупой перебор. Файл будет быстрее сервера.
Это как раз тот случай когда нужно не думать а проверять.
Том Кайт в своих статьях и книгах постоянно приводит примеры что бывает когда люди слишком много думают и слишком мало проверяют результаты своих измышлений ;-)))


atruhin   (2006-04-21 22:25:00) [4]


> Смотря сколько данных в файле.



> Количество записей в базе будет до 15000, с 28 переменными
> в каждом.

Все таки думаю сервер быстрее справится. Я не рассматриваю вариант организации индекса.


Sergey Masloff   (2006-04-21 22:09:00) [5]

atruhin ©   (21.04.06 06:11) [32]
>Все зависит от задачи, и от того, что ты подразумеваешь под поиском. Но в >целом вряд ли ты сам реализуешь поиски из файла быстрее чем это делает >SQL сервер
Да ну ;-)
Смотря сколько данных в файле. Если строк с 1000 скажем из файла прямым перебором будет намного быстрее без всяких усилий.


h8394E   (2006-04-21 21:40:00) [6]

Хорошо, всем большое спасибо!


DSKalugin   (2006-04-21 17:32:00) [7]

А что мешает сделать все это на PHP? зачем городить собственнописные подключения к базе, если все это уже сделано?

PHP поддерживает прямую работу с Firebird через клиентскую библиотеку gds32.dll, смотри функции начинающиеся на ibase_*
http://ua.php.net/ibase

P.S. Я сам неоднократно этим пользовался


atruhin   (2006-04-21 06:11:00) [8]


> поиск в нём будет достаточно быстр?

Все зависит от задачи, и от того, что ты подразумеваешь под поиском. Но в целом вряд ли ты сам реализуешь поиски из файла быстрее чем это делает SQL сервер


h8394E   (2006-04-21 00:37:00) [9]

Sergey Masloff,  а если создавать свой файл с "базой данных", как я показал в примере выше - поиск в нём будет достаточно быстр?


Sergey Masloff   (2006-04-20 21:05:00) [10]

Вообще же по сабжу:
1) Измерить производительность в реальных условиях. Может все не так медленно. Само по себе создание процесса дело небыстрое на его фоне может и нормально будет.
2) Сделать сервер приложений cgi будет к нему стучаться за данными. Но межпроцессное взаимодействие тоже не самая быстрая операция.


Sergey Masloff   (2006-04-20 21:02:00) [11]

atruhin ©   (20.04.06 19:54) [28]
Нет клиент это веб сервер. Он получает запрос вызывает exe и что тот напишет в STDOUT отдает клиенту. Все.


atruhin   (2006-04-20 19:54:00) [12]

Не работал я с cgi скриптами, но мне кажется что он подгружается и выгружется по требованию клиента. Если это не так, и dll можно оставить загруженной, то естественно к бд подключемся 1 раз и держим подключение


h8394E   (2006-04-20 19:46:00) [13]

atruhin, аой 23 пост посмотри - можно ли к бд в dll подключаться, и держать dll всё время?


atruhin   (2006-04-20 19:40:00) [14]

С cgi скриптама не работал, но что приходит в голову:
1. избавится от скрипта и реализовать на php и тд.
2. 3 звенка, т.е. сервер приложений+cgi


h8394E   (2006-04-20 19:22:00) [15]

atruhin, третий пост, последняя строчка:

> Просто моя консоль как cgi под апачем выполняется.


atruhin   (2006-04-20 19:10:00) [16]


> ANB, ты наверное не заметил, что я говорил, что моя консоль
> - это cgi скрипт.

Покажи в вопросе или в теме строку где ты говорил, что это cgi скрипт, а то я тоже не заметил.


h8394E   (2006-04-20 17:07:00) [17]

ANB, ты наверное не заметил, что я говорил, что моя консоль - это cgi скрипт. Т.е. она выкидывает в буфер вывода данные и сразу закрывается, по этому мне и нужна скорость.

> А вот так ты искать точно повесишься. Для начала нужно будет
> узнать формат файла БД.

А при чём тут формат файла? Я его сам создаю. Я имел ввиду, а что если базу данных самому так создать? Поиска в ней будет медленнее или такой же? Это даже не база получится а нечто вроде текстового файла.

Также пришла идея - а что если при первом запуске приложения она экспортирует в память dll, в которая подключается к базе данных, но при выходе dll из памяти не удалять. А при повторной загрузке и dll уже загружена будет, и подключена к бд тоже будет. Вот только как такое организовать на Delphi?


ANB   (2006-04-20 12:18:00) [18]


> Type TFileData = record
> a, b, c:integer;
> d, e, f:char;
> end;
>
> var
> DataFile:file of TFileData;
> fileData:TFileData;
>
> bagin
> AssignFile(DataFile, 'c:\file.dat');
> //НУ И ТАК ДАЛЕЕ

А вот так ты искать точно повесишься. Для начала нужно будет узнать формат файла БД.


ANB   (2006-04-20 12:17:00) [19]


> h8394E   (19.04.06 15:48) [20]

Какие проблемы ?
В начале своей консольной программы создаешь объект для коннекта и коннектишься.
Можешь сразу насоздавать нужные объекты для выполнения запросов.

Потом, в ходе работы - запихнул SQL запрос в объект и выполнил его. Это будет так же шустро, как при работе в обычном приложении.

Кстати, кто тебе сказал, что если подключение сделать в дизайн-тайме, то будет быстрее ?


h8394E   (2006-04-19 15:48:00) [20]

Размер моей программы не важен! А подключение к базе будет делаться два запроса из трёх, т.е. только 3й запрос не обращается к бд.
Мне тут всё-таки скорость важна. Моя машина P4 3200 MHz 1024мб ОЗУ 500Гб HDD(кеш - 16мб).
Так же хотел спросить, а если я старым методом делать буду, т.е.:

Type TFileData = record
a, b, c:integer;
d, e, f:char;
end;

var
DataFile:file of TFileData;
fileData:TFileData;

bagin
AssignFile(DataFile, 'c:\file.dat');
//НУ И ТАК ДАЛЕЕ

Это будет искать(циком) так же, как и FireBird, или медленнее? Есть ли другой метод поиска? Количество записей в базе будет до 15000, с 28 переменными в каждом.


Страницы:   1 2

Наверх

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