Architecture 用于存储视频数据的关系数据库

Architecture 用于存储视频数据的关系数据库,architecture,filesystems,relational-database,system-design,Architecture,Filesystems,Relational Database,System Design,最近在面试一份工作时,有人问我,如果我正在构建视频流服务,我会使用什么存储系统来存储视频数据 我提出了一个解决方案,将实际视频存储在分布式文件系统(如HDFS/S3)上,并将视频的元数据(HDFS路径、共享权限等)存储在关系数据库表中。这对我来说很有意义,似乎是一个干净的解决方案。然而,面试官一直在问我为什么我们不能使用关系数据库来存储实际视频本身(作为blob数据)。我给了他一些我认为合适的理由——视频是文件,文件系统经过优化以更好地存储文件、文件系统缓存、读/写性能等。但他反对一切的理由是—

最近在面试一份工作时,有人问我,如果我正在构建视频流服务,我会使用什么存储系统来存储视频数据

我提出了一个解决方案,将实际视频存储在分布式文件系统(如HDFS/S3)上,并将视频的元数据(HDFS路径、共享权限等)存储在关系数据库表中。这对我来说很有意义,似乎是一个干净的解决方案。然而,面试官一直在问我为什么我们不能使用关系数据库来存储实际视频本身(作为blob数据)。我给了他一些我认为合适的理由——视频是文件,文件系统经过优化以更好地存储文件、文件系统缓存、读/写性能等。但他反对一切的理由是——“你也可以用数据库来实现这一点……”


视频作为文件而不是mysql数据库存储在磁盘上是否有明显的原因?

为了实现更好的可伸缩性,最好将视频文件存储在不同的存储上,以便更好地利用与数据库的连接。提供视频文件可能会使连接保持很长时间。使用这种方法,您可以使用单独的服务来服务实际的视频。更多的优点是,当您的服务必须以新格式提供视频时,当您将所有现有视频转换为新格式时,更新DB所需的时间将更少,因为您只需将链接添加到新格式的文件中。另外,在对数据库进行分片时,您永远不会知道哪个分片的负载更大,因此最好将存储添加到单个池中,而不是将存储添加到不同分片后面的不同池中

将视频保持在相同的数据库中对系统的可维护性来说是灾难性的