Предоставление значков пользователям - PullRequest
4 голосов
/ 20 февраля 2012

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

Я структурировал базу данных, и я не был уверен, как соединить значки с пользователями.

Идея, которую я придумал, заключалась в создании 1 таблицы для пользователей, 1 таблицы для значков и 3-го подключения UserID к BadgeID:

Меня беспокоит оптимизация. Не замедлится ли доступ к таблице и поиск в записях, поскольку все больше пользователей присоединяются к сайту и получают значки?

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

TIA

Ответы [ 2 ]

5 голосов
/ 20 февраля 2012

Не станет ли доступ к таблице и поиск записей медленным, поскольку все больше пользователей присоединяются к сайту и получают значки?

Не существенно, если ваши таблицы проиндексированы должным образом.

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

Не совсем;поскольку энциклопедия проиндексирована в алфавитном порядке, поиск чего-либо не займет много времени, даже если количество статей значительно увеличится.Если бы он не был проиндексирован, то количество времени, которое потребовалось бы для поиска вещей, увеличилось бы экспоненциально с ростом размера энциклопедии.


Учитывая ваш вопрос и ресурсы, которые вы связали, я чувствуюкак если бы вы сосредоточились на «значках», вероятно, заставляя вас упустить более общую картину.

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

Попробуйте описать вашу проблему в терминах, связанных с базами данных или моделированием данных, а не в терминах, относящихся конкретно к вашей проблемной области («значок»).).Это должно помочь вам выяснить, какую информацию вы должны искать, и в конечном итоге приведет вас к правильному курсу действий.

1 голос
/ 22 февраля 2012

Пока что вы можете реализовать это так, как вы это описали (1 таблица бейджей, 1 таблица пользователей, 1 таблица отношений).

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

С таблицей отношений у вас будет возможность выдавать пользователю несколько значков одновременно (отношение 1: n), например, Значки Foursquare.

Вы должны использовать InnoDB, если вы используете MySQL.

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

...