Je me demande s'il existe une pratique approuvée dans une application multi-thread. Dois-je avoir un DAO par thread ou simplement faire un DAO un singleton thread sécurisé.Un DAO par thread ou DAO threadsafe?
Répondre
Cela dépend beaucoup du mécanisme que vous utilisez pour l'accès aux données. Si vous disposez d'un accès aux données très évolutif et de nombreux threads, l'utilisation d'une forme d'accès aux données statiques peut s'avérer avantageuse. Si vous n'avez pas d'accès aux données évolutif, votre fournisseur ne prend pas en charge plusieurs threads par processus, ou vous n'avez pas besoin de l'évolutivité à ce stade, l'utilisation d'un singleton avec synchronisation appropriée est plus simple et plus facile à mettre en œuvre .
Pour la plupart des applications de style professionnel, je pense personnellement que l'approche singleton est plus facile à maintenir, et probablement meilleure - si pour toute autre raison, c'est beaucoup, beaucoup plus facile à tester efficacement. Disposer de plusieurs threads pour l'accès aux données n'est probablement pas nécessaire, car l'accès aux données ne constituera probablement pas un goulot d'étranglement qui affectera la convivialité (si vous concevez correctement et si les requêtes par lots sont appropriées).
Utilisez l'approche qui convient le mieux à votre architecture d'application, à moins que:
1) Vos objets d'accès aux données sont coûteuses à créer, dans ce cas, vous devez pencher vers un singleton thread-safe.
2) Vos objets conservent l'état mutable, comme dans le Active Record pattern. (L'état de configuration DAO non modifiable, comme les seuils de temporisation, ne compte pas.)
Mes DAO se connectent réellement à deux sources: SimpleDB et une API PHP via RPC. Ma conjecture est que je devrais probablement utiliser DAO par thread avec environ 100 threads pour éviter les problèmes d'encombrement. Voyez-vous des raisons évidentes de ne pas le faire dans ce cas? – pondermatic
Probablement mieux de faire du DAO un singleton, et en interne, de travailler de manière asynchrone. Il peut ensuite évoluer à l'aide d'un ThreadPool selon les besoins ... Ceci est particulièrement vrai pour l'API PHP, car les requêtes web fonctionnent très bien de manière asynchrone, et la plupart des frameworks web ont un bon support pour cela ... –