MemoryMappedFile et b-tree pour l'application de cache

C'est juste une idée, je n'ai pas encore de code, j'ai besoin de conseils en design. Je mettrais en œuvre un cache (non distribué en première instance) en utilisant le MemoryMappedFile in c #. Je pense qu’il serait bon d’avoir un arbre b en tant que structure peu gaie, mais c’est également discutable. Donc la question est:

  • B-tree est-il une bonne stratégie à utiliser pour rechercher rapidement des éléments lorsque la prise en charge non ralentie est un fichier mappé en mémoire?
  • Quels trucs et astuces avons-nous avec les fichiers mappés en mémoire? Combien la vue peut être grande, quels sont les inconvénients quand elle est trop petite ou trop grande?
  • Considération multithread: comment nous traitons le fichier mappé en mémoire et la simultanéité? Les caches sont supposés être très touchés par les clients, quelle stratégie est préférable d’obtenir quelque chose de performant?

Comme @Internal Server Error demandé, j'intègre la question avec ceci: Key serait une chaîne d'environ 64 caractères maximum. Les données seraient un octet [] d'environ 1024 octets de long, mais considérons une moyenne de 128 octets ou mieux: ce que je veux mettre en cache sont des entités OR/M, considérons combien de temps dure une entité sérialisée en octets avec un sérialiseur BSOn .

1
key sera une chaîne, considérons quelque chose à propos de 64 caractères. Les données devraient être un tableau d'octets: une entité sérialisée, probablement entre 4 et 1 Ko.
ajouté l'auteur Felice Pollano, source
@vous avez raison, je sais mongodb, mais je veux quelque chose d'intégrable dans mon projet
ajouté l'auteur Felice Pollano, source
pourquoi rouler le vôtre? couchdb, memcached, mongodb; apparemment mongodb est rapide
ajouté l'auteur sehe, source
Quel est le type de données que vous mettez en cache? Quel type est la clé? De combien de données parlons-nous?
ajouté l'auteur 500 - Internal Server Error, source

1 Réponses

  • B-Tree est bon (avec les fichiers mappés en mémoire), mais si le fichier n'est pas toujours entièrement conservé dans la mémoire résidente, un B + Tree aligné sur la page est bien meilleur. Voir aussi .
  • L'astuce avec les fichiers mappés en mémoire consiste à utiliser une architecture 64 bits afin de mapper l'intégralité du fichier en mémoire, sinon vous devez mapper uniquement les parties et le read mis en cache . s est peut-être plus rapide que mmap s.
  • Essayez CAS (comparez et échangez) sur la mémoire partagée. Voir aussi .
1
ajouté
Merci beaucoup, bonnes références aussi.
ajouté l'auteur Felice Pollano, source
Peut-être qu’il y a quelque chose de C# -pish pour vous à nosql-database.org . Sinon, un projet C peut servir de référence.
ajouté l'auteur ArtemGr, source