WebApi поддерживает запросы Range без многократных запросов к БД - PullRequest
0 голосов
/ 13 мая 2018

В настоящее время у меня есть dotnetcore WebApi, который обслуживает видео. Видео хранятся в таблице сервера SQL как varbinary (MAX). Это работало, однако я читал, что для поддержки сафари IOS нам нужно было принять заголовок диапазонов, поэтому я добавил поддержку для этого (я думаю).

Однако сейчас я замечаю две вещи (которые могут быть не связаны):

1) Каждый раз, когда выполняется вызов этого API, центральный процессор снижается до 100%. Я могу только предположить, что EntityFramework запрашивает БД для файла 25 МБ. Кажется сумасшедшим, но API больше ничего не делает? Можно ли это улучшить, так как сервер только перемалывает.

2) В API поступает несколько запросов с разными байтами диапазона. Однако мой API, в свою очередь, запрашивает базу данных при каждом запросе и, таким образом, отправляет процессор в перегрузку на длительный период.

Есть ли лучший способ обработки запросов диапазона при запросе большого объекта?

1 Ответ

0 голосов
/ 13 мая 2018

Если вы спросите меня, EF не очень подходит для этого, он слишком громоздкий и требует много ресурсов.Вы можете написать свой собственный T-SQL, используя что-то вроде substring .При этом, с практической точки зрения, в зависимости от того, сколько и насколько велики эти файлы и сколько у вас пользователей, я бы не пошел с таким решением.

Я не думаю, что SQLБаза данных должна быть, как вы храните свои данные для этого.Вы могли бы начать некоторое исследование того, как netflix делает это: https://www.techhive.com/article/2158040/how-netflix-streams-movies-to-your-tv.html

Вы, вероятно, хотите что-то подобное, систему CDN, какое-то кеширование.Ваш способ сделать это сейчас может сработать, пока вы его создаете, с одним или двумя пользователями, но если это API, используемый многими людьми, вы быстро обнаружите, что он не масштабируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...