我们正在捕获一个大小可变的原始二进制字符串(从100k到800k),我们希望存储这些单独的字符串。它们不需要被编入索引(duh),并且不会对该字段的内容进行任何查询。
这些插页的数量将非常大(它们用于存档目的),比方说每天10,000。这些大型二进制字符串的最佳字段类型是什么?应该是text
还是blob
还是其他什么?
答案 0 :(得分:15)
就 PostgreSQL 而言,输入text
是不可能的。为了这个目的,它比bytea
更慢,使用更多空间并且更容易出错
基本上有3种方法:
使用类型bytea(基本上是pb等效的SQL blob类型)
将blob存储为 filesystem 中的文件,并仅存储文件名 在数据库中。
每个人都有自己的优点和缺点。
处理起来相当简单,但需要的磁盘空间最多。需要一些解码和编码,这使得它也很慢。备份的规模迅速增长!
在处理方面略显尴尬,但您有自己的基础设施来操纵blob - 如果您需要它。您可以更轻松地进行单独备份。
是目前最快的方式,使用的磁盘空间最少。但它不提供存储在数据库中时的参照完整性。
我有许多像图像文件那样的实现:在bytea字段中存储小缩略图,以便参照完整性和快速参考。将原始图像作为文件存储在文件系统中。当然,您需要考虑何时以及如何删除过时的文件,如何备份外部文件等。
答案 1 :(得分:2)
您应该在大多数数据库中使用blob
。 text
列通常会根据文本编码或区域设置进行规范化或转换;因此可能无法按预期保留实际字节。几乎在所有情况下,这是text
和blob
列之间的唯一区别。
答案 2 :(得分:0)
我们有用户VARBINARY列来存储最多300 MB的文件。