-
Substitui os ES6 Maps, que têm limite de 16 milhões: pode armazenar mais de 1 bilhão de chaves
-
Desenvolvido em C++ e inclui um wrapper para Node.js
→ Permite leitura/gravação de 500 mil chaves por segundo
→ Baixo overhead de memória
→ Não é armazenado no heap do V8
→ Suporta Buffer, strings, números, booleanos e objetos
-
Compatível basicamente com a API do ES6 Map: get, set, has, ddelete, clear, length
-
Internamente usa a técnica de Separate Chaining: índice + lista ligada
2 comentários
Nossa, será que existe motivo para usar um Map tão grande assim? Aff
Na prática, no Node.JS, se você inserir mais de 2^24 chaves em um Map, ocorrerá um erro de heap.
Isso não é um bug, mas um limite definido pela implementação, e há uma resposta de um desenvolvedor do V8 sobre isso no StackOverflow.
https://stackoverflow.com/a/54466812/166418
O FixedArray que armazena o Map tem tamanho máximo de 1 GB
Em sistemas 64 bits, 1 GB / 8 B = 2^30 / 2^3 = 2^27 ~= 134 M, então o FixedArray pode armazenar no máximo 134 milhões de elementos
O Map precisa de 3 elementos por entrada (Key, value, next bucket link), e a quantidade máxima de carga é limitada a 50% para evitar colisões de bucket.
→ Como a capacidade precisa ser uma potência de 2, ao calcular 2^27 / (3 * 2) e arredondar para a potência inferior seguinte, 2^24 é o valor máximo