【问题标题】:Storing long binary (raw data) strings [closed]存储长二进制(原始数据)字符串
【发布时间】:2011-11-18 01:41:51
【问题描述】:

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

这些插入的数量将非常大(它们用于存档目的),比如说每天 10,000 个。像这样的大型二进制字符串的最佳字段类型是什么?应该是text 还是blob 还是别的什么?

【问题讨论】:

    标签: mysql postgresql database-design blob


    【解决方案1】:

    PostgreSQL 而言,输入text 是不可能的。它比bytea 更慢、占用更多空间并且更容易出错。

    基本上有3种方法:

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

    2. 使用"large objects"

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

    各有优缺点。

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

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

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

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

    【讨论】:

    • 最近有数据比较这些方法吗?如果有一些客观的比较,那就太好了。
    • @beldaz - 有点晚了,但here 是个好帖子。
    【解决方案2】:

    您可能应该在大多数数据库中使用blobtext 列通常会根据文本编码或语言环境进行规范化或转换;因此实际字节可能无法按预期保留。在几乎所有情况下,这是textblob 列之间的唯一区别。

    【讨论】:

      【解决方案3】:

      我们有用户 VARBINARY 列来存储多达 300 MB 的文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        • 2011-09-29
        • 1970-01-01
        • 2020-11-01
        相关资源
        最近更新 更多