【问题标题】:WebApi supporting Range requests without querying the db multiple timesWebApi 支持 Range 请求,无需多次查询数据库
【发布时间】:2018-10-23 03:49:48
【问题描述】:

目前我有一个提供视频的 dotnetcore WebApi。视频以 varbinary(MAX) 形式存储在 SQL 服务器表中。这是可行的,但是我读到要支持 IOS Safari,我们需要接受范围标头,因此我添加了对此的支持(我认为)。

但是现在我注意到两件事(可能无关):

1) 每当调用此 API 时,CPU 都会限制到 100%。我只能假设是 EntityFramework 查询 db 的 25MB 文件。看起来很疯狂,但 API 什么也没做?随着服务器的磨合,这是否可以改进。

2) 向 API 发出多个请求,请求的范围字节数不同。然而,我的 api 反过来在每个请求上查询数据库,从而使 CPU 长时间处于超速状态。

在查询大对象时是否有更好的方法来处理范围请求?

【问题讨论】:

  • 如果内容是一段时间内不会更改的视频,请尝试使用缓存或内存数据库。

标签: entity-framework asp.net-web-api .net-core


【解决方案1】:

如果你问我,EF 并不是很适合这个,它太笨重并且消耗资源。您可以使用类似 substring 的方式编写自己的 T-SQL。话虽这么说,从实际的角度来看,取决于这些文件的数量和大小以及您拥有多少用户,我不会采用这样的解决方案。

我认为 SQL 数据库根本不应该是您存储数据的方式。 你可以开始研究一下 netflix 是如何做到的:https://www.techhive.com/article/2158040/how-netflix-streams-movies-to-your-tv.html

您可能想要类似的东西,CDN 系统,某种缓存。您现在的做法可能会在您构建它时使用,只有一两个用户,但如果这是一个被很多人使用的 API,您很快就会发现它无法扩展。

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多