2009-08-04 10 views
0

Scénario:Partage de données classes statiques accross web jardin/ferme

  • site web ASP.NET
  • classes statiques mondiales contenant TONNES de données de configuration
  • les données statiques est en lecture seule la plupart du temps, mais il peut changer tous les temps en temps
  • données dans les classes statiques doit être du temps réel, à tout moment

maintenant, cela fonctionne vraiment super dans un processus de travail unique, toutes les données de configuration sont en mémoire à tout moment (écriture des changements sur le disque seulement lorsque des modifications sont apportées aux données), et comme il est utilisé beaucoup, il accélère l'application par des ordres de grandeur (comparé à l'avoir stocké sur la base de données et l'interroger sur chaque demande)

Comment voulez-vous convertir cette application afin qu'elle puisse être utilisée dans un jardin web, ou même dans un environnement de ferme Web?

ce que je suis à la recherche est un mécanisme de synchronisation en temps réel

la question, évidemment, est que chaque travailleur aurait sa propre copie des données des classes statiques; J'ai quelques idées sur l'approche que je prendrais, mais je voudrais voir quelles autres idées les gens ont

Répondre

1

Vous pouvez vérifier la date sur un fichier partagé sur le système de fichiers. Chaque fois que les données de configuration changent, il suffit de toucher le fichier pour modifier la date de modification. Comparez la date à laquelle votre programme a chargé les données avec la date du fichier. Si le fichier a une date plus récente, rechargez les données et mettez à jour votre date LastLoaded.

Il est léger et vous permet de déclencher facilement des rechargements de données. Tant que le fichier n'a pas changé depuis un moment, le système d'exploitation devrait avoir la plupart des métadonnées de fichier dans le ram de toute façon. Bien que je n'aie pas fait de comparaison de performances, j'ai toujours trouvé que cette façon de procéder était robuste et facile à mettre en œuvre pour transmettre le message «Rechargez votre cache» à tous les clients.

DateTime cacheDate = DateTime.Now.AddHours(-1); 
DateTime fileDate = System.IO.File.GetLastWriteTime(@"C:\cachefile.txt"); 
if(fileDate > cacheDate) 
{ 
    //Reload cache 
    cacheDate = DateTime.Now; 
} 
//Get Cached Data 

Vous pouvez également utiliser le cache HttpContext. Je n'ai pas utilisé cela auparavant de cette façon, donc je ne sais pas comment cela fonctionne.

+0

merci pour la réponse, les données résident sur un DB mais la technique pourrait s'appliquer – BlackTigerX

Questions connexes