在 MySQL 中存储文本和音频文件
本文关键字:音频 文件 文本 存储 MySQL | 更新日期: 2024-11-06 20:10:18
数据库中只存储文件路径是一个好的做法吗?在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中,则必须根据需要对文件进行编码和解码,并且可能会复制数据。但是,将文件存储为文件的问题在于您缺乏移动它们的灵活性。什么是"最佳"取决于用例。