我要存储大量的声音文件在一个数据库,但是我不知道如果这是一个良好做法。我想知道的利弊做它以这种方式。

我还以为可能有"链接",这些文件,但这也许将开展更多的问题比解决方案。任何经验在这方会欢迎:)

注:该数据库将MySQL.

有帮助吗?

解决方案

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

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

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

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

其他提示

我认为只要你使用一个好的实现,就可以将它们存储在数据库中。您可以阅读这篇较旧但很好的文章,了解如何防止数据库中的大量数据影响性能。

http://www.dreamwerx.net/phpforum/?id=1

我已经在mysql数据库中加载了100多个演出而没有任何问题。设计和实施是关键,做错了,你会受苦。

更多数据库优势(尚未提及): - 在负载平衡的环境中更好地工作 - 您可以构建更多的后端存储可伸缩性

我已经在不同的项目中尝试过两种方式,我们最终决定使用文件系统也更容易。毕竟,文件系统已经过优化,可用于存储,检索和索引文件。

我要提到的一个提示是仅存储“根相对”。数据库中文件的路径,然后让您的程序或查询/存储过程/中间件使用特定于安装的根参数来检索文件。

例如,如果将XYZ.Wav存储在C:\ MyProgram \ Data \ Sounds \ X \中,则完整路径为

C:\MyProgram\Data\Sounds\X\XYZ.Wav

但是您将路径和/或文件名存储在数据库中:

X\XYZ.Wav

在其他地方,在数据库或程序的配置文件中,存储一个类似于SoundFilePath的根路径

C:\ MyProgram \数据\声音\

当然,从数据库路径中分割根的位置取决于您。这样,如果移动程序安装,则不必更新数据库。

此外,如果要有 lot 的文件,找到一些散列路径的方法,这样就不会有一个包含数百或数千个文件的目录(在我的小例子中) ,有基于文件名的第一个字符的子目录,但你可以更深入或使用随机哈希)。这使得搜索索引器也很开心。

优点是使用数据库:

  • 容易加入的声音文件的其他 数据位。
  • 避免文件i/o操作 旁路数据库的安全。
  • 没有必要的分离操作 删除的声音文件在数据库 记录被删除。

缺点采用一个数据库:

  • 数据库膨胀
  • 数据库可能更加昂贵,比文件系统

您可以将它们存储为BLOB(或LONGBLOB),然后在您想要实际访问媒体文件时检索数据。

您只需将媒体文件存储在驱动器上,然后将元数据存储在数据库中。

我倾向于后一种方法。我不知道这是如何在全世界范围内完成的,但我怀疑其他许多人会这样做。

您可以存储链接(数据的部分路径),然后检索此信息。可以轻松地在驱动器上移动并仍可访问它。

我存储数据库中每个文件的相对路径以及有关文件的其他元数据。如果我需要将实际数据重新定位到另一个驱动器(本地或通过UNC路径),则可以动态更改基本路径。

我就是这样做的。我相信其他人也会有想法。

一些优点是使用斑点储存文件

  • 降低管理费用使用的一个工具的备份/复原等
  • 不可能为数据库和文件系统将同步
  • 事务的能力(如需要)

有些缺点

  • 爆炸数据库服务器'RAM与无用的垃圾它可以使用存储排、索引等等
  • 使得数据库的备份非常大,因此低的可管理
  • 不方便的一个文件系统服务的客户(例如有一个万维网服务器)

怎么样的性能吗?你的里程可能会有所不同。文件系统极为不同,因此数据库在他们的性能。在某些情况下,一个文件系统将赢得(很可能用较少的较大文件)。在某些情况下,数据库可能更好(也许用一个非常大的数量的短小文件)。

在任何情况下,不要担心做什么,似乎最好的时候。

一些数据库提供一个建立在网络服务器服务的斑点。在编写本报告时,MySQL不。

将它们存储为外部文件。然后将路径保存在varchar字段中。将大型二进制blob放入关系数据库通常效率非常低 - 它们只占用空间并且因为填充缓存无法使用而导致速度变慢。并且没有什么可以获得的 - 斑点本身无法被搜索。您可能希望将媒体元数据保存到数据库中。

一个简单的解决方案是将文件的相对位置存储为字符串,然后让文件系统处理它。我已经尝试过一个项目(我们将办公室文件附件存储到调查中),它运行良好。

存储音频/视频文件的最佳方式是,您可以使用本地或云端的任何分布式存储。

https://min.io/

for cloud: AWS S3

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top