在所有HBase文章和书籍中,它都提到了以下关于HFiles中的Meta和FileInfo块:
"元块旨在以字符串的形式保存大量数据,而FileInfo是一个简单的映射,首选用于具有键和值都是字节数组的小信息。 或 "元数据块很昂贵。用一堆序列化数据填充一个,而不是为每个元数据实例执行元数据块。如果元数据很小,请考虑添加到文件信息">
我想了解它为什么这么说。设计逻辑是什么,哪些大数据应该保留在 Meta 中,而小数据应该保留在FileInfo
中。
我想知道这一点的原因是我们在项目中的FileInfo中存储了一些信息。但是,随着时间的推移,我们存储的信息开始增长,现在FileInfo中最多有15-20MB的数据。从上面的文字来看,我们似乎不应该这样做。但我们甚至不知道它对我们的系统造成了什么影响(如果有的话(。
有人可以对此有所了解吗? 我查看了HFile
和FileInfo
代码,找不到任何明显的原因。
这似乎是一个愚蠢的问题,但原因是FileInfo块是所谓的"打开加载",顾名思义,它被加载到文件打开本身。因此,如果您在FileInfo中有大量数据,那么即使您不需要它,它仍然会被加载到内存中。另一方面,元块可以按需加载。因此,如果你有大量的数据,你应该考虑把它放在元维基而不是FileInfo中。