БД на FireBird + FIB

Статус
В этой теме нельзя размещать новые ответы.

Seducer

Турист
Регистрация
8 Апр 2011
Сообщения
9
Реакции
0
Credits
14
Обращаюсь к "гуру" Delphi. Сам в Delphi сейчас слабоват. Последний раз 10 лет назад общался. Сейчас уже все позабывал.

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

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

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

qvint

Местный
Регистрация
30 Мар 2011
Сообщения
27
Реакции
4
Credits
38
Firebird это клиент-серверная база данных, ее не нужно устанавливать каждому клиенту. Ставишь на один компьютер в сети (если пользователей много и интенсивная работа с базой, то лучше на отдельный достаточной мощный компьютер (сервер), остальные пользователи коннектятся к серверу по IP.
 

vovag3074

Местный
Регистрация
16 Янв 2010
Сообщения
54
Реакции
84
Credits
538
возьми библиотеки из версии embeded. Она специально разрабатывалась для десктопного доступа. только учти, доступ к базе будет в этом случае монопольным.
 

Seducer

Турист
Регистрация
8 Апр 2011
Сообщения
9
Реакции
0
Credits
14
Firebird это клиент-серверная база данных, ее не нужно устанавливать каждому клиенту. Ставишь на один компьютер в сети (если пользователей много и интенсивная работа с базой, то лучше на отдельный достаточной мощный компьютер (сервер), остальные пользователи коннектятся к серверу по IP.

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

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

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

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

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

vovag3074

Местный
Регистрация
16 Янв 2010
Сообщения
54
Реакции
84
Credits
538
при соединении по сети embeded работает как обычный клиент
 

Seducer

Турист
Регистрация
8 Апр 2011
Сообщения
9
Реакции
0
Credits
14
при соединении по сети embeded работает как обычный клиент

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

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

vovag3074

Местный
Регистрация
16 Янв 2010
Сообщения
54
Реакции
84
Credits
538
никаких шар. firebird это клиент-серверная система, на одном из компов должен быть запущен сервер или монопольный доступ. Если расшаривать, то по сети очень много лишних данных передается. да распаковать содержимое архива в каталог программы.
 

andrewmrn

Турист
Регистрация
31 Янв 2009
Сообщения
4
Реакции
0
Credits
8
Сначала ругался на gds32.dll

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

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

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

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

Для просмотра ссылки Войди или Зарегистрируйся

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

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

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

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

qvint

Местный
Регистрация
30 Мар 2011
Сообщения
27
Реакции
4
Credits
38
возьми библиотеки из версии embeded. Она специально разрабатывалась для десктопного доступа. только учти, доступ к базе будет в этом случае монопольным.

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

XProger

Турист
Регистрация
2 Май 2010
Сообщения
9
Реакции
0
Credits
18
>Почитал про FireBird и FIB. Пишут, что производительность хорошая
хорошая хорошая если индексы с умом настроишь и 50000 выдежит, правда временных таблиц немае...
 

Seducer

Турист
Регистрация
8 Апр 2011
Сообщения
9
Реакции
0
Credits
14
Без инсталляции сервера FireBird не обойтись.

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

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

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

XProger

Турист
Регистрация
2 Май 2010
Сообщения
9
Реакции
0
Credits
18
>А вот эт не очень устраивает.

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

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

Seducer

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

Den28

Местный
Регистрация
3 Апр 2008
Сообщения
23
Реакции
97
Credits
43
Устанавливать лучше полную версию сервера FB 2.5
Описание установки вручную здесь:
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

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

Для полного сервера:
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 записей).

И поиск по гриду и будет долгий, т.к. наверняка перебираются все записи :)
Проще сделать отдельный запрос и отправлять его на сервер по необходимости.
На поля по которым будет идти поиск стоит поставить индексы. Но не переусердствуйте (каждый индекс ускоряя выборку данных, замедляет добавление/изменение/удаление записей) Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование модератором:

Den28

Местный
Регистрация
3 Апр 2008
Сообщения
23
Реакции
97
Credits
43
Да и по lookup-полям не стоит искать на клиенте в такой таблице (получим долгий перебор по всем записям).
Опять таки лучше сделать один сложный select ну или view. Именно для таких случаев используются SqlSelect, SqlUpdate, SqlInsert, SqlDelete компонента доступа к данным.
 
Статус
В этой теме нельзя размещать новые ответы.