在 MySQL 中存储文本和音频文件

本文关键字:音频 文件 文本 存储 MySQL | 更新日期: 2024-11-06 20:10:18

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

在 MySQL 中存储文本和音频文件

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

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

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

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

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

MEDIUMBLOB - 用于音频文件

MEDIUMBLOB为您提供高达16 MB的数据 - 很可能有足够的空间容纳您拥有的任何MP3,并且您占用的大小为长度+ 3。

从文档

对于文本文件

     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

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

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