我有一个问题。 我需要保存一个大约20 MG的json(包括一些jpg base64图像)。
如果我将它保存在二进制字段,json字段或文本字段中,是否有任何优势? 任何消化都可以保存吗?
由于
答案 0 :(得分:2)
存储它的最有效方法是提取图像数据,对其进行base64解码,并将其存储在bytea
字段中。然后将json的其余部分存储在json
或text
字段中。这样做可能会节省相当多的存储空间,因为您直接存储高度压缩的JPEG数据,而不是base64编码的版本。
如果您不能这样做,或者不想这样做,那么您应该将所有内容推到json
字段中。 PostgreSQL将尝试压缩它,但是使用PostgreSQL使用的快速但不是非常强大的压缩算法,JPEG的base64将不会压缩太多。所以它可能会显着增大。
text
和json
之间的存储空间没有区别。 (jsonb
,在9.4中,是不同的 - 它针对快速访问进行了优化,而不是紧凑的存储。)
例如,如果我使用this 17.5MB JPEG,则bytea
为18MB。 Base64编码它的24MB未压缩。如果我将其推入json
字段并且包含最少的json语法包装它仍然是24MB - 这让我感到惊讶,我希望通过TOAST
压缩来节省少量存储空间。据推测,它被认为不够可压缩。
(BTW,base64编码的二进制文件作为未修改的json值是不合法的,因为你必须转义斜杠)