-
16 milyon sınırına sahip ES6 Maps'in yerine geçer: 1 milyardan fazla anahtar saklayabilir
-
C++ ile geliştirilmiştir ve Node.js için bir wrapper içerir
→ saniyede 500 bin anahtar okuma/yazma yapabilir
→ düşük bellek ek yükü
→ V8 Heap'te saklanmaz
→ Buffer, string, sayı, boolean ve object destekler
-
ES6 Map API ile temel uyumlu: get, set, has, ddelete, clear, length
-
Dahili olarak Separate Chaining tekniğini kullanır: indeks + linked list yaklaşımı
2 yorum
Vay canına, bu kadar büyük bir Map kullanmak için gerçekten bir sebep var mı acaba?
Gerçekte Node.JS'te 2^24'ten fazla anahtarı bir Map'e koyarsanız heap hatası oluşur.
Bu bir bug değil, implementasyonda tanımlanmış bir sınırdır; buna ilişkin V8 geliştiricisinin yanıtı StackOverflow'da bulunuyor.
https://stackoverflow.com/a/54466812/166418
Map'i depolayan FixedArray'nin azami boyutu 1GB'dir
64 bit sistemde 1GB / 8B = 2^30 / 2^3 = 2^27 ~= 134M olduğundan, FixedArray en fazla 134 milyon eleman depolayabilir
Map, giriş başına 3 eleman (Key, value, next bucket link) gerektirir ve bucket çakışmalarını önlemek için azami yükleme sayısı %50 ile sınırlandırılmıştır.
→ Kapasitenin 2'nin kuvveti olması gerektiğinden, 2^27 / (3 * 2) hesabında bir alttaki kuvvete yuvarlandığında azami değer 2^24 olur