Dictionnaire / cache sauvegardé sur disque pour c #

Je recherche une solution de rechange pour la mise en cache de grandes quantités de données.

questions connexes mais pour différentes langues:

  • Dictionnaire basé sur disque Python
  • Classes de conteneur STL sauvegardées sur disque?

Question fermée en termes différents:

  • Recherche d’une implémentation simple et persistante du dictionnaire autonome en C #

Je n’ai pas besoin (ni envie de payer quoi que ce soit) de persistance, de transactions, de sécurité des threads, etc.

Si je dois écrire du code, je vais simplement tout sauvegarder en tant que fichiers dans le répertoire temporaire:

ssortingng Get(int i) { File.ReadAllText(Path.Combine(root,i.ToSsortingng()); } 

Dans mes cas, index sera un int (et ils devraient être consécutifs ou assez proches) et les données seront une ssortingng afin que je puisse me permettre de traiter à la fois un POD et préférerais aller ultra-léger et faire exactement cela.

L’utilisation est que j’ai une séquence de 3k fichiers (comme dans les fichiers n ° 1 à n ° 3000) totalisant 650 Mo et ai besoin de faire un diff pour chaque étape de la séquence. Je m’attends à ce que le total soit à peu près le même ou un peu plus et je ne veux pas garder tout cela en mémoire (des cas plus importants peuvent arriver quand je ne peux tout simplement pas).


Un certain nombre de personnes ont suggéré différentes solutions à mon problème. Cependant, aucune ne semble cibler ma petite niche. La raison pour laquelle je regarde la mise en cache sauvegardée sur disque est parce que je m’attends à ce que mon utilisation actuelle utilise jusqu’à 1/3 à 1/2 de mon espace d’adressage disponible. Je crains que les cas plus volumineux ne soient à court d’espace. Je ne m’inquiète pas de la foulée, de la persistance ou de la réplication. Ce que je recherche, c’est une solution minimale utilisant un minimum de code, une empreinte d’utilisation minimale, une surcharge de mémoire et une complexité minimale.

Je commence à penser que je suis trop optimiste.

Ce que vous voulez vraiment, c’est un B-Tree. C’est la structure de données principale qu’une firebase database utilise. Il est conçu pour vous permettre d’échanger efficacement des parties d’une structure de données vers et à partir du disque, selon vos besoins.

Je ne connais aucune implémentation B-Tree autonome de haute qualité largement utilisée pour C #.

Cependant, un moyen facile d’en obtenir un serait d’utiliser une firebase database Sql Compact. Le moteur Sql Compact s’exécutera en cours de processus, vous n’aurez donc pas besoin d’un service séparé. Cela vous donnera un b-tree, mais sans tous les maux de tête. Vous pouvez simplement utiliser SQL pour accéder aux données.

Déni de responsabilité – Je suis sur le sharepoint vous indiquer un produit dans lequel je suis impliqué.

Je travaille toujours sur le site Web, donc il n’y a pas beaucoup d’informations, mais Serial Killer serait un bon moyen pour cela. J’ai des exemples qui utilisent la sérialisation .Net (peut fournir des exemples), donc écrire un cache de carte persistant pour des objects sérialisables .Net serait sortingvial.

Suffisamment d’auto promotion – si vous êtes intéressé, utilisez le lien de contact sur le site.

Ceci est très similaire à ma question

Recherche d’une implémentation simple et persistante du dictionnaire autonome en C #

Je ne pense pas qu’une bibliothèque qui corresponde exactement à ce que vous voulez existe, peut-être qu’il est temps de lancer un nouveau projet sur github.

Voici une implémentation de B-Tree pour .net: http://bplusdotnet.sourceforge.net/

vous pouvez utiliser le bloc d’application MS avec une solution de cache sur disque

Essayez de regarder NCache ici aussi.

Je ne suis pas affilié à cette société. Je viens de télécharger et de tester leur version gratuite express.

J’ai partiellement connecté l’application Java EhCache à .NET La mise en cache dissortingbuée n’est pas encore implémentée, mais sur un seul nœud, tous les UnitTests d’origine sont acceptés. OpenSource complet:

http://sourceforge.net/projects/thecache/

Je peux créer un repository binary si vous en avez besoin (seul le code source est disponible maintenant)

Je prendrais la route de firebase database intégrée (SQLite, Firebird), mais voici quelques autres options:

  • Berkeley DB : pas votre firebase database SQL intégrée standard, mais semble être le bon choix pour ce type de tâche, bien que difficile à utiliser à partir de .net
  • db4o : une OODB, une interface très simple

Je recommande le bloc Caching Application dans Enterprise Library from MS. Cela a également été recommandé, mais le lien pointe vers un article sur la partie Accès aux données de la bibliothèque d’entreprise.

Voici le lien vers le bloc d’application de mise en cache:

http://msdn.microsoft.com/en-us/library/cc309502.aspx

Et plus précisément, vous voudrez créer un nouveau magasin de sauvegarde (s’il en existe un qui persiste sur le disque):

http://msdn.microsoft.com/en-us/library/cc309121.aspx

Compte tenu des modifications que vous avez apscopes récemment à la question, je vous suggère de mettre en œuvre la solution indiquée dans votre question, car il est très peu probable que vous trouviez une solution aussi naïve dans une bibliothèque que vous pourrez réutiliser.