«Последователи» и эффективность - PullRequest
9 голосов
/ 29 июля 2010

Я разрабатываю приложение, в котором пользователи будут «следить» за действиями друг друга, в смысле Твиттера, но я не очень разбираюсь в разработке баз данных / запросов / эффективности.Существуют ли лучшие практики для управления этим, подводных камней, которых следует избегать и т. Д.?Я полагаю, что это может создать очень большую нагрузку на БД, если не будет сделано должным образом (или, может быть, даже тогда?).

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

Любой совет с благодарностью получен.Благодарю.

Ответы [ 4 ]

6 голосов
/ 29 июля 2010

Довольно просто и легко сделать с полной нормализацией .Если у вас есть таблица пользователей, каждый с уникальным идентификатором, у вас будет таблица TABLE_FOLLOWERS со столбцами USERID и FOLLOWERID, которая будет описывать всех подписчиков для каждого пользователя как отношение один-ко-многим.

Даже при миллионах ассоциаций на полуприличном сервере баз данных это будет работать хорошо и быстро, если вы используете хорошую базу данных (IE, а не MS-Access).

4 голосов
/ 29 июля 2010

Модель довольно проста.Проблема в размере таблицы Subscription ;если существует 1 миллион пользователей, и каждый подписывается на 1000, то таблица Subscription имеет 1 миллиард строк.

1 голос
/ 29 июля 2010

Вы, вероятно, должны прочитать http://highscalability.com/, и это статьи о том, как это управляется большими сайтами.

1 голос
/ 29 июля 2010

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

Для небольшого проекта я, скорее всего, проигнорирую базу данных, разработав приложение как простой объектмодель с User объектами, которые поддерживают List[followers].Сохраняйте все это в оперативной памяти для нормальной работы и используйте ORM для периодического сохранения в базе данных (вероятно, postgresql или mysql).

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...