2014-12-30 2 views
2

Im в процессе разработки приложения большого масштаба, которое будет содержать несколько таблиц с большим набором данных. (Потенциально 1M + строки). Это приложение будет игрой с несколькими пользователями, выполняющими задачи одновременно и будет очень интенсивным.MySQL Count/Sum Performance

В этом приложении данные будут агрегированы для статистики пользователей. Я придумал два сценария, чтобы достичь желаемого эффекта вычисления всех статистических данных.

Сценарий 1

Поддерживать отдельную таблицу для расчета статистики пользователей. Значение, когда движение обрабатывается, поле будет увеличиваться на единицу.

Table Statistics (Moves, Origins, Points) 
$Moves++; 
$Origins++ 
$Points = $Points + $Points; 

Сценарий 2

Граф и суммировать поля данных по мере необходимости во всех данных.

Table Moves (Points, Origins) 
SUM(Points) 
SUM(Origins) 
COUNT(Moves) 

Вопрос в том, какой из этих двух сценариев был бы наиболее эффективным для драйвера базы данных. Я считаю, что сценарий 2 может быть более эффективным, потому что будет гораздо меньше манипулирования данными, но я не уверен в нагрузке, которую эти запросы могут размещать в БД.

Я использую MySQL 5.5 InnoDB с UTF8 Charset

ответ

1

Лучшим маршрутом будет зависеть от частоты прочтений vs. пишет точки, происхождение и движение. Эти частоты, в свою очередь, будут зависеть от вариантов использования, стиля кода и использования (или отсутствия) кеширования.

Трудно представить квалифицированное мнение без каких-либо подробностей, но рассмотрим тот факт, что выделенная таблица приносит с собой дополнительные осложнения в виде дополнительных записей, необходимых для каждой операции, и обеспечения того, что эти данные должны всегда быть правильными (соответствуют данным базовой детали). В свете дополнительного усложнения хранение элементов логических данных один раз, а не дважды в реляционной базе данных, как правило, является наилучшим способом.

Если вы беспокоитесь о производительности и масштабируемости, вы можете рассмотреть нереляционный подход с использованием платформ баз данных, таких как Mongo или DynamoDB.