2013-08-22 1 views
0

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

Моя конечная цель - использовать генерацию частых элементов, чтобы определить, какие комбинации героев являются самыми популярными и потенциально какие комбинации выигрывают чаще.

Я хотел бы иметь приложение, которое будет основано на Интернете, где пользователь вводит героев, выбранных противоположной командой, и героев, выбранных в данный момент вашей командой, и рекомендует выбирать героев. Этими героями будут те, которые чаще появляются в выигрышных играх против героев, выбранных противоположной командой.

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

У меня есть база данных MySQL, в которой есть таблица соответствия, таблица Hero и таблица MatchHero, которая содержит первичный ключ (MatchId, HeroId) и bool того, выиграл ли этот герой. В настоящее время эта таблица насчитывает около 26 миллионов записей. Проблема в том, что выборка данных может занять от 3 до 14 секунд в зависимости от количества записей (меньшее количество пользовательских выборов приводит к большему количеству записей).

Что было бы лучшим дизайном, чтобы позволить мне реализовать это, когда извлекать данные, и делать расчеты достаточно быстро для веб-приложения? Хранение таблицы в памяти? Я не слишком беспокоюсь о алгоритме генерации всего набора, поскольку у меня уже есть достойная производительность с априори. Может ли быть заранее рассчитано что-либо, связанное с генерацией частых элементов? Спасибо за вашу помощь!

ответ

0

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

Убедитесь, что вы действительно поняли, что Apriori.

Если вы вычисляете поддержку каждого набора элементов с помощью SQL-запроса, вы делаете это неправильно. Использовать 1 проход по базе данных для каждого набора предметов длина; то есть 1 проход для всех 1-предметов, 1 проход для всех 2-предметов, 1 проход для всех 3-предметов.

Основная идея Apriori - это не сложно, но многие люди не получают всех подробностей, а затем становятся намного медленнее, чем необходимо.

Смежные вопросы