2013-04-15 17 views
6

Widziałem niektóre kody Java, w których wiersze w tabeli bazy danych są przechowywane w kolekcjach (zwykle ArrayList lub HashMap).Jakie są zalety trzymania wierszy tabeli w kolekcji?

  • Jakie są korzyści z tego podejścia?
  • Jak zachować synchronizację kolekcji i tabeli?
  • Dlaczego nie wysłać zapytania do bazy danych dla każdego pobierania?

Czy to w ogóle dobra praktyka?

+1

Czy możesz wyjaśnić, co masz na myśli? Czy mówisz o zestawach wynikowych i kursorach konwertowanych na kolekcje, które przechowują POJO java? –

+0

Przepraszamy, ale nie jest to temat FAQ.Zależy to od problemu, tabeli, architektury aplikacji, używanych bibliotek i wielu innych czynników. – Dariusz

+0

Dziękuję wyborcom. –

Odpowiedz

6

Korzyścią jest wydajność. Kwerendowanie bazy danych wymaga zasobów i czasu. Jeśli twoje tabele są na tyle małe, że możesz przechowywać przedmioty w pamięci, proste odniesienie do lokalnej pamięci jest szybsze o rząd wielkości.

Jeśli chodzi o zachowanie synchronizacji, jest to trudniejsza odpowiedź i zależy od przypadku użycia. W większości przypadków, o ile nie skonfigurujesz dobrej niestandardowej architektury, nie będzie możliwości zagwarantowania synchronizacji bazy danych i kolekcji w pamięci po ich pobraniu do pamięci.

Jeśli chciał podjąć tego podejścia i mieć kolekcję i bazę być zsynchronizowane (niby jak o swój tort i jedzenie to też), można zrobić coś jak następuje:

  1. Skonfiguruj wyzwalacze bazy danych w tabeli dla dowolnego tworzenia, wstawiania, aktualizacji lub usuwania.
  2. Wyzwalacze uruchamiają skrypt, który w jakiś sposób powiadamia aplikację (monitorowanie wątku, usługi, cokolwiek).
  3. Po otrzymaniu zgłoszenia zaktualizuj kolekcję, czytając bazę danych.

Oczywiście, niezależnie od tego, czy poprawi to wydajność, zależy od tego, jak często baza danych jest modyfikowana przez inne programy.

Możesz również w swoim programie po prostu utrzymywać blokadę bazy danych, aby nikt inny nie mógł go zmodyfikować na czas przetwarzania (umożliwiając zachowanie pozycji w pamięci i gwarantujących niezmienność bazy danych) , ale jest to bardzo zła praktyka, ponieważ w zasadzie będziesz łamał każdą inną aplikację przy użyciu tego samego stołu (na cokolwiek innego niż czytanie).

+0

Dzięki Jeff. Więc nie jest to uważane za dobrą praktykę, prawda? –

+2

@MichaelB Pewne rzeczy. :) Zazwyczaj będziesz musiał przechowywać informacje z bazy danych * tymczasowo * w strukturach danych, o których wspomniałeś, ale jeśli chodzi o długoterminowe przechowywanie danych ... tak, powiedziałbym, że jest całkiem źle ćwiczyć. Jestem pewna, że ​​jest gdzieś taki przypadek użycia, ale wiem, że przynajmniej w moim przedsiębiorstwie po prostu zapytalibyśmy bazy danych, kiedy potrzebowalibyśmy informacji. To jedyny (najłatwiejszy?) Sposób, aby mieć pewność, że masz aktualne dane. – asteri

4

Jeśli ciągle czytasz te same dane, które nigdy nie zostaną zmienione, warto zachować te dane w kolekcji Java, takiej jak lista lub zestaw. Chodzi o wydajność, wykonywanie połączeń z bazami danych i przeprowadzanie transakcji z bazami danych za pośrednictwem Java zajmuje trochę czasu (moja praca na Uniwersytecie Londyńskim dotyczyła tego problemu). Jeśli jednak dane te znajdują się w kolekcji Java, nie musisz dalej komunikować się z bazą danych, która ma "niedopasowanie impedancji", ponieważ są to dwie oddzielne jednostki; jeden używający paradygmatu Java, a drugi używający paradygmatu bazy danych.

Co do zachowania synchronizacji, to zupełnie inna bestia.

+1

Chciałbym przeczytać tezę i podziękowania za Twój wkład. –

+0

Doskonałe pytanie Michael. – blackpanther

Powiązane problemy