我认为像youtube这样的音乐流媒体网站必须使用分片数据库(基于视频类别等标准)来实现负载分配和高可用性。但对于这样的实时/流媒体,我认为从io / DB读取不会起作用。他们是否也将所有视频存储在内存中(例如在memcache集群中),或者只保留流行的视频?
最重要的是CDN是否也会缓存所有视频?例如: - 如果纽约用户一天观看了100万个视频,那么如果找不到视频,它们将被缓存在纽约CDN服务器上(比如对大小的一些约束) 然后只打网络服务器?
答案 0 :(得分:2)
视频文件是非常繁重的内容,显然它们存储在文件系统或某些软件层中,这些软件层就像文件系统一样工作。另一件事是如何存储视频元数据,用户信息,统计数据等。通常,这种系统使用不同的数据源和数据库。
例如,视频文件及其缩略图可以存储在文件系统中。元信息,如文件标题,描述,关键字,文件位置等 - 类似于键值存储(面向列的数据库)。这样的dbs很快,而且很容易扩展。 YouTube视频链接采用此格式www.youtube.com/watch?v=<code>
,其中代码是视频的唯一键。对于搜索,统计,计费等,显然他们使用了更适合这些目的的其他数据源。
根据这个post Youtube使用MySql数据库。但显然他们使用它有许多限制和调整选项,以实现良好的性能,可用性和可伸缩性。
CND就像是一种标准方法,如何处理高负荷的地理分布式静态流量。几乎所有大型云提供商(如AWS,Microsoft Azure等)都提供CND作为服务,您只需要配置CND。但是,当然你可以建立自己的,有很多解决方案。
因此,如果您想要实施自己的视频托管,则需要考虑如何存储视频和相关信息,如何处理流量等。对于简单的解决方案,它可以是简单的关系或文档数据库,文件系统+ CDN。