-
Thay thế ES6 Maps bị giới hạn ở mức 16 triệu phần tử: có thể lưu trữ hơn 1 tỷ khóa
-
Được phát triển bằng C++ và bao gồm wrapper cho Node.js
→ Có thể đọc/ghi 500 nghìn khóa mỗi giây
→ Ít overhead bộ nhớ
→ Không được lưu trên V8 Heap
→ Hỗ trợ Buffer, chuỗi, số, boolean, object
-
Tương thích cơ bản với API của ES6 Map: get, set, has, ddelete, clear, length
-
Bên trong sử dụng kỹ thuật Separate Chaining: chỉ mục + danh sách liên kết
2 bình luận
Hả, có lý do gì để dùng một
Maplớn đến vậy không nhỉ?Trên thực tế, nếu đưa hơn 2^24 khóa vào
Maptrong Node.JS thì sẽ xảy ra lỗi heap.Đây không phải là bug mà là một giới hạn được quy định trong triển khai, và có câu trả lời của một lập trình viên V8 về vấn đề này trên StackOverflow.
https://stackoverflow.com/a/54466812/166418
FixedArraydùng để lưuMapcó kích thước tối đa là 1GBTrên hệ thống 64-bit, 1GB / 8B = 2^30 / 2^3 = 2^27 ~= 134M, nên
FixedArraycó thể lưu tối đa 134 triệu phần tửMapcần 3 phần tử cho mỗi entry (Key,value,next bucket link), và số lượng nạp tối đa bị giới hạn ở 50% để tránh va chạm bucket.→ Vì dung lượng phải là lũy thừa của 2, nên từ phép tính 2^27 / (3 * 2), nếu làm tròn xuống về lũy thừa tiếp theo thì mức tối đa là 2^24