App Engine Datastore + социальное приложение - структурирование и поиск разреженной матрицы N-D - PullRequest
2 голосов
/ 16 ноября 2009

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

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

Есть идеи? Вы решили подобные проблемы?

1 Ответ

1 голос
/ 16 ноября 2009

Попробуйте использовать низкоуровневый API хранилища данных с идентификатором элемента в качестве ключа и идентификаторами «друзей» в качестве имен свойств (в данном случае значение свойства равно true или false). Я думаю, что поиск с ключевым фильтром должен быть довольно быстрым.

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