WebApi支持Range请求而不会多次查询db

时间:2018-05-13 08:20:57

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

目前我有一个提供视频服务的dotnetcore WebApi。视频作为varbinary(MAX)存储在SQL服务器表中。这是有效的,但我正在阅读,以支持IOS safari我们需要接受范围标题,所以我增加了对此的支持(我认为)。

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

1)每当调用此API时,CPU限制为100%。我只能假设是EntityFramework查询数据库中的25MB文件。似乎很疯狂,但API正在做什么?可以通过服务器研磨来改进它。

2)对请求了不同范围字节的API发出多个请求。然而,我的api反过来在每个请求上查询数据库,因此将CPU长时间发送到过载状态。

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

1 个答案:

答案 0 :(得分:1)

如果你问我,EF不太适合这个,它太笨重和资源消耗。您可以使用 substring 之类的东西编写自己的T-SQL。这就是说,从实际的角度来看,根据这些文件的数量和数量以及您拥有的用户数量,我不会采用这样的解决方案。

我认为SQL数据库不应该像这样存储数据。 你可以开始研究netflix如何做到这一点:https://www.techhive.com/article/2158040/how-netflix-streams-movies-to-your-tv.html

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