2011-02-08 3 views
5

Mamy aplikację Java na komputer, która uzyskuje dostęp do bazy danych Derby zlokalizowanej na dysku sieciowym, a nie lokalnie.Jakie są pułapki osadzonego połączenia z Derby w sieci?

Podczas gdy wiele instancji aplikacji współużytkuje bazę danych, tylko jedno wystąpienie ma zawsze połączenie na żywo.

Działa to całkiem dobrze od ponad dwóch lat, ale czasami spotykamy się z uszkodzeniem bazy danych, którego nie jesteśmy w stanie ustalić, jest wynikiem błędu oprogramowania lub z powodu sieci między aplikacją a zdalną bazą danych.

Zdajemy sobie sprawę z tego, że dokumentacja Derby mówi, że osadzone bazy danych powinny być używane tylko w celu lokalnego utrwalania, ale czy ktoś może zaproponować pewne konkretne pułapki, które moglibyśmy napotkać w tej konfiguracji?

Z góry dziękuję!

Jim

+4

brzmi, jakbyś już napotkał wielką pułapkę - uszkodzenie bazy danych. –

Odpowiedz

2

Co do korupcji bazy danych, uważam, że są (przynajmniej) dwa podstawowe problemy z posiadaniem bazy danych w pamięci współdzielonej przez sieć: (1) kiedy Derby próbuje przydzielić przestrzeń przez powiększenie pliku, system plików może raportować alokacja jest pomyślna, chociaż w rzeczywistości dysk jest pełny; (2) kiedy Derby próbuje zapewnić, że zapis dysku jest w rzeczywistości zapisany na dysku, system plików może raportować dane jako zapisywane na dysku, mimo że w rzeczywistości nadal jest zapisywany tylko w pamięci.

Każdy z powyższych problemów, jeśli wystąpią we właściwym czasie, może spowodować uszkodzenie bazy danych.

+0

(2) <- to. większość sieciowych systemów plików fałszywych połączeń fsync. a większość baz danych opartych na plikach wymagała fsync w celu zapewnienia integralności danych. – jtahlborn

1

Zdajemy sobie sprawę, że stan docs Derby osadzone bazy danych powinny być używane wyłącznie do miejscowego utrwalania, ale może ktoś zaproponować kilka konkretnych pułapek możemy spodziewać się spotkać dzięki tej konfiguracji?

Powiedziałbym, że należy zwrócić uwagę na to, co mówi dokumentacja. Ludzie, którzy rozwinęli Derby, raczej nie udzielą rad, które ograniczą zastosowanie Derby bez ważnej przyczyny.

(Rozumiem, dlaczego wiele instancji aplikacji współużytkujących wbudowaną bazę danych Derby db byłaby problematyczna.) Derby zakładałaby, że nie musiałaby się martwić o wielokrotne odczytywanie i aktualizowanie instancji, i może nie spłukiwać danych w kolejności wymaganej do pozwalają na to, aby bezpiecznie pracować. Takie płukanie nie powinno być konieczne ... chyba że używasz Derby w taki sposób, że nie mają.)

Poza tym, dlaczego chcesz nie przyjąć podejście pomocą Network Server wersja Derby?

+0

@Marcos Vandel - cóż, wygląda na to, że wymagania biznesowe uległy zmianie ... jeśli ludzie próbują obecnie udostępniać wbudowane bazy danych. Musisz albo nakazać im "przestać to robić", albo zmienić produkt, aby korzystać z wersji Derby klienta/serwera. –

+0

Nie ma nic "technicznie" powstrzymującego nas od korzystania z wersji Derby klienta/serwera. Nasza obecna konfiguracja została wykonana w celu spełnienia wymogów biznesowych dla branży, naszych celów oprogramowania i środowiska, w którym działa. –

+0

Stephen, może powinieneś przeczytać nieco bardziej ostrożnie oryginalny post. Nie pytam, czy ludzie myślą, że ta konfiguracja jest "dobrym pomysłem", czy raczej nie, ale raczej ** jakie ** szczególne problemy możemy oczekiwać, stosując Derby w ten sposób. I nie, wymagania biznesowe z pewnością się nie zmieniły. –