Мы хотим реализовать "ленту новостей", где пользователь видит сообщения, широковещательно переданные ее друзьями, отсортированными с новейшим сообщением сначала. Но канал должен отразить изменения в ее друзьях список. (Если она добавляет новых друзей, сообщения от тех должны быть включены в канал, и если она удаляет друзей, их сообщения не должны быть включены.), Если мы используем pubsub-тестовый пример и присоединяем список получателя к каждому сообщению, это означает большое управление списками получателей сообщения, когда пользователи соединяют и разъединяют друзей.
Мы сначала смоделировали, публикуют - подписываются, "разветвляются" с помощью стандартных взглядов RDBMS. Это, казалось, работало сначала, но затем, начиная с работ оператора IN путем, которые это делает, мы быстро поняли, что не могли продолжить тот путь. Мы нашли презентацию Brett Slatkin с прошлых лет Google I/O, и мы теперь наблюдали ее несколько раз, но нам не ясно, как сделать это с "динамическими" списками получателя.
В чем мы нуждаемся, некоторые подсказки, как "думать" при моделировании этого.
Вставка ответа, полученного мной на этот вопрос, в группу Google для Google App Engine http://groups.google.com/group/google-appengine/browse_thread/thread/09a05c5f41163b4d# Автор: Ikai L (Google)
Пару мыслей:
удаление друзей - обычное дело? аналогично, добавление друзей - обычное событие? (Все относительно, относительно "чтений" ленты новостей)
Насколько я помню, единственный способ увеличить масштаб чтения - это записать данные несколько раз в людей потоков. Twitter делает это, насколько я помню, используя модель «в конечном итоге согласованную». Вот почему ваш фид не обновляется в течение нескольких минут при большой загрузке. Однако, по общему мнению, реляционная нормализованная модель просто не будет работать.
- движок Jaiku является открытым исходным кодом для вашего исследования: http://code.google.com/p/jaikuengine . Он работает на App Engine. Надеюсь, они помогают, когда вы рассматриваете дизайн.