Это для предстоящего проекта. У меня есть две таблицы: первая отслеживает фотографии, а вторая отслеживает рейтинг фотографий
Photos:
+-------+-----------+------------------+
| id | photo | current_rank |
+-------+-----------+------------------+
| 1 | apple | 5 |
| 2 | orange | 9 |
+-------+-----------+------------------+
Ранг фотографий постоянно меняется, и вот таблица, которая отслеживает это:
Ranks:
+-------+-----------+----------+-------------+
| id | photo_id | ranks | timestamp |
+-------+-----------+----------+-------------+
| 1 | 1 | 8 | * |
| 2 | 2 | 2 | * |
| 3 | 1 | 3 | * |
| 4 | 1 | 7 | * |
| 5 | 1 | 5 | * |
| 6 | 2 | 9 | * |
+-------+-----------+----------+-------------+ * = current timestamp
Каждый ранг отслеживается для целей отчетности / анализа.
[Изменить] Пользователи будут иметь доступ к статистике по запросу.
Я разговаривал с кем-то, кто имеет опыт в этой области, и он сказал мне, что хранение рангов, как указано выше, - это путь. Но я не уверен еще.
Проблема здесь избыточность данных . Там будут десятки тысяч фотографий. Рейтинг фотографий меняется ежечасно (много раз - в течение нескольких минут) для последних фотографий, но реже для старых фотографий. При такой скорости таблица будет иметь миллионы записей в течение нескольких месяцев. А поскольку у меня нет опыта работы с большими базами данных, я немного нервничаю.
Я думал об этом:
Ranks:
+-------+-----------+--------------------+
| id | photo_id | ranks |
+-------+-----------+--------------------+
| 1 | 1 | 8:*,3:*,7:*,5:* |
| 2 | 2 | 2:*,9:* |
+-------+-----------+--------------------+ * = current timestamp
Это означает некоторый дополнительный код в PHP для разделения ранга / времени (и сортировки), но для меня это нормально.
Это правильный способ оптимизации таблицы для повышения производительности? Что бы вы порекомендовали?