Embedded FB и потоки.

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
regvoc
Сообщения: 13
Зарегистрирован: 24 дек 2006, 14:08

Embedded FB и потоки.

Сообщение regvoc » 23 янв 2007, 10:59

Может ли FB Embedded использоваться в потоках, без сериализации. в одном и том же запущенном приложении.
если мы создаем в программе для каждого потока свое локальное (НЕ сетевое ) соединения с базой.

Просто непонятное поведение получается FB. и в частности FIBPlus.

1. Если просто создать приложение запустить FB естественно вторую копию программы не даст запустить (скажет не к файлу доступа.)
все ок так и должно быть.

2. Если в приложении создать два локальных соединения с базой программа запустится и все будет работать. ПОЧЕМУ ведь FB в теории должен блокировать второе ЛОКАЛЬНОЕ соединение?

Хотя можно предположить что там приложение создает полноценный сервер и все работает.

тогда проблема судя по данным FIBPlus локально вообще нельзя в потоках соединятся, а сетевого соединения к localhost Embedded не дает сделать.

http://www.devrace.com/ru/fibplus/articles/2774.php

Как быть?

Везде какая-то противоречивая информация.
http://www.ibase.ru/ibfaq.htm#embedded


Пример создали приложение

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 янв 2007, 11:06

Если в приложении создать два локальных соединения с базой программа запустится и все будет работать. ПОЧЕМУ ведь FB в теории должен блокировать второе ЛОКАЛЬНОЕ соединение?
это почему? разве сервер не дает возможности сделать к базе 2 коннекта? допустим, embedded это сервер в dll. ну и что? Какой "теории" противоречит 2-3-4 соединения из одного и того же exe?
Везде какая-то противоречивая информация.
http://www.ibase.ru/ibfaq.htm#embedded
что именно противоречивого? Есть ряд правил, которые существуют для клиента в отношении threads, и есть доп. правила для Embedded.
1. для работы в threads надо использовать коннект на каждый thread.
2. embedded не дает подсоединиться к базе двум exe. потому что два сервера не могут подсоединиться одновременно к одной БД.

все.

regvoc
Сообщения: 13
Зарегистрирован: 24 дек 2006, 14:08

Сообщение regvoc » 23 янв 2007, 11:20

Спасибо большое.

Вот противоречие.

http://www.devrace.com/ru/fibplus/articles/2774.php


2. Коннекты не должны быть локальными, т.е. коннектиться надо через TCP/IP
Все эти требования накладывает не FIBPlus, а InterBase и Firebird.


А Embedded то не дает сделать сетевое подключение.

Так получается Пункт №2 это ошибка, опечатка fibplus ,

И можно ЛОКАЛЬНО в потоках соединятся?

при условии.

1. один EXE
2. для работы в threads надо использовать коннект на каждый thread.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 янв 2007, 11:38

А Embedded то не дает сделать сетевое подключение.
дает. к внешнему серверу.
а статья эта написана просто без учета embedded. под "локальным" коннектом там имелся в виду старый протокол клиента, когда действительно распараллеливание РАБОТЫ локальных коннектов не производилось СЕРВЕРОМ. Embedded это вообще не то, там нет никакого "локального коннекта" в терминах обычного gds32.dll.
И можно ЛОКАЛЬНО в потоках соединятся?
можно, если это embedded, или если это обычный клиент (ya, FB 2) с поддержкой локального протокола xnet.

regvoc
Сообщения: 13
Зарегистрирован: 24 дек 2006, 14:08

Сообщение regvoc » 23 янв 2007, 11:53

дает. к внешнему серверу.
Ну это то понятно. Я имел ввиду к локальной базе данных которую открыл Embedded в этом же приложение.

Спасибо. ситуация прояснилась. значит глючить типа не должно будем применять на практике.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 янв 2007, 12:05

Ну это то понятно. Я имел ввиду к локальной базе данных которую открыл Embedded в этом же приложение.
разумеется, какой тут tcp?
значит глючить типа не должно будем применять на практике.
применяй. только если ты не делаешь что-нибудь вроде web-приложения, которое обслуживает тучу коннектов.

Ответить