Django构建类似于YouTube的视频网站

时间:2017-12-24 06:46:46

标签: python mysql django django-models django-rest-framework

我正在尝试使用

构建视频上传,查看和分享网站

软件:

Django 1.11.8

Django Rest Framework 3.7.3

Python 3.6.3

后端数据库MySQL 5.7.19

HTTP服务器:Apache 2.4.27

mod_wsgi 4.5.22

WAMP server 3.1.0

HTML5

CSS3

Bootstrap 3.3.7

Javascript ECMAScript 5

服务器硬件信息:

Window 2012 server 至强处理器32 GB RAM

240 GB Intel 730 Series SSD

4 SAMSUNG 850 PRO 2.5" SSD 1TB(总计4TB)

Memcached 1.45 for caching

BACKEND': 'django.core.cache.backends.memcached.MemcachedCache

我担心性能和可扩展性。

我想分享我的方法,请纠正我如果我错了,或者你可以建议我更好的方式。

我已经在Django.contrib.auth.model>>用户上拥有默认用户数据库 并将使用相同的用户信息上传,喜欢,观看和与视频的其他互动

01。创建Model.py(这是示例)

    from django.db import models

    from django.contrib.auth.models import User


    class Channel(models.Model):
        name = models.CharField(max_length=100)
        subscribers = models.ManyToManyField(User, related_name='+', blank=True)
        creation_time = models.DateTimeField(auto_now_add=True)
        modified_time = models.DateTimeField(auto_now=True)


    class Subscription(models.Model):
        user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='+')
        channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
        notifications = models.BooleanField(default=True)


    class Playlist(models.Model):
        name = models.CharField(max_length=100)
        video = models.ManyToManyField('Video')
        user = models.ForeignKey(User, on_delete=models.CASCADE)


    class Category(models.Model):
        name = models.CharField(max_length=100)


    class ChannelSettings(models.Model):
        channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
        verified = models.BooleanField(default=False)

02创建View.py

渲染Html模板框架。 如视频查看页面,频道页面,播放列表页面,历史页面,搜索页面 我不会使用Django模板标签来填充任何信息。

03创建api.py

使用django rest框架创建Rest API 有了这个,我将得到并提供视频信息,元数据,喜欢,观点和其他更新。

04 JavaScript

通过Ajax读取信息并动态呈现页面。 例如,获取监视历史记录列表并使用缩略图进行渲染。在HTML页面中等。

请建议我使用视频上传进度,自动缩略图创建和重要视频压缩来构建视频上传页面的最佳方式。

有关我的视频上传网站的一般信息:

截至目前的近似视频:5000+(平均时间30分钟)

用户:400 +

原始视频尺寸 - 4K,2K和最小1280 * 720

这种方法对于性能和规模是否足够好?

1 个答案:

答案 0 :(得分:5)

以下是一些建议:

  • 我宁愿选择像Ubuntu这样的Linux服务器。

  • 播放列表有多个视频,所以我想你错过了那里。 (您使用ForeignKey而不是ManyToMany)

  • 当谈到像4K这样的高质量流媒体视频时,你应该专注于你将用来提供文件的服务器。我的意思是建立一个网站,只显示一些包含播放器的内容,这些视频不会成为您最难的问题,文件服务器将是因为它是最困难部分的文件服务器。

  • 我建议你做一些处理文件的后台任务。比如将它们移动到另一台服务器(或直接将视频上传到另一台服务器),如果你需要像youtube那样创建一个视频文件的多个分辨率,你需要另一台服务器来做这件事,并需要一堆代码来处理它你。

  • 我建议你写两个连接到一个数据库的不同项目(或者你可以在你的主项目上创建一个API),其中一个用来处理用户的东西并为你渲染网站,另一个处理文件。

  • 我认为nginx是文件服务器的理想选择。

  • 制定一些限制,以便用户/机器人无法同时上传过多视频。那可能会导致重负荷。

  • 建立一个队列来处理工作,不要一次完成这些工作,或者只是在他们上传后,等待合适的时间来处理文件,这样你就不会让你的服务器崩溃(s )在重载时间。

  • 如果您有预算,可以使用jwPlayer。

  • 我会选择PostgreSQL而不是MySQL。它也被django建议,你有一些在MySQL上无法使用的功能。

如果您正在考虑扩展,可以考虑这些建议。但是你提到的数字可以用更少的数量来实现。基本上这些数字并不大,所以它并不难处理。

如果有人想到后者,我会写更多。