Проектирование социальной системы питания - PullRequest
0 голосов
/ 03 августа 2011

http://twitter.com/#!/ladygaga

Когда Ladygaga пишет в Твиттере 1 сообщение, означает ли это вставить 1 запись данных для КАЖДОГО из ее последователей (всего 12 221 751)?Итак, всего вставлено 12,221,751 записей?

Есть ли какие-либо подсказки при разработке такой системы социальных сетей?

------------------------------- Редактировать строку -------------------------------

Реальныйпроблема:

Выполнение SELECT твита ОТ твитов IN ([FollowIDs]) невозможно в движке приложений Google, который ограничивается максимум 30 элементами в предложении IN

В то время как в ядре приложения этона самом деле означает выполнение 30 запросов параллельно, что, пожалуй, не очень разумно.

Даже если мне разрешено преодолеть 30 ограничений, что, если я подписываюсь на 10000 человек?Я не уверен, есть ли какие-либо проблемы с производительностью, чтобы сделать это в MYSQL или любом другом виде инфраструктуры базы данных, используя «предложение IN» (большая таблица механизма приложений отличается от MYSQL)

Так что лучшеиспользовать предложение IN для запроса?или настройка таблицы UserFeed для хранения отношений подачи?или 3-й метод?

База данных / SQL гуру, пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 04 августа 2011

См. этот доклад из Google I / O 2009, чтобы узнать, как обрабатывать подобные случаи в App Engine с помощью структуры данных "разветвления".

0 голосов
/ 03 августа 2011

Вы можете себе это представить?

нет

у каждого есть список подписчиков

ID        |  FOLLOWER__ID
ladygaga  |  genesis
ladygaga  |  user

// php

$result = mysql_query("SELECT ID FROM followers WHERE FOLLOWER__ID = 'genesis';");
while($row = mysql_fetch_assoc($result)){
    $select[] = $row['ID'];
}

$tweets = mysql_query("SELECT * FROM tweets WHERE owner IN (".implode(",", $select).")");
...