JSON文档在Elasticsearch中存储的字节占用量问询
Elasticsearch中文档的存储空间计算
核心结论
无法直接通过原始JSON的字符数精确计算存储空间,因为Elasticsearch的存储开销由多个因素共同决定,但可以结合你的例子给出大致范围。
影响存储空间的关键因素
- 原始JSON的精简:Elasticsearch解析JSON时会自动去除所有格式空格、换行等无意义字符,所以你那1000字符的带格式JSON,实际有效数据字符数会减少(比如假设去掉空格后剩800字符)。
_source字段的压缩存储:默认开启的_source会存储一份压缩后的原始结构化JSON(已去除格式字符),压缩率通常在30%-70%之间,数据重复性越高压缩率越好。- 字段类型与索引开销:不同字段类型的存储/索引开销差异很大:
- 数值类型(int、long、float等)会用紧凑的二进制编码(比如int占4字节,long占8字节);
- keyword字段存储精确字符串,开销接近字符串本身的字节数(UTF-8编码下,每个中文字符占3字节,英文/数字占1字节);
- text字段需要构建倒排索引,开销取决于分词后的词数量,可能比
_source的存储开销还大。
- 文档元数据:每个文档都包含
_id、_version、_type等内置元数据,大概会占用几十字节的额外空间(比如自动生成的UUID类型_id约占36字节,加上其他元数据总计50-100字节)。
针对你的例子的大致估算
假设你的1000字符JSON去掉格式空格后剩余800有效字符,且以英文为主(UTF-8下1字节/字符):
_source压缩后:按40%压缩率计算,约320字节;- 元数据:约60字节;
- 字段索引开销:如果都是keyword或数值字段,索引开销大概和
_source相当或略少;如果是text字段,索引开销可能是_source的1-3倍。
综合下来,总存储空间大概在400-1500字节之间,具体数值取决于字段类型和数据特征。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

