7 puntos por xguru 2020-07-24 | 2 comentarios | Compartir por WhatsApp
  • Reemplaza a los ES6 Maps con límite de 16 millones: puede almacenar más de 1,000 millones de claves

  • Desarrollada en C++ e incluye un wrapper para Node.js

→ Puede leer/escribir 500 mil claves por segundo

→ Bajo overhead de memoria

→ No se almacena en el heap de V8

→ Soporta buffers, cadenas, números, booleanos y objetos

  • Compatible de forma básica con la API de ES6 Map: get, set, has, ddelete, clear, length

  • Internamente usa la técnica de Separate Chaining: índice + lista enlazada

2 comentarios

 
kbumsik 2020-07-24

Uff, ¿habrá alguna razón para usar un Map tan grande?

 
xguru 2020-07-24

En la práctica, si metes más de 2^24 claves en un Map de Node.JS, se produce un error de heap.

Esto no es un bug, sino un límite definido por la implementación, y hay una respuesta de un desarrollador de V8 sobre esto en StackOverflow.

https://stackoverflow.com/a/54466812/166418

  • El FixedArray que almacena el Map tiene un tamaño máximo de 1GB

  • En un sistema de 64 bits, 1GB / 8B = 2^30 / 2^3 = 2^27 ~= 134M, así que FixedArray puede almacenar como máximo 134 millones de elementos

  • Un Map necesita 3 elementos por entrada (key, value, next bucket link), y la carga máxima está limitada al 50% para evitar colisiones de buckets.

→ Como la capacidad debe ser una potencia de 2, si redondeas hacia abajo al siguiente exponente en el cálculo 2^27 / (3 * 2), el valor máximo es 2^24