2010-01-04 7 views
5

Zastanawiam się, czy istnieje zatwierdzona praktyka w wielowątkowej aplikacji. Powinienem mieć jedno DAO na wątek lub po prostu uczynić jedno DAO singletonem bezpiecznym dla wątków.Jeden DAO na wątek lub DAID?

Odpowiedz

4

To bardzo zależy od mechanizmu, z którego korzystasz w celu uzyskania dostępu do danych. Jeśli masz bardzo skalowalny dostęp do danych i wiele wątków, korzystna może być opcja dostępu do statycznych danych w wątku.

Jeśli nie masz skalowalnego dostępu do danych, Twój dostawca nie obsługuje wielu wątków na proces lub po prostu nie potrzebujesz skalowalności w tym momencie, użycie singletonu z odpowiednią synchronizacją jest prostsze i łatwiejsze do wdrożenia .

Dla większości zastosowań w stylu biznesowym osobiście uważam, że podejście singletonowe jest łatwiejsze w utrzymaniu i prawdopodobnie lepsze - o ile nie z innego powodu niż o wiele łatwiejsze do testowania. Posiadanie wielu wątków dostępu do danych prawdopodobnie nie jest wymagane, ponieważ dostęp do danych prawdopodobnie nie będzie wąskim gardłem wpływającym na użyteczność (jeśli projektujesz poprawnie, a żądania grupowe odpowiednio).

+0

Moje DAO faktycznie łączą się z dwoma źródłami: SimpleDB i PHP API przez RPC. Domyślam się, że prawdopodobnie powinienem użyć DAO na wątek z około 100 wątkami, aby uniknąć problemów z wąskim gardłem. Czy widzisz w tym przypadku jakieś oczywiste powody, aby tego nie robić? – pondermatic

+0

Prawdopodobnie lepiej uczynić DAO pojedynczym, a wewnętrznie po prostu działać asynchronicznie. Następnie może skalować za pomocą ThreadPool w razie potrzeby ... Jest to szczególnie ważne w przypadku PHP API, ponieważ żądania sieciowe działają świetnie asynchronicznie, a większość frameworków internetowych ma dobre wsparcie dla tego ... –

0

stosować metodę, która najlepiej pasuje do Twojego architektury aplikacji, chyba że:

1) Twoje dane są drogie przedmioty dostępu do tworzenia, w którym to przypadku należy pochylić w kierunku wątku bezpieczny Singleton.

2) Twoje obiekty zachowują stan zmienny, tak jak w przypadku Active Record pattern. (Niezmienny stan konfiguracji DAO, podobnie jak limity czasu oczekiwania, nie ma znaczenia.)