Для моего браузера на основе игры Flex (для платформы Facebook), я использую PHP и MySQL для стороне сервера программирования и для сохранения данных (с использованием AMFPHP)Как реализовать кэширование на стороне сервера с помощью PHP
Так как я был очень новый и для разработки игр, и для PHP, и я хотел, чтобы моя игра работала, я написал все серверные кодировки (amfPHP-сервисы) с очень уродливым и грязным кодом, который попадает в БД для извлечения, обновляет состояние игры (включая игроков статистика и инвентарь).
Определенно, это неэффективно, поэтому я начал искать лучший способ, доступный в PHP для реализации кэширования. Кэшированием я имею в виду, что я не хочу постоянно ударять по БД, чтобы сохранить последнее игровое состояние игрока, но просто сохранить в конце сеанса (когда игрок покидает приложение).
Как правило, моя игра/приложение потока, как это
- Игрок запускает приложение/игру от FB
- Authentication
- нагрузки сеанса пользователя (ранее сохраненное состояние игры) .Это включает в себя выборку пользователю статистические данные, такие как количество энергии, монеты, опыт и т. д., у него есть свой инвентарь, текущие активные квесты и т. д., а также статическая информация, такая как рыночные позиции, предложения, падения и т. д.
- Обновить состояние игры, когда и когда произошли некоторые изменения в игре, чаще всего, когда пользователь нажимает на каком-нибудь здании собирать, потреблять энергию, добавлять монеты, давать опыт или награды и так далее.
Теперь есть несколько вещей, которые являются общими данными для всех игроков, таких как «рыночные позиции и их цены и графические активы и т. Д.», И есть конкретные данные игрока.
У меня есть идеи в моем сознании, и мне нужна помощь экспертов в том, что я думаю, хорошо или плохо, или если есть лучший способ?
Сохранять статические данные в кэше и иметь панель администратора для очистки/обновления. После аутентификации извлеките данные и сохраните их в кеше (как объекты JSON), а все чтение/запись до окончания сеанса сделать в кэш, после окончания сеанса, сохранить данные кэша в БД.
Здесь я хочу использовать APC. Считаете ли вы его надежным?
Я думаю, в худшем случае, когда веб-сервер выйдет из строя, все данные кэша будут потеряны, поэтому я решил сохранить их в сеансе, но я думаю, что PHP поддерживает их в файлах, что означает, что будет много I/O, что опять не рекомендуется? Или это будет приемлемо?
Я также думаю, насколько хорошо сохранять состояние игры в сериализованных объектах?
Я ожидаю, что около 30-50K одновременных пользователей играют в эту игру на пике. Будет ли БД по-прежнему целесообразным? Спасибо за NoSQL, но я, возможно, не выбираю для него, что может быть другим для меня. –
Количество одновременных пользователей не будет таким важным. Это зависит от количества транзакций БД, которые вы собираетесь получить ... Кроме того, в большинстве случаев системы БД масштабируемы. Таким образом, хотя ваш код может быть быстрее, чем один DB, он не будет масштабироваться, а также DB (где вы можете переключиться на кластер DB и т. Д.). – bummzack
@ dev2dev вы можете рассмотреть PostgreSQL (бесплатно), Oracle или MsSQL. Критические патчи производительности (например, оптимизатор запросов) находятся только в экспериментальных сборках MySQL на данный момент; такие вещи, как приличный оптимизатор и секционированные представления/таблицы, имеют большое значение, когда у вас действительно высокие масштабы. –