【问题标题】:What is the best way to store Binary data (images, pdf's, mp3's, videos ect) in mysql and why?在 mysql 中存储二进制数据(图像、pdf、mp3、视频等)的最佳方法是什么,为什么?
【发布时间】:2011-03-06 18:36:06
【问题描述】:

在 mysql 中存储二进制数据(图像、pdf、mp3、视频等)的最佳方式是什么?为什么?我很想知道你是怎么做的(作为开发人员),为什么?还有大网站是怎么做的?

提前谢谢你;-)

【问题讨论】:

  • 为什么要标记为 Oracle?
  • 我认为这是一个一般的 rdbms 问题
  • 但是您的问题是“在 mysql 中”而不是“在数据库中”!实际上,这是不同 DBMS 倾向于以不同方式做的事情。

标签: php mysql sql sql-server


【解决方案1】:

我只会使用数据库来存储文件元数据(大小、MIME 类型、标签等)。为了数据的完整性和安全性,我最好将处理二进制数据的工作交给一个专门的服务,比如Amazon's S3

关于数据完整性:我会通过执行涉及大 blob 的事务来避免数据库服务器过载。相反,我建议先存储文件并执行一些定期异步“垃圾收集”。

【讨论】:

    【解决方案2】:

    好吧,我将图像保存在磁盘上,我有很多很多,我不想想象这可能是维护的噩梦。到目前为止,我的数据库 (mysql) 小于 5GB,我对大约 50GB 的 jpeg 文件很好(每个图像都保存了几个大小)。 如果操作正确,将图像存储在单独的数据库中(可能带有单独的 RAID 控制器)可能是一件好事,但我相信系统可以更快地将它们存储在磁盘上。

    【讨论】:

      【解决方案3】:

      我没用过PBMS存储引擎,不过貌似有路要走:

      Blob streaming

      【讨论】:

        【解决方案4】:

        在 Oracle 中,我会使用 BLOB 列来存储此类对象。这样,数据的完整性和安全性就与所有其他数据一样得到保证。另一种方法是使用 BFILE,它是指向外部文件系统上文件的指针 - 当您下次尝试访问该文件时,该文件可能已被移动、删除、修改甚至丢失。

        【讨论】:

        • +1 在构建网站时必须同时处理 BLOB 存储和文件系统指针,我更喜欢在提供服务之前以文件系统缓存为前端的 BLOB 存储。
        【解决方案5】:

        在 MySQL Blob 中存储二进制数据可以使用:MySQL Manuel: 10.4.3. The BLOB and TEXT Types

        虽然如果不是真的有必要,我不会将二进制数据存储在数据库中,因为在 MySQL 等中存储数据的主要原因(如 Join、Index 等)很难与这些数据一起使用类型。 Blob 还会降低整体数据库性能。

        也许您为存储多个方面和文件系统路径的文件构建一个单独的表...

        【讨论】:

        • 我不知道,我见过存储在 Oracle 数据库中的 TB 级二进制数据,然后从其中流式传输。这不一定是个坏主意。
        • 我没有写到这通常是一个坏主意 - 有支持和反对 Blob 的示例和用例。尽管如此,在我看来,当有人想要使用此类技术时,应该有充分的理由和正确的调整(例如,分离的表空间,...)。
        • BLOB 是要走的路。存储路径有一些明确的问题。如果文件被移动,则您的指针已损坏。备份数据库变得相对没有意义。对数据的可用操作并不能决定存储它的特性。
        猜你喜欢
        • 2014-01-23
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 2013-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        相关资源
        最近更新 更多