Мне нужно перенести таблицу результатов игры из (не смейтесь, пожалуйста ...) * .ini database в таблицы SQL, так как я хочу перенести всю игру на базу MySQL.
Требуется хранить оценки пользователей в базе данных, чтобы иметь возможность получить таблицы результатов для общего промежутка времени / год / месяц / неделя / день. Это занимает каждый год: {оценка за год} + {оценка за месяц} * 12 + {оценка за неделю} * 52 + {оценка за день} * 360 = ~ 425 строк на пользователя + 1 строка {общая оценка} на пользователя. Это не чувствует себя оптимизированным, поэтому я здесь с этим вопросом.
Какую базу использовать? Упомянутый выше, является базой для временных интервалов, используя такую структуру:
{timespan type} {timespan} {user ID} {score for type 1} {score for type 1} {score for type 1} {score for type 2}
Еще одна вещь, которую я должен отметить. Существуют разные методы сортировки для разных типов оценок. Если первый тип - простой результат, где я беру наибольшее (больше - лучше), то второй тип - это скорость, где я сортирую по самой высокой скорости (меньше - лучше).
Если у вас есть вопрос: «Зачем разделять строки на недели / месяцы / годы / в целом?», То ответ таков: я хочу получить быстрый способ получить таблицу результатов, например, для счета последних недель типа 2, сначала 3 места.
Я думал, может быть, если я сохраню только {дневной счет}, избавлюсь от этих 426-360 = 66 строк на пользователя в текущей структуре, что приведет к новой структуре:
{user ID} {day number} {score for type 1} {score for type 1} {score for type 1} {score for type 2}
Как я выберусь "Первые 3 места за лучший результат в скорости на предыдущей неделе". Это займет несколько многоуровневых вычислений ...
- Запрос для строк с днями, которые входят в промежуток времени за предыдущие недели для ВСЕХ пользователей
- Суммируйте все оценки для каждого {идентификатора пользователя} или получите наименьшую оценку (в зависимости от типа оценки) и поместите в новую таблицу
- Запрос новой таблицы, сортировка по столбцу оценки ASC или DESC (в зависимости от типа оценки) и получение первых 3 строк
- Повторите шаги 2. и 3. для каждого столбца оценки
Если я хочу делать это более 1-3 раз в минуту (как после каждого нового ввода в таблице, мне нужно оценить, сколько очков конкретному пользователю нужно получить в более высоком положении, я полагаю, что это заняло бы некоторые серьезные серверные ресурсы. Что касается структуры, указанной в верхней части вопроса (база времени), то для каждого столбца оценки требуется только шаг 3.
Спасибо за ответы и предложения!
Текущий формат данных следующий:
Overall file: overall.ini
(in folder of yearnumber) Year file: 2011.ini
(in folder of yearnumber) Month files: m1.ini ... m12.ini
(in folder of yearnumber) Week files: n1.ini ... n52.ini
(in folder of yearnumber) Day files: m1d1.ini ... m12d1.ini
Данные хранятся внутри:
[~REZ~]
User13245325=1145 203.433 3 1.735
User3425435=1412 173.871 8 2
User32487854=18 76.253 1 11.016
User345645=2153 155.139 8 2.344
User65875=100 67.767 2 10.016
User453325=26 138.568 1 3.031
PS: Это общий вопрос, не связанный напрямую с разработкой игры, поэтому, пожалуйста, не выбрасывайте его в раздел разработки игр SO.