python - Django搭建类似YouTube的视频网站

标签 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 内存

240 GB Intel 730 Series SSD

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

用于缓存的 Memcached 1.45

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 模板框架。 如视频查看页、 channel 页、播放列表页、历史页、搜索页 我不会使用 Django 模板标签来填充任何信息。

03 创建api.py

使用 django rest 框架创建 Rest API 有了这个,我将获取并放置视频信息、元数据、喜欢、观看次数和其他更新。

04 JavaScript

通过Ajax 读取信息并动态渲染页面。 例如获取观看历史列表并使用缩略图呈现。在 html 页面中等。

请建议我构建具有视频上传进度、自动缩略图创建和重要视频压缩的视频上传页面的最佳方法。

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

到现在大约视频:5000+(平均时间 30 分钟)

用户:400 +

原始视频大小 - 4K、2K 和最小 1280*720

这种方法在性能和规模方面是否足够好?

最佳答案

这里有一些建议:

  • 我宁愿使用像 Ubuntu 这样的 Linux 服务器。

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

  • 在流式传输 4K 等高质量视频时,您应该关注将用于提供文件的服务器。我的意思是制作一个网站来显示一些包含视频播放器的内容不会有太大挑战,而文件服务器可能是因为文件服务器承担了繁重的工作。

  • 我建议你做一些后台任务来处理文件。比如将它们移动到另一台服务器(或直接将视频上传到另一台服务器),如果您需要像 youtube 那样从视频文件中创建多个分辨率,则需要另一台服务器来执行此操作以及一大堆代码来处理它你。

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

  • 我认为 Nginx 很适合您的文件服务器。

  • 设置一些限制,使用户/机器人无法同时上传太多视频。这在当时可能会导致沉重的负担。

  • 制作一个队列来处理作业,不要一次完成所有作业或在它们上传后才处理,等待正确的时间处理文件,这样您就不会在查看时间时使您的服务器崩溃.

  • 如果预算充足,可以选择JW播放器。

  • 我会选择 PostgreSQL 而不是 MySQL。它也被 Django 建议,并且您有一些 MySQL 上不可用的功能。

如果您正在考虑扩展,可以考虑这些建议。但是你提到的数字可以用更少的东西来实现。这些数字并没有那么大,所以处理起来并不难。

以后想到什么再写。

关于python - Django搭建类似YouTube的视频网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47958607/

相关文章:

javascript - Django - 为 dygrapgs 生成 csv

python - 是否可以将 gevent 执行池与 Celery beat 一起使用?

python - win32file.createFile "The System cannot find the specified path"

mysql - 加载数据文件错误: data too short for column

mysql - INSERT 然后 SELECT 插入的行

php - 使用 Zend Server CE 连接到 mysql

python - 如何处理 'dict' 对象没有属性 'META' ?

python - 基于条件的嵌套循环的字典理解

Python:测试一个值是否存在于 defaultdict 列表中

python - 在 tkinter GUI 中使用 for 循环在新行中列出项目