#php #mysql #xml #ajax #performance
#php #mysql #xml #ajax #Производительность
Вопрос:
должен ли я брать новые данные для моей карты мира ajax onlinegame (при перетаскивании / прокрутке) из моей базы данных mysql или лучше загружать данные из сгенерированного (и часто обновляемого) XML? (часто обновляется -> из-за присоединения новых игроков к игре / карте мира)?
другими словами: способен ли mysql не знать, что несколько тысяч игроков прокручивают карту мира (и, следовательно, запрашивают новые данные), или я должен использовать таблицу XML?
Ответ №1:
Лично я ненавижу XML.
Для вас это может быть подходящим инструментом для работы, но я просто собираюсь ответить на часть вашего вопроса «способен ли mysql на …» 🙂
ДА
Но это зависит от ваших навыков SQL. Как ускорить процесс?
- Держите сервер MySQL на той же машине, что и веб-сервер, чтобы избежать сетевого трафика.
- Используйте таблицы памяти, чтобы избежать ввода-вывода с диска.
- Разбирайтесь в SQL
- MySQL в конфигурации по умолчанию настроен на небольшие таблицы и небольшие объемы памяти, похоже, это подходит для вашего случая, но поэкспериментируйте и измерьте, чтобы увидеть, какая конфигурация работает лучше всего.
- Меньшее количество выборок / вставок / обновлений с большим количеством данных на запрос выполняется быстрее, чем большее количество выборок / вставок / обновлений с меньшим количеством данных на запрос.
Также обратите внимание, что если вы не кэшируете XML-файл в памяти, вы столкнетесь с проблемами блокировки XML-файла, замедляющими работу.
Ответ №2:
Обращение к базе данных почти всегда будет дороже обращения к файлу (из-за пересечения сети), но самым быстрым вариантом было бы сохранить набор данных / кэш в памяти (однако помните о потреблении памяти).
Ответ №3:
я думаю, mysql соответствует вашим потребностям.. вы также можете кластеризировать свои данные при нехватке системных ресурсов…
также могут быть интересны websockets для вас. может быть, вам стоит взглянуть на nodejs, с его помощью вы можете легко обрабатывать объединения новых пользователей (передавать новых игроков другим игрокам вместо извлечения данных из mysql
Ответ №4:
Возвращается ли ответ Ajax в виде XML или JSON? Если последнее, то зачем возиться с XML?
На моем месте я бы поддерживал данные в базе данных с помощью интеллектуального кэширования на стороне сервера (где вы можете выборочно аннулировать элементы кэша)