存储长二进制(原始数据)字符串

问题描述 投票:0回答:3

我们正在捕获一个大小可变(从 100k 到 800k)的原始二进制字符串,我们希望存储这些单独的字符串。它们不需要索引(废话),并且不会对该字段的内容进行查询。

这些插页的数量会非常大(它们用于存档目的),假设每天 10,000 个。对于像这样的大型二进制字符串来说,最好的字段类型是什么?应该是

text
还是
blob
还是其他?

mysql postgresql database-design blob
3个回答
22
投票

PostgreSQL而言,类型

text
是不可能的。出于此目的,它比
bytea
更慢、占用更多空间并且更容易出错。

基本上有3种方法:

  1. 使用类型

    bytea
    (基本上相当于 SQL blob 类型的 pg)。

  2. 使用大物体

  3. 将 blob 作为文件存储在文件系统中,并且仅存储文件名 在数据库中。

各有各的优点和缺点。

1. 处理起来相当简单,但需要最多的磁盘空间。需要一些解码和编码,这使得它也很慢。备份大小快速增长!

2. 处理起来有点尴尬,但是你有自己的基础设施来操作 blob - 如果你需要的话。而且您可以更轻松地进行单独备份。

3. 是迄今为止最快的方法并且使用最少的磁盘空间。但它不提供在数据库中存储时获得的引用完整性。

我有许多与图像文件类似的实现:将“小缩略图”存储在字节字段中,以实现引用完整性和快速引用。将原始图像作为文件存储在文件系统中。当然,您需要考虑何时以及如何删除过时的文件,如何备份外部文件等。


2
投票
blob

text
列通常会根据文本编码或语言环境进行标准化或转换;因此实际字节可能不会按预期保留。在几乎所有情况下,这是
text
blob
列之间的唯一区别。
    


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.