IIRC, каждый пользователь Facebook может иметь 5000 друзей. Среднее значение составляет 130, но максимальное намного выше. Каждый из этих друзей может иметь «понравившийся» ноль или более сущностей, взятых из множества миллионов. Например, когда глядя на подмножество этих объектов, сгруппированных по N осям (например, по категории и размеру), как бы вы нашли те, которые понравились друзьям?
В GAE стоимость - это время вычислений, а не размер данных. Вы не можете во время поиска найти все записи любого друга в данной категории и размере. Вы можете добавить запись для пользователя, когда каждый друг выполняет действие, но это будет означать до 5000 записей данных каждый раз, когда друг что-то делает. Это много процессорного времени, даже в фоновом режиме. Вы также будете скучать по новым друзьям, пробующим приложение, которые были пропущены при начальном добавлении. Есть смысл попытаться разбить пространство на части, но друзья связаны между собой очень сложно для группирования.
Есть идеи? Вы решили подобные проблемы?