最近在面试工作时,有人问我如果要构建视频流服务,将使用哪种存储系统来存储视频数据。
我提出了一种解决方案,其中将实际视频存储在分布式文件系统(例如HDFS / S3)上,并将有关视频的元数据(HDFS的路径,共享权限等)存储在关系数据库表中。这对我来说很有意义,似乎是一个干净的解决方案。但是,面试官一直不停地问我为什么我们不能使用关系数据库来存储实际的视频本身(作为Blob数据)。我给了他一些我认为合适的理由-视频是文件,文件系统经过优化,可以更好地存储文件,文件系统缓存,读/写性能等。但是他对所有事情的反对是-“您可以使用数据库来做到这一点好...”。
是否有明确的原因,为什么视频可以更好地以文件而不是mysql数据库的形式存储在磁盘上?
答案 0 :(得分:2)
要获得更好的可扩展性,最好将视频文件存储在不同的存储中,以便更好地利用与数据库的连接。提供视频文件可能会使连接保持很长时间。通过这种方法,您可以拥有单独的服务来提供实际的视频。当您的服务必须以新格式提供视频时,将所有现有视频转换为新格式时,更新数据库将花费更少的时间,因为您只需将链接添加到新格式的文件中即可。同样,在分片数据库时,您永远不会知道哪个分片将具有更大的负载,将存储添加到单个池比将存储添加到不同分片后面的不同池更好。
将视频保留在同一数据库中对于系统的可维护性将是灾难性的。