БД на FireBird + FIB

  • Автор темы Seducer
  • 2812
  • Обновлено
  • 15, Sep 2011
  • #1
Обращаюсь к "гуру" Delphi.

Сам в Delphi сейчас слабоват.

Последний раз 10 лет назад общался.

Сейчас уже все позабывал. Суть в следующем. Есть программка.

На ней работают клиенты, оформляют заказы. Сейчас в качестве СУБД используется Absolute Database.

В БД есть две таблицы примерно по 20000 записей + несколько маленьких таблиц, которые используются для lookup-полей.

В качестве Grid используется DevExpress.

Наблюдаются тормоза при поиске по таблице (IncSearch).

Есть подозрение, что тормоза из-за СУБД (хотя не исключаю и Grid).

Почитал про FireBird и FIB.

Пишут, что производительность хорошая по сравнению с Absolute.

Вчера попробовал поставил.

Но есть один момент: клиент себе ставить не будет FireBird, да и ни к чему это.

Попробовал запустить на другом компе приложение.

Сначала ругался на gds32.dll, потом на firebird.msg (который искал почему-то в корне С. Скопировал файлы.

Потом непонятная ошибка и все.

Приложение открывается, но видимо, база не сконнектилась. Что необходимо сделать, чтобы на другом компе запустить приложение? С FireBird сталкиваюсь впервые и пока не совсем понимаю, что и как. Ну или может какие-нибудь советы по поводу ускорения для Absolute.

Seducer


Рег
08 Apr, 2011

Тем
2

Постов
6

Баллов
26
  • 16, Sep 2011
  • #2
Firebird это клиент-серверная база данных, ее не нужно устанавливать каждому клиенту. Ставишь на один компьютер в сети (если пользователей много и интенсивная работа с базой, то лучше на отдельный достаточной мощный компьютер (сервер), остальные пользователи коннектятся к серверу по IP.
 

qvint


Рег
30 Mar, 2011

Тем
0

Постов
6

Баллов
6
  • 16, Sep 2011
  • #3
возьми библиотеки из версии embeded. Она специально разрабатывалась для десктопного доступа. только учти, доступ к базе будет в этом случае монопольным.
 

vovag3074


Рег
16 Jan, 2010

Тем
1

Постов
10

Баллов
20
  • 16, Sep 2011
  • #4
qvint, post: 734087:
Firebird это клиент-серверная база данных, ее не нужно устанавливать каждому клиенту. Ставишь на один компьютер в сети (если пользователей много и интенсивная работа с базой, то лучше на отдельный достаточной мощный компьютер (сервер), остальные пользователи коннектятся к серверу по IP.
Я понимаю, что клиент-серверная.

Но.... Читаем внимательно топик.

Работают клиенты (!). Соответственно, они не могут быть в нашей локальной сети.

Они раскиданы по всей России.

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

Интернет есть не у всех.

А у кого есть, не всегда постоянно подключен и безлимитка. Добавлено через 44 секунды
vovag3074, post: 734088:
возьми библиотеки из версии embeded. Она специально разрабатывалась для десктопного доступа. только учти, доступ к базе будет в этом случае монопольным.
Не пойдет. Клиенты могут работать у себя на нескольких компах в локальной сети.
Т.е. действия следующие.

Клиенту высылается setup программы.

Он у себя ее запускает.

Соответственно, устанавливается сама программа, БД, СУБД. Что необходимо включить в setup, чтобы БД на FireBird заработала.

И что необходимо выполнить при установке программы у клиента.

Может, регистрация библиотеки или что-то в реестр прописать.
 

Seducer


Рег
08 Apr, 2011

Тем
2

Постов
6

Баллов
26
  • 16, Sep 2011
  • #5
vovag3074, post: 734090:
при соединении по сети embeded работает как обычный клиент
Т.е. достаточно будет только библиотеку gds32.dll поставлять вместе с приложением? И прописывать что-то дополнительно не надо? И все-таки я не понял, по сети клиент сможет у себя работать с базой? Скажем, программу он устанавливает на одном компе.

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

Seducer


Рег
08 Apr, 2011

Тем
2

Постов
6

Баллов
26
  • 16, Sep 2011
  • #6
никаких шар. firebird это клиент-серверная система, на одном из компов должен быть запущен сервер или монопольный доступ. Если расшаривать, то по сети очень много лишних данных передается. да распаковать содержимое архива в каталог программы.
 

vovag3074


Рег
16 Jan, 2010

Тем
1

Постов
10

Баллов
20
  • 16, Sep 2011
  • #7
Seducer, post: 734086:
Сначала ругался на gds32.dll


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

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

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

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

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

А по FireBird vs Absolute Database. FB построен по другому принципу.

Вы разберитесь что хотите. 1. вариант: один клиент работает со своим ПО со своей базой на своем компе.

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

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

andrewmrn


Рег
31 Jan, 2009

Тем
1

Постов
2

Баллов
12
  • 17, Sep 2011
  • #8
vovag3074, post: 734088:
возьми библиотеки из версии embeded. Она специально разрабатывалась для десктопного доступа. только учти, доступ к базе будет в этом случае монопольным.
В 2.5 к embeded могут подключатся больше одного пользователя
 

qvint


Рег
30 Mar, 2011

Тем
0

Постов
6

Баллов
6
  • 19, Sep 2011
  • #9
>Почитал про FireBird и FIB. Пишут, что производительность хорошая хорошая хорошая если индексы с умом настроишь и 50000 выдежит, правда временных таблиц немае...
 

XProger


Рег
02 May, 2010

Тем
1

Постов
5

Баллов
15
  • 20, Sep 2011
  • #10
andrewmrn, post: 734093:
Без инсталляции сервера FireBird не обойтись.
А вот эт не очень устраивает. Вкратце, что нужно. Клиенту высылается программа.

Он ее устанавливает и работает.

Установка без всяких заморочек.

Даже выбор папки запретил.

Некоторые клиенты с компьютером на "вы", поэтому все максимально должно быть упрощено. Но клиенты всякие есть.

Поэтому кто-то работает на одном компе, а кто-то и на нескольких (но в пределах своей сети).

Нет возможности построить это глобально, т.к. у кого-то есть Инет хороший, а у кого-то еле-еле, и то не всегда в он-лайне.

Как уже писал, в БД две таблицы примерно по 20000 записей.

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

Задержка где-то 3-4 секунды.
 

Seducer


Рег
08 Apr, 2011

Тем
2

Постов
6

Баллов
26
  • 20, Sep 2011
  • #11
>А вот эт не очень устраивает. FireBird embeded !!!!! будет работать без всякой инсталляции .. >Задержка где-то 3-4 секунды индексы настрой... хотя может не сильно помочь все зависит от запроса )
 

XProger


Рег
02 May, 2010

Тем
1

Постов
5

Баллов
15
  • 20, Sep 2011
  • #12
Да там нет никаких запросов.

Просто Grid от DevExpress цепляется к таблице.

Хотя, конечно, подозреваю, что сам Grid строит запросы.

А вот с индексами сложнее.

С ними плотно не приходилось сталкиваться.

Создал первичный по одному полю.

Вторичный по другому полю.

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

Всего полей 15. (из них 4 lookup-поля)
 

Seducer


Рег
08 Apr, 2011

Тем
2

Постов
6

Баллов
26
  • 20, Sep 2011
  • #13
Устанавливать лучше полную версию сервера 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. Сервер не требует отдельного запуска (как сервиса), поднимается вместе с нашей программой, но имеет только однопользовательский режим и не имеет транзакций.
Seducer, post: 734098:
Да там нет никаких запросов.
Запросы находятся в компоненте доступа к БД. Если это TTable или IBTable то все данные попадают на клиента, что в общем-то не правильно.

Для ускорения обычно на клиент передаются уже отобранные (select ... where ...) записи.

Но если очень хочется передать все, то указывается размер пакета, который передаётся за один раз (например 30 записей). И поиск по гриду и будет долгий, т.к. наверняка перебираются все записи Проще сделать отдельный запрос и отправлять его на сервер по необходимости.

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

Но не переусердствуйте (каждый индекс ускоряя выборку данных, замедляет добавление/изменение/удаление записей) http://www.ibase.ru/devinfo/dontdoit.htm
 

Den28


Рег
03 Apr, 2008

Тем
0

Постов
2

Баллов
2
  • 20, Sep 2011
  • #14
Да и по lookup-полям не стоит искать на клиенте в такой таблице (получим долгий перебор по всем записям). Опять таки лучше сделать один сложный select ну или view. Именно для таких случаев используются SqlSelect, SqlUpdate, SqlInsert, SqlDelete компонента доступа к данным.
 

Den28


Рег
03 Apr, 2008

Тем
0

Постов
2

Баллов
2
  • 28, Mar 2015
  • #15
cadina, post: 734101:
используй сортировку на сервере а не на клиенте
Инкрементальный поиск в гриде у него, сортировка не при чем. Походу фетч тупит..
 

megajack991


Рег
16 Feb, 2011

Тем
0

Постов
6

Баллов
6
Тем
49554
Комментарии
57426
Опыт
552966

Интересно