БД на FireBird + FIB

Status
Not open for further replies.

Seducer

Member
Joined
Apr 8, 2011
Messages
9
Reaction score
0
Обращаюсь к "гуру" Delphi. Сам в Delphi сейчас слабоват. Последний раз 10 лет назад общался. Сейчас уже все позабывал.

Суть в следующем.
Есть программка. На ней работают клиенты, оформляют заказы.
Сейчас в качестве СУБД используется Absolute Database. В БД есть две таблицы примерно по 20000 записей + несколько маленьких таблиц, которые используются для lookup-полей.
В качестве Grid используется DevExpress.
Наблюдаются тормоза при поиске по таблице (IncSearch).
Есть подозрение, что тормоза из-за СУБД (хотя не исключаю и Grid).

Почитал про FireBird и FIB. Пишут, что производительность хорошая по сравнению с Absolute. Вчера попробовал поставил. Но есть один момент: клиент себе ставить не будет FireBird, да и ни к чему это. Попробовал запустить на другом компе приложение. Сначала ругался на gds32.dll, потом на firebird.msg (который искал почему-то в корне С:). Скопировал файлы. Потом непонятная ошибка и все. Приложение открывается, но видимо, база не сконнектилась.
Что необходимо сделать, чтобы на другом компе запустить приложение?
С FireBird сталкиваюсь впервые и пока не совсем понимаю, что и как.

Ну или может какие-нибудь советы по поводу ускорения для Absolute.
 

qvint

Member
Joined
Mar 30, 2011
Messages
27
Reaction score
4
Firebird это клиент-серверная база данных, ее не нужно устанавливать каждому клиенту. Ставишь на один компьютер в сети (если пользователей много и интенсивная работа с базой, то лучше на отдельный достаточной мощный компьютер (сервер), остальные пользователи коннектятся к серверу по IP.
 

vovag3074

Member
Joined
Jan 15, 2010
Messages
44
Reaction score
74
Age
48
возьми библиотеки из версии embeded. Она специально разрабатывалась для десктопного доступа. только учти, доступ к базе будет в этом случае монопольным.
 

Seducer

Member
Joined
Apr 8, 2011
Messages
9
Reaction score
0
Firebird это клиент-серверная база данных, ее не нужно устанавливать каждому клиенту. Ставишь на один компьютер в сети (если пользователей много и интенсивная работа с базой, то лучше на отдельный достаточной мощный компьютер (сервер), остальные пользователи коннектятся к серверу по IP.

Я понимаю, что клиент-серверная. Но....
Читаем внимательно топик. Работают клиенты (!). Соответственно, они не могут быть в нашей локальной сети. Они раскиданы по всей России. Каждому клиенту высылается программа и они у себя с ней работают. Интернет есть не у всех. А у кого есть, не всегда постоянно подключен и безлимитка.

Добавлено через 44 секунды
возьми библиотеки из версии embeded. Она специально разрабатывалась для десктопного доступа. только учти, доступ к базе будет в этом случае монопольным.

Не пойдет. Клиенты могут работать у себя на нескольких компах в локальной сети.

Добавлено через 4 минуты
Т.е. действия следующие. Клиенту высылается setup программы. Он у себя ее запускает. Соответственно, устанавливается сама программа, БД, СУБД.

Что необходимо включить в setup, чтобы БД на FireBird заработала. И что необходимо выполнить при установке программы у клиента. Может, регистрация библиотеки или что-то в реестр прописать.
 
Last edited by a moderator:

vovag3074

Member
Joined
Jan 15, 2010
Messages
44
Reaction score
74
Age
48
при соединении по сети embeded работает как обычный клиент
 

Seducer

Member
Joined
Apr 8, 2011
Messages
9
Reaction score
0
при соединении по сети embeded работает как обычный клиент

Т.е. достаточно будет только библиотеку gds32.dll поставлять вместе с приложением? И прописывать что-то дополнительно не надо?

И все-таки я не понял, по сети клиент сможет у себя работать с базой? Скажем, программу он устанавливает на одном компе. И по сети запускает на другом (расшареная папка). Два пользователя смогут работать одновременно с БД?
 
Last edited by a moderator:

vovag3074

Member
Joined
Jan 15, 2010
Messages
44
Reaction score
74
Age
48
никаких шар. firebird это клиент-серверная система, на одном из компов должен быть запущен сервер или монопольный доступ. Если расшаривать, то по сети очень много лишних данных передается. да распаковать содержимое архива в каталог программы.
 

andrewmrn

New member
Joined
Jan 31, 2009
Messages
4
Reaction score
0
Age
58
Сначала ругался на gds32.dll

На заметку, столкнулся как то, долго искал решение, хотя все уже дежавю - где то было.

При запуске выдается ошибка "Can't load library gds32.dll", хотя в папке данная библиотека присутствует.

Эта проблема не является ошибкой программного обеспечения и может возникать на ранних версиях Windows XP, установленных без обновленией или последних сервиспаков.

Проблема убирается установкой оригинального обновления (исправления) к Windows.

http://normativ.ua/soft/dwgds32error.php

Добавлено через 6 минут
А по FireBird vs Absolute Database.

FB построен по другому принципу. Вы разберитесь что хотите.

1. вариант: один клиент работает со своим ПО со своей базой на своем компе. Вполне хватит embeded (енто вариация FireBird). Клиент ничего не усвтанавливает, установка заключается в копировании ряда длл (штук шесть, непомню). Кстати не только gds32.dll и firebird.msg :)
Быстрее абсолютов, но морочливее и жестче к языку.

2. вариант - сетевой. Много клиентов работают с одной базой (что для сетевой версии неудивительно). Без инсталляции сервера FireBird не обойтись.
 
Last edited by a moderator:

qvint

Member
Joined
Mar 30, 2011
Messages
27
Reaction score
4
возьми библиотеки из версии embeded. Она специально разрабатывалась для десктопного доступа. только учти, доступ к базе будет в этом случае монопольным.

В 2.5 к embeded могут подключатся больше одного пользователя :)
 

XProger

Member
Joined
May 2, 2010
Messages
9
Reaction score
0
Age
37
>Почитал про FireBird и FIB. Пишут, что производительность хорошая
хорошая хорошая если индексы с умом настроишь и 50000 выдежит, правда временных таблиц немае...
 

Seducer

Member
Joined
Apr 8, 2011
Messages
9
Reaction score
0
Без инсталляции сервера FireBird не обойтись.

А вот эт не очень устраивает.

Вкратце, что нужно.
Клиенту высылается программа. Он ее устанавливает и работает. Установка без всяких заморочек. Даже выбор папки запретил. Некоторые клиенты с компьютером на "вы", поэтому все максимально должно быть упрощено.
Но клиенты всякие есть. Поэтому кто-то работает на одном компе, а кто-то и на нескольких (но в пределах своей сети).
Нет возможности построить это глобально, т.к. у кого-то есть Инет хороший, а у кого-то еле-еле, и то не всегда в он-лайне.
Как уже писал, в БД две таблицы примерно по 20000 записей.

На данный момент все хорошо, кроме поиска по гриду и перемещения в начало и конец. Задержка где-то 3-4 секунды.
 

XProger

Member
Joined
May 2, 2010
Messages
9
Reaction score
0
Age
37
>А вот эт не очень устраивает.

FireBird embeded !!!!! будет работать без всякой инсталляции ..

>Задержка где-то 3-4 секунды
индексы настрой... хотя может не сильно помочь все зависит от запроса )
 

Seducer

Member
Joined
Apr 8, 2011
Messages
9
Reaction score
0
Да там нет никаких запросов. :) Просто Grid от DevExpress цепляется к таблице. Хотя, конечно, подозреваю, что сам Grid строит запросы. А вот с индексами сложнее... С ними плотно не приходилось сталкиваться. Создал первичный по одному полю. Вторичный по другому полю. По этим полям в основном и идет поиск, но может и по другим полям. Всего полей 15. (из них 4 lookup-поля)
 

Den28

Member
Joined
Apr 3, 2008
Messages
23
Reaction score
95
Устанавливать лучше полную версию сервера FB 2.5
Описание установки вручную здесь:
http://www.firebirdsql.org/manual/ru/qsg15-installing-firebird-ru.html
http://www.ibase.ru/devinfo/inst_manual.htm

Если кратко, то:

Для полного сервера:
1. Копируем файлы FB (лучьше весё) в отдельную директорию
2. Копируем файл fbclient.dll и Firebird2Control.cpl (и msvcp80.dll, msvcr80.dll) в директорию C:\WINDOWS\system32
3. Если хотим совместимости, то делаем там же копию fbclient.dll с названием gds32.dll
4. Прописываем ветку реетсра
HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances
5. Прописываем ветку реестра для запуска сервиса (у клиента лучше поставить авто-запуск)
6. Устанавливаем наше приложение, как обычно
7. Если не выполнили пункт 3, то необходимо указать имя библиотеки (fbclient.dll) в компоненте доступа к данным.
8. Указывать доступ к БД из программы, можно по абсолютному пути (c:\db\mydb.fdb), относительному пути (..\db\mydb.fdb) или по алиасу.

Для Embedded:
1. Можно (но не нужно) :) всё скопировать в одну директорию (где лежит программа)
2. Сервер не требует отдельного запуска (как сервиса), поднимается вместе с нашей программой, но имеет только однопользовательский режим и не имеет транзакций.

Добавлено через 10 минут
Да там нет никаких запросов.

Запросы находятся в компоненте доступа к БД.
Если это TTable или IBTable то все данные попадают на клиента, что в общем-то не правильно. Для ускорения обычно на клиент передаются уже отобранные (select ... where ...) записи. Но если очень хочется передать все, то указывается размер пакета, который передаётся за один раз (например 30 записей).

И поиск по гриду и будет долгий, т.к. наверняка перебираются все записи :)
Проще сделать отдельный запрос и отправлять его на сервер по необходимости.
На поля по которым будет идти поиск стоит поставить индексы. Но не переусердствуйте (каждый индекс ускоряя выборку данных, замедляет добавление/изменение/удаление записей) http://www.ibase.ru/devinfo/dontdoit.htm
 
Last edited by a moderator:

Den28

Member
Joined
Apr 3, 2008
Messages
23
Reaction score
95
Да и по lookup-полям не стоит искать на клиенте в такой таблице (получим долгий перебор по всем записям).
Опять таки лучше сделать один сложный select ну или view. Именно для таких случаев используются SqlSelect, SqlUpdate, SqlInsert, SqlDelete компонента доступа к данным.
 

cadina

Member
Joined
Jul 13, 2014
Messages
8
Reaction score
0
используй сортировку на сервере а не на клиенте
 

megajack991

Member
Joined
Feb 16, 2011
Messages
8
Reaction score
6
используй сортировку на сервере а не на клиенте

Инкрементальный поиск в гриде у него, сортировка не при чем. Походу фетч тупит..
 
Status
Not open for further replies.
Top