为了降低保存block的内存开销,同时保证访问效率,namenode使用 LightWeightGSet这一数据结构。
LightWeightGSet同HashMap一样使用数组 + 链表的结构,但是有几点不同:
- 数组长度初始化时就确定了,以后不会再变化,所有没有rehash。
- 本质上不是key/value存储结构。value是key的子类,所以value自身就包含了key的信息,通过key找到value的位置,但是只存储value,不会再开辟单独的存储空间存储key,因此就比HashMap更节省空间,但是访问效率跟HashMap一下。 详细设计、对比可以参看:https://issues.apache.org/jira/secure/attachment/12445502/GSet20100525.pdf