我们正在捕获一个大小可变(从 100k 到 800k)的原始二进制字符串,我们希望存储这些单独的字符串。它们不需要索引(废话),并且不会对该字段的内容进行查询。
这些插页的数量会非常大(它们用于存档目的),假设每天 10,000 个。对于像这样的大型二进制字符串来说,最好的字段类型是什么?应该是
text
还是blob
还是其他?
就PostgreSQL而言,类型
text
是不可能的。出于此目的,它比 bytea
更慢、占用更多空间并且更容易出错。
基本上有3种方法:
各有各的优点和缺点。
1. 处理起来相当简单,但需要最多的磁盘空间。需要一些解码和编码,这使得它也很慢。备份大小快速增长!
2. 处理起来有点尴尬,但是你有自己的基础设施来操作 blob - 如果你需要的话。而且您可以更轻松地进行单独备份。
3. 是迄今为止最快的方法并且使用最少的磁盘空间。但它不提供在数据库中存储时获得的引用完整性。
我有许多与图像文件类似的实现:将“小缩略图”存储在字节字段中,以实现引用完整性和快速引用。将原始图像作为文件存储在文件系统中。当然,您需要考虑何时以及如何删除过时的文件,如何备份外部文件等。
blob
。
text
列通常会根据文本编码或语言环境进行标准化或转换;因此实际字节可能不会按预期保留。在几乎所有情况下,这是 text
和 blob
列之间的唯一区别。