【发布时间】:2015-05-10 13:31:51
【问题描述】:
在数据库中只存储文件路径是一个好习惯吗?将文件本身存储在 MySQL 中有什么好处?如果直接将文件存储到 MySQL 中,文本文件和音频文件的数据类型是什么?
【问题讨论】:
标签: c# mysql audio text-files mysql-workbench
在数据库中只存储文件路径是一个好习惯吗?将文件本身存储在 MySQL 中有什么好处?如果直接将文件存储到 MySQL 中,文本文件和音频文件的数据类型是什么?
【问题讨论】:
标签: c# mysql audio text-files mysql-workbench
我建议将音频和视频文件存储在一些存储设备中,并且只将它们的路径和元信息存储在数据库中。当您需要检索这些媒体文件时,请在数据库中查找它们的路径。
我所知道的每个存储大量大文件的系统都将它们存储在数据库外部。您将文件的所有可查询数据(标题、艺术家、长度等)以及文件的部分路径存储在数据库中。当需要检索文件时,您提取文件的路径,在其前面添加一些文件根(或 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 or VARBINARY data types 存储它们的字节数据,如果您要在 SQL 中存储文件,则必须根据需要对文件进行编码和解码,并且您可能会复制数据。但是,将文件存储为文件的问题在于您缺乏移动它们的灵活性。什么是“最好的”取决于用例。
【讨论】: