Postgres:为什么较小的JSON文档比较大的文档占用更多的磁盘空间?

时间:2017-09-01 05:50:38

标签: json postgresql storage jsonb

我正在测试在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"
        }
    }
}

0 个答案:

没有答案