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
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).
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.)
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
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 ... –