Кэширование столь же важно с MongoDB как с MySQL? - PullRequest
4 голосов
/ 02 июля 2011

Я пишу сервер запросов HTTP на C # для своей веб-игры и использую MongoDB для базы данных.Более эффективно все еще кэшировать все, что я могу в приложении C #?Или это просто сделать запрос в MongoDB для каждой вещи.Я ожидаю около десятка запросов выбора в минуту для каждого активного игрока и, возможно, один или два запроса сохранения / обновления в минуту.

Ответы [ 3 ]

6 голосов
/ 02 июля 2011

«дюжина запросов на выборку в минуту для каждого активного игрока» нам ничего не говорит.Чтобы иметь какое-либо отношение, нам нужно знать количество активных игроков, количество времени, которое занимает каждый запрос, структуру таблицы, используемые запросы (включая количество возвращаемых данных), статистику загрузки сервера и другие, такие какнапример, используете ли вы способность Mongo для защиты базы данных и т. д.

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

Имея эту информацию в руках, вы можете определить, нужно ли вам

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

Дело в том, что не стоит начинать кэширование в надежде на повышение производительности позже.Кэширование с такой же вероятностью может повысить производительность, как и убить ее, в зависимости от огромного количества факторов.


Еще одна вещь, которую необходимо добавить здесь.Если вы используете веб-ферму для размещения вашего сервера запросов, тогда сложность и затраты на оборудование, связанные с локальным кэшированием данных для каждого независимого веб-сервера, резко возрастают.

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

Сложность увеличивается при попытке синхронизировать кэшированные копии, чтобы они не устарели.Я полагаю, что игра потребует информации, которая на 100% актуальна.Такие сайты, как Facebook и другие, могут быть немного не синхронизированы.Когда игровой сервер не синхронизируется, это может отрицательно повлиять на удобство использования игроками.

Предполагается, что в настоящее время вы развертываете только один веб-сервер и один сервер БД, добавляя возможности кэширования , теперь .может причинить вам боль, если вы перейдете на несколько веб-серверов и / или несколько серверов БД.

Наконец, если по какой-то причине вы развертываете только на одной машине, на которой размещены база данных и веб-сервер, кеширование совершенно нелепо.

0 голосов
/ 04 июля 2011

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

0 голосов
/ 02 июля 2011

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

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