-
Ersatz für ES6 Maps mit einer Begrenzung von 16 Millionen: Es können mehr als 1 Milliarde Schlüssel gespeichert werden
-
In C++ entwickelt und mit einem Wrapper für Node.js ausgestattet
→ 500.000 Schlüssel-Lese-/Schreibvorgänge pro Sekunde möglich
→ Geringer Memory-Overhead
→ Wird nicht im V8-Heap gespeichert
→ Unterstützt Buffer, Strings, Zahlen, Booleans und Objekte
-
Grundsätzlich kompatibel mit der ES6-Map-API:
get,set,has,ddelete,clear,length -
Verwendet intern das Separate-Chaining-Verfahren: Index + Linked-List-Methode
2 Kommentare
Huch, gibt es wirklich einen Grund, eine so große Map zu verwenden? hm
Tatsächlich tritt in Node.JS ein Heap-Fehler auf, wenn man mehr als 2^24 Schlüssel in eine Map einfügt.
Das ist kein Bug, sondern eine in der Implementierung definierte Begrenzung; eine Antwort eines V8-Entwicklers dazu gibt es auf StackOverflow.
https://stackoverflow.com/a/54466812/166418
Das
FixedArray, das die Map speichert, hat eine maximale Größe von 1 GBAuf 64-Bit-Systemen gilt 1 GB / 8 B = 2^30 / 2^3 = 2^27 ~= 134 M, daher kann das
FixedArraymaximal 134 Millionen Elemente speichernEine Map benötigt 3 Elemente pro Eintrag (Key, value, next bucket link), und die maximale Auslastung ist auf 50 % begrenzt, um Bucket-Kollisionen zu vermeiden.
→ Da die Kapazität eine Zweierpotenz sein muss, ist beim Rechnen mit 2^27 / (3 * 2) und anschließendem Abrunden auf die nächste Zweierpotenz 2^24 der Maximalwert