【问题标题】:Storing text and audio files in MySQL [duplicate]在 MySQL 中存储文本和音频文件 [重复]
【发布时间】:2015-05-10 13:31:51
【问题描述】:

在数据库中只存储文件路径是一个好习惯吗?将文件本身存储在 MySQL 中有什么好处?如果直接将文件存储到 MySQL 中,文本文件和音频文件的数据类型是什么?

【问题讨论】:

    标签: c# mysql audio text-files mysql-workbench


    【解决方案1】:

    我建议将音频和视频文件存储在一些存储设备中,并且只将它们的路径和元信息存储在数据库中。当您需要检索这些媒体文件时,请在数据库中查找它们的路径。

    我所知道的每个存储大量大文件的系统都将它们存储在数据库外部。您将文件的所有可查询数据(标题、艺术家、长度等)以及文件的部分路径存储在数据库中。当需要检索文件时,您提取文件的路径,在其前面添加一些文件根(或 URL),然后返回。

    因此,您将有一个“位置”列,其中包含部分路径,例如“a/b/c/1000”,然后您将其映射到:“http://myserver/files/a/b/c/1000.mp3

    确保您有一种简单的方法可以将媒体数据库指向不同的服务器/目录,以防您需要进行数据恢复。此外,您可能需要一个将数据库与文件存档内容重新同步的例程。

    此外,如果您要拥有数千个媒体文件,请不要将它们全部存储在一个巨大的目录中 - 这对某些文件系统来说是一个性能瓶颈。相反,将它们分解为多个平衡的子树。

    【讨论】:

      【解决方案2】:

      MEDIUMBLOB - 用于音频文件

      MEDIUMBLOB 最多可为您提供 16 MB 的数据 - 很可能有足够的空间容纳您拥有的任何 MP3,而且您所获得的大小是长度 + 3。

      来自Documentation

      对于文本文件

           Type | Maximum length
      -----------+-------------------------------------
        TINYTEXT |           255 (2 8−1) bytes
            TEXT |        65,535 (216−1) bytes = 64 KiB
      MEDIUMTEXT |    16,777,215 (224−1) bytes = 16 MiB
        LONGTEXT | 4,294,967,295 (232−1) bytes =  4 GiB
      

      请注意,可以存储在列中的字符数取决于字符编码。

      【讨论】:

        【解决方案3】:

        当您在 SQL 中存储文件时,您实际上是使用 BINARY or VARBINARY data types 存储它们的字节数据,如果您要在 SQL 中存储文件,则必须根据需要对文件进行编码和解码,并且您可能会复制数据。但是,将文件存储为文件的问题在于您缺乏移动它们的灵活性。什么是“最好的”取决于用例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-01
          • 2012-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-22
          • 1970-01-01
          相关资源
          最近更新 更多