2010-06-02 4 views
0

J'ai affaire à un service Web obèse d'une tierce partie qui renvoie environ 3 Mo de données pour un résultat de recherche simple, environ 50% des données dans cette réponse sont indésirables. Cela aurait-il un sens alors de remapper ces données sur mon propre objet résultat et d'abandonner la réponse de sorte que je stocke 1-2 Mo en mémoire pour filtrer et trier plutôt que d'utiliser l'objet propre aux réponses web et en utilisant 2- 4 ou est-ce que je manque un point?Le traitement d'un webservice gras dans .net 3.5 C#

Jusqu'à présent, j'ai le webservice d'ACCÈDE un projet distinct et en utilisant une nouvelle classe pour fournir l'interaction et de gérer la persistance si mon projet ressemble à ce

|- Web (mvc2 proj) 
|- DAL (database/storage fluent-nhibernate) 
|- SVCGateway (interaction layer + webservice related models) 
|- Services 
-------------- 
|- Tests 
|- Specs 

Je suis en train de faire l'application se comporte rapidement et j'ai également besoin de stocker le jeu de résultats temporairement dans le cas où un client va voir le produit et veut revenir aux résultats. (Le service renvoie seulement 500 des résultats possibles 14K). Donc en gros je cherche la confirmation que je fais ce qu'il faut pour pousser les résultats dans mes propres objets ou si je suis en train d'enfreindre une règle ou même s'il y a une meilleure façon de la gérer.

Merci

+0

uggh, je pensais que notre 3ème partie était mauvaise avec une charge utile de 200k. Êtes-vous sûr de ne pas pouvoir limiter le nombre de résultats renvoyés via leur service? Pourquoi auriez-vous besoin de 500 résultats à la fois? La notre fournit au moins des propriétés pour la pagination flexible. – ScottE

+0

non seulement il renvoie juste ce qui est disponible jusqu'à 500 résultats. –

Répondre

1

En supposant que vous manipulerez l'ensemble de données résultant plusieurs fois pendant la durée de vie de votre application, je pense que le mappage du jeu de résultats du service Web à vos propres objets est tout à fait logique. Mis à part l'avantage évident d'une empreinte mémoire réduite, vous pouvez également concevoir votre propre représentation interne des données à optimiser pour les types d'opérations que vous avez l'intention d'effectuer sur elle. Ainsi, vous économisez sur le temps de traitement et l'utilisation de la mémoire.

Le seul cas que j'ai pu voir pour stocker la réponse tierce gonflée est si votre cas d'utilisation principal implique que les utilisateurs examinent les données exactement une fois. Si les utilisateurs reviennent rarement à leurs recherches précédentes, vous pouvez justifier l'utilisation du jeu de résultats d'origine.

0

Essayez d'utiliser sérialisation pour stocker un résultat coupé vers le bas l'objet en mémoire. Cela vous aidera énormément. C'est vraiment le seul moyen d'augmenter la vitesse de travail avec les résultats. Je voudrais également jeter un oeil à hors des solutions de mise en cache de processus telles que NCache (http://www.alachisoft.com/ncache/) et memcached (http://www.infoq.com/news/2007/07/memcached) pour augmenter votre vitesse et votre évolutivité plus loin.

+0

Cela semble douteux. Si vous obtenez beaucoup de données, la chose à éviter est le cache, le cache et toute autre duplication. Débarrassez-vous de ce dont vous n'avez pas besoin le plus vite possible. –

+0

En fait, je voulais dire mettre en cache les objets dépouillés et non la réponse complète. –