Le projet sur lequel je travaille est confronté à un dilemme de conception sur la façon d'obtenir des objets et des collections d'objets à partir d'une base de données. Il est parfois utile de mettre en mémoire tampon * tous les objets * objets de la base de données avec ses propriétés en mémoire, il est parfois utile de simplement définir un ID objet et interroger ses propriétés à la demande (appel 1 db par objet pour obtenir toutes les propriétés). Et dans de nombreux cas, les collections doivent prendre en charge à la fois la mise en mémoire tampon des objets en mémoire et leur initialisation avec un minimum d'informations pour un accès à la demande. Après tout, tout ne peut pas être mis en mémoire et tout ne peut pas être lu à la demande. C'est un problème de mémoire omniprésent vs IO.Dilemme de conception de couche métier: mémoire ou E/S?
Quelqu'un at-il dû faire face au même problème? Comment a affecté votre conception? Quelles sont les leçons difficiles apprises? D'autres pensées et recommandations?
EDIT: mon projet est un exemple classique d'une DLL de couche de gestion, consommée par une application Web, des services Web et une application de bureau. Lorsqu'une liste de produits est demandée pour une application de bureau et affichée uniquement par nom de produit, cette séquence d'étapes est acceptable pour afficher tous les produits (disons qu'il y a un million de produits dans la base de données):
db appeler pour obtenir tous les noms de produits
2. Un appel db pour obtenir toutes les informations produit si l'utilisateur clique sur le produit pour voir les détails (accès à la demande)
Cependant, si cette même API va être consommée par un service Web pour afficher tous les produits avec des détails, le trafic réseau deviendra bavard. La meilleure séquence dans ce cas serait:
1. Que diable, tampon tous les produits et les champs de produits d'un seul appel db (dans ce cas en mémoire tampon des produits 1 million semble aussi effrayant)
Merci pour les liens! L'article de Velocity était très agréable à lire ... Les données statiques sont déjà mises en cache dans notre cache interne. Les autres données qui ne sont pas statiques ne sont pas du tout mises en cache et ne sont même pas complètement lues dans la mémoire (les champs sont accessibles à la demande, voir la modification). Dans ce cas de données dynamiques, il est difficile de décider si elle doit être lue complètement ou partiellement en mémoire. – kateroh