MemoryMappedFile en b-tree voor cachetoepassing

Dit is maar een idee, ik heb nog geen code, ik heb ontwerpadviezen nodig. Ik zou een cache (niet gedistribueerd in eerste instantie) implementeren door MemoryMappedFile te gebruiken in c #. Ik denk dat het goed zou zijn om een ​​b-tree als een structurerende structuur te hebben, maar dit is ook de vraag. Dus de vraag is:

  • Is de B-tree een goede strategie om snel items te zoeken wanneer de niet-uitbetalingsondersteuning een geheugen toegewezen bestanden is?
  • Welke tip en truc hebben we met geheugen toegewezen bestanden? Hoe groot het beeld kan zijn, wat zijn de nadelen wanneer het te klein of te groot is?
  • Multithread-overweging: hoe gaan we om met geheugen toegewezen bestanden en concurrency? Cache wordt verondersteld hoog te worden gehouden door klanten, welke strategie is beter om iets performants te hebben?

Zoals @Internal Server Error vroeg, integreer ik de vraag hiermee: Key zou een string zijn, ongeveer 64 tekens max. Lenzen. De gegevens zouden een byte [] zijn van ongeveer 1024 bytes lang maar beschouwen een gemiddelde van 128 bytes of beter: wat ik wil cachen zijn OR/M-entiteiten, laten we eens kijken hoe lang een geserialiseerde entiteit in bytes is met zoiets als een BSOn-serialisator .

1
sleutel zal een tekenreeks zijn, overweeg iets over 64 tekens. Gegevens moeten een reeks bytes zijn: een geserialiseerde entiteit, waarschijnlijk van 4 tot 1 kB.
toegevoegd de auteur Felice Pollano, de bron
@Zo heb je gelijk, ik weet mongodb, maar ik wil iets dat in mijn project kan worden geïntegreerd
toegevoegd de auteur Felice Pollano, de bron
waarom rol je die zelf? couchdb, memcached, mongodb; blijkbaar is mongodb snel
toegevoegd de auteur sehe, de bron
Wat is het gegevenstype dat u in de cache opslaat? Welk type is de sleutel? Over hoeveel gegevens hebben we het?
toegevoegd de auteur 500 - Internal Server Error, de bron

1 antwoord

  • B-Tree is goed (met mappen die in het geheugen zijn geplaatst), maar als het bestand niet altijd volledig in het interne geheugen wordt bewaard, is een B + Tree met uitgelijnde pagina veel beter. Zie ook .
  • De truc met geheugen toegewezen bestanden is om een ​​64-bits architectuur te gebruiken, zodat je het hele bestand in het geheugen kunt mappen, anders zou je alleen de delen in kaart moeten brengen en de gecachte lezen s is mogelijk sneller dan mmap s.
  • Probeer CAS (compare-and-swap) over het gedeelde geheugen. Zie ook .
1
toegevoegd
Heel erg bedankt, ook goede referenties.
toegevoegd de auteur Felice Pollano, de bron
Misschien is er iets C# -pis voor u op nosql-database.org . Of sommige C-projecten kunnen dienen als referentie.
toegevoegd de auteur ArtemGr, de bron