Является ли Microsoft SQL Server достаточно быстрым для использования в качестве кеша для API? - PullRequest
0 голосов
/ 02 марта 2020

По сути, не вдаваясь в подробности, мне нужно создать API, который, насколько я могу судить, состоит из двух частей. Мне сказали, что к API могут обращаться до 30 000 одновременно работающих пользователей, поэтому моя главная задача - как мне сделать это достаточно быстро. Эти две части следующие:

  1. Будет сервер, который использует SDK для получения данных от третьей стороны. Какие именно данные не важны, но это будет постоянный поток данных. Теперь этот сервер будет принимать данные и помещать их в базу данных, которая будет использоваться в качестве кэша.

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

Я должен использовать. NET Ядро, чтобы построить этот проект, это не может быть изменено. Затем я подумал, что было бы неплохо использовать SignalR для доставки данных из кеша клиентам, так как это кажется вполне подходящим для этого. Но когда дело доходит до того, какую базу данных использовать для кеша, все становится немного размытым для меня. Сначала я хотел использовать Redis, и всякий раз, когда поступают новые данные, помещайте их в структуру данных потока в Redis. Вторая программа может подписываться на потоки блокирующим образом, и по мере появления новых данных отправлять их клиентам. Кажется довольно легко, но это не так. Тем не менее, я думаю, я мог бы заставить его работать, поскольку в Redis уже есть все, что мне нужно, чтобы сделать эту работу доступной с точки зрения команд.

Другое возможное решение - использовать старый надежный сервер Microsoft SQL для хранения данных, и используйте SqlDependency из Entity Framework, чтобы подписаться на конкретную таблицу и искать изменения. Хотя это кажется более элегантным, я боюсь, что это сильно повредит моей скорости, поэтому я работаю над поиском лучшей архитектуры. У меня есть опыт программирования меньше года (исключая то, что я делал в колледже). Я открыт для любых предложений. Я также думал о том, чтобы иметь более одной базы данных кеша для работы, но я даже не знаю, как это будет работать именно с точки зрения обновления кеша. Я серьезно заблудился здесь, так как раньше никогда не сталкивался с подобным размером.

...