[Firebird 2.1.3] Równoległe transakcje w jednej aplikacji

0

Witam,

Piszę aplikacje w C++ Builder 2010 i korzystam z Firebirda 2.1.3. i mam następującą sytuację:

Co 2000 ms pobieram z dane z bazy danych (pierwsza transakcja). Uruchamiam nowy watek w aplikacji i próbuję w nim odczytać kolejne dane z bazy z nieco większej tabeli (druga transakcja). I w tym momencie dzieją się cuda, aplikacja rzuca różnego typu wyjątkami (zazwyczaj wycieki pamięci). Jeśli jednak wstrzymam odczyty co 2000 ms na czas trwania nowego wątku to wszytko jest w porządku.

I teraz mam pytanie, czy jest możliwe wykonywanie kilku zapytań/transakcji do bazy z poziomu jednej aplikacji w kilku wątkach równolegle? Czy muszę wykonywać je w szeregu jedna za drugą?

Pozdrawiam,
maly216

0

Może być tak, że biblioteki kompilatora łączące się z bazą danych nie obsługują wielowątkowości jak na przykład dbExpress. Jedna z możliwości to dynamiczne ich utworzenie razem z formularzem, który łączy się tylko z tym jednym wątkiem.

0

ja to bym tam obciążył serwer - 2000 milisekund, czyli 2 sekundy, to do duuużo czasu :) możesz, o ile masz uprawnienia administratora napisać procedury dla serwera, które będą wykonywane dużo szybciej niż podawane z programu :) empirycznie w zależności od możliwości serwera ustaliłbym parametr częstości próbkowania i myślę, że to tyle :)
no może uczeni koledzy inaczej rozpracują twój post :)

0

IBXy nie są thread-safe - każdy wątek MUSI mieć swoje własne DBConnection

0

Dziękuje za pomoc. Problem rozwiązany - otwarłem nowe połączenie z bazą (korzystam z connectora IBPP). WNIOSEK: samo utworzenie transakcji nie pozwala na wykonywanie równoległych do siebie zadań na jednej bazie z poziomu pojedynczej aplikacji, konieczne jest nowe połączenie z bazą, ile chcemy uruchomić wątków tyle musi być połączeń.

mieszkom25 nie mam potrzeby wyciskania ostatnich potów z bazy, te 2000 ms jest na potrzeby tej aplikacji wystarczające ;]

Pozdrawiam,
maly216

0
maly216 napisał(a)

Dziękuje za pomoc. Problem rozwiązany - otwarłem nowe połączenie z bazą (korzystam z connectora IBPP). WNIOSEK: samo utworzenie transakcji nie pozwala na wykonywanie równoległych do siebie zadań na jednej bazie z poziomu pojedynczej aplikacji, konieczne jest nowe połączenie z bazą
NIEPRAWDA!!!! Możesz mieć tyle równoległych transakcji ile chcesz na jednym połączeniu!!! Ale nie może to być w różnych wątkach!

ile chcemy uruchomić wątków tyle musi być połączeń.
jak komponenty nie są Thread-safe to tak

1 użytkowników online, w tym zalogowanych: 0, gości: 1