2010-08-09 3 views
1

J'ai l'intention d'utiliser le fichier DAT de Maxmind pour fournir des fonctionnalités de géolocalisation de base dans une application ASP.NET MVC que je suis en train de développer. Le fichier DAT est d'environ 17 Mo et je me demande quelle serait la meilleure approche pour le charger dans mon application - évidemment, je ne veux pas le charger chaque fois que des informations géographiques sont nécessaires et je pense que la meilleure chose à faire est de le charger dans une variable partagée au démarrage de l'application.ASP.NET MVC - Chargement du fichier dat Maxmind

Comment quelqu'un d'autre a-t-il abordé cette question? Des recommandations? Merci

JP

Répondre

4

Cache est un terrible endroit pour stocker cela. Il peut être effacé sans préavis, vous devrez donc le recharger chaque fois qu'il est supprimé.

Maxmind supplies a .NET API pour gérer leur fichier DAT. Celui emballé comme tar.gz (décrit comme "Open source API C# pour GeoIP Ville, Pays, fournisseur de services Internet et plus") a déjà une option pour charger efficacement les données dans un cache privé, par exemple:

var lookupService = new LookupService("path.to.my.dat", LookupService.GEOIP_MEMORY_CACHE); 
+0

J'ai utilisé cette API avec beaucoup de succès. C'est vraiment rapide. – jessegavin

+0

Au lieu de la version originale de l'API MaxMind C# (située à l'adresse http://www.maxmind.com/app/csharp), , vous pouvez essayer d'utiliser une version légèrement modifiée de http://code.google.com/p/geoipsharp – Evereq

2

Le HttpRuntime.Cache me semble être le meilleur endroit où vous pouvez persister ces données. Voir here pour savoir comment ajouter et supprimer des éléments du cache.

+0

+1 - exactement ce que j'aurais suggéré. en fait, ce mécanisme peut être aussi simple ou complet que vous le souhaitez. dans mes applications, j'ai tellement évolué que les fonctions lambda et anonymes s'occupent de tous mes objets 'fortement typés', de sorte qu'une requête pour le cache le remplit ou récupère le contenu de cette clé donnée. C'est une stratégie qui a vraiment besoin de planification, mais une fois que votre système «clé» est identifié, c'est un non-brainier. Je peux laisser tomber un lien à mes implémentations de ceci (unité testable car elle utilise des interfaces à un wrapper) –

+0

Doux, on dirait que ça marchera un régal. Merci! –