我正在测试在Postgres 9.6.4中存储为JSONB的JSON文档在我们的应用程序中需要多少存储空间。测试产生了奇怪的结果,我希望SO上的某个人可能有解释。
以下是我们的应用程序存储的JSON文档示例。在示例中有五组键/值对(valueA - valueE),但实际数据包含10-30组键/值。
在我测试期间,我创建了三个tablea,每个tablea持有100,000个文档。每个表都持有一个逐步增大的10,20和30组键/值的JSON文档。
我无法解释的是,具有最小JSON文档的表占用的空间比较大的JSON文档多得多。
没有重复键,我检查了所有表中的数据,并为所有测试场景存储了整个JSON文档。在每个测试中,我创建一个没有任何索引的简单全新表,然后加载JSON文档。
以下是我的结果:
带有100,000个JSON文档 10组键/值对:占用195mb的空间 20组键/值对:占用71mb的空间 30组键/值对:占用87mb的空间
有谁知道会解释什么?
示例JSON文档:
{
"values": {
"valueA": {
"created": "2017-08-29T22:22:13",
"name": "targetA",
"rank": 1.136,
"valuetype": "expected"
},
"valueB": {
"created": "2017-08-29T22:22:14",
"name": "targetB",
"rank": 0.067,
"valuetype": "expected"
},
"valueC": {
"created": "2017-08-29T22:22:15",
"name": "targetC",
"rank": 0.42,
"valuetype": "expected"
},
"valueD": {
"created": "2017-08-29T22:22:16",
"name": "targetD",
"rank": 0.986,
"valuetype": "random"
}
"valueE": {
"created": "2017-08-29T22:22:16",
"name": "targetE",
"rank": 0.111,
"valuetype": "random"
}
}
}