7 puan yazan xguru 2020-07-24 | 2 yorum | WhatsApp'ta paylaş
  • 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

 
kbumsik 2020-07-24

Vay canına, bu kadar büyük bir Map kullanmak için gerçekten bir sebep var mı acaba?

 
xguru 2020-07-24

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