MemoryMappedFile und B-Tree für die Cache-Anwendung

Das ist nur eine Idee, ich habe noch keinen Code, ich brauche einen Design-Rat. Ich würde einen Cache (nicht in der ersten Instanz verteilt) implementieren, indem ich die MemoryMappedFile in C# verwende. Ich denke, es wäre gut, einen B-Baum als eine untergeordnete Struktur zu haben, aber das ist auch strittig. Die Frage ist also:

  • Ist B-tree eine gute Strategie, um Elemente schnell zu durchsuchen, wenn die verzögerte Unterstützung eine Memory-Mapped-Datei ist?
  • Welchen Tipp und Trick haben wir mit Memory-Mapped-Dateien? Wie groß kann die Aussicht sein, was sind die Nachteile, wenn sie zu klein oder zu groß ist?
  • Multithread-Betrachtung: Wie gehen wir mit Speicherabbilddateien und Parallelität um? Cache sollte von Kunden sehr stark beansprucht werden. Welche Strategie ist besser, etwas Performantes zu haben?

Wie @Internal Server Error gefragt, integriere ich die Frage damit: Key wäre eine Zeichenfolge, etwa 64 Zeichen max len. Die Daten wären ein Byte [] etwa 1024 Bytes lang, aber einen Mittelwert von 128 Bytes oder besser: Was ich zwischenspeichern möchte, sind OR/M-Entitäten. Wie lange ist eine serialisierte Entität in Bytes mit einem BSOn-Serialisierer? .

1
Schlüssel wird eine Zeichenkette sein, betrachten Sie etwas über 64 Zeichen. Daten könnten ein Array von Bytes sein: eine serialisierte Entität, wahrscheinlich von 4 bis 1k Byte.
hinzugefügt der Autor Felice Pollano, Quelle
@Sehe du hast recht, ich kenne mongodb, aber ich möchte etwas in mein Projekt einbetten
hinzugefügt der Autor Felice Pollano, Quelle
Warum rollen Sie Ihre eigenen? couchdb, memcached, mongodb; anscheinend ist Mongodb schnell
hinzugefügt der Autor sehe, Quelle
Was sind die Datentypen, die Sie zwischenspeichern? Welcher Typ ist der Schlüssel? Über wie viele Daten sprechen wir?
hinzugefügt der Autor 500 - Internal Server Error, Quelle

1 Antworten

  • B-Tree ist gut (mit Memory-Mapped-Dateien), aber wenn die Datei nicht immer vollständig im residenten Speicher gehalten wird, ist ein seitenorientierter B + Tree viel besser. Siehe auch .
  • Der Trick bei Speicherabbilddateien besteht darin, eine 64-Bit-Architektur zu verwenden, damit Sie die gesamte Datei im Speicher abbilden können. Andernfalls müssten Sie nur die Teile und den zwischengespeicherten lesen zuordnen s könnte schneller sein als mmap s.
  • Versuchen Sie CAS (Compare-and-Swap) über den gemeinsamen Speicher. Siehe auch .
1
hinzugefügt
Vielen Dank, gute Referenzen auch.
hinzugefügt der Autor Felice Pollano, Quelle
Vielleicht gibt es etwas C# -Pish für Sie auf nosql-database.org . Oder ein C-Projekt könnte als Referenz dienen.
hinzugefügt der Autor ArtemGr, Quelle