大型PostgreSQL表:最好添加列或创建新表来存储元数据?

Ben*_*oyt 5 sql postgresql json database-design

我有一张大桌子(约200万行),每行代表一张图像。我想为每个图像以JSON格式存储EXIF元数据。这个JSON Blob每个图片大约6KB。

这个EXIF元数据不会被频繁查询/使用,我想知道将它存储在具有两列(imageid,exifjson)的单独表中是否会更有效,或者PostgreSQL是否会只处理它可以作为text现有表格上的一列。我不想添加该列来显着减慢表上的常规查询,也不希望添加数百万个6KB的文本值来压低PostgreSQL。

kup*_*son 5

我会将该列设为TOAST -ed。

 ALTER TABLE ... ALTER <column> SET STORAGE <EXTERNAL|EXTENDED>;
 -- EXTERNAL - out-of-line storage, not compression[1]
 -- EXTENDED - both compression and out-of-line storage
Run Code Online (Sandbox Code Playgroud)

PostgreSQL已经尝试将其用于大于2kB的数据。

[1]“使用的压缩技术是LZ系列压缩技术中相当简单且非常快的成员。”