#mysql
#mysql
Вопрос:
TL; DR далее.
Я пишу PHP-скрипт, который использует cURL для получения информации об игроке с игрового сайта (Tibia, если кому интересно) и сохранения ее в базе данных.
Информация об игроке, которую я сохраняю, — это имя игрока, сервер, уровень, призвание, время входа и выхода из системы. Эта информация будет использоваться для составления списков рекордов по увеличению уровня игрока, времени в Сети и т.д.
Я уже создал два прототипа этого скрипта. Первый проверяет онлайн-список сервера и создает новую строку для каждого онлайн-игрока в каждом цикле скрипта. Это создает много строк, и размер базы данных очень быстро выходит из-под контроля, но с данными действительно легко запускать запросы mysql.
Другая версия скрипта проверяет онлайн-список сервера, но вставляет новые строки только в том случае, если игрока еще нет в базе данных или он повысил уровень с момента последнего цикла скрипта. Новые строки создаются с пустым столбцом метки времени «SessionEnd». Когда цикл скрипта замечает, что игрок вышел из системы, столбец «SessionEnd» будет заполнен соответствующей меткой времени.
Проблема в том, что для этого мне приходится сравнивать все строки незаконченных сеансов из базы данных с текущим списком онлайн-игроков (с веб-сайта), а это замедляет работу скрипта и заставляет мой процессор плакать. Другая проблема заключается в том, что выполнение запросов, привязанных к онлайн-времени, усложняется по сравнению с другой версией, где я могу выполнить простой COUNT () на X player, чтобы получить онлайн-время. Однако при этом размер базы данных остается действительно небольшим.
TL; DR Каков наилучший способ хранения онлайн-времени пользователей?
id username loginTime logoutTime level
1 myuser 10:38 11:54 48
2 myuser 10:54 11:31 49
Или что-то подобное…
id username timestamp level
1 myuser 10:38 48
2 myuser 10:39 48
3 myuser 10:40 48
4 myuser 10:41 49
Комментарии:
1. Я бы сказал первое, но я бы сказал, что это также зависит от личных предпочтений.
2. Это больше зависит от типов запросов, которые вы собираетесь выполнять к данным. Попробуйте несколько из этих двух форм и посмотрите, какие из них в конечном итоге оказываются самыми простыми.
3. Спасибо вам обоим. Я думаю, что я выберу терабайтную версию из-за простоты. Это намного проще для моего процессора, а хранилище дешевое
Ответ №1:
Согласно ответам, кажется, что обе практики жизнеспособны.
Я думаю, что я собираюсь использовать путь с большим объемом памяти, удобный для процессора. Таким образом, намного проще запускать запросы к данным, и мой маленький ноутбук может выполнять многозадачность во время выполнения скрипта. Надеюсь, это кому-то поможет