2015-10-02 3 views
0

Я использую Parse в качестве бэкэнд для приложения, над которым я работаю. Мне было интересно, есть ли оптимальный алгоритм для запроса только «невидимых» новых объектов.Оптимизация Parse для запроса новых объектов

То, что я планирую делать, это нечто вроде добавления пользователя в отношение рассматриваемого объекта и последующего запроса всех объектов, чтобы проверить отсутствие пользователя. Кажется, это O (n * все пользователи, которые видели «n»), что слишком много.

Другой способ сделать это - добавить объект к ключу пользователя «видно» и затем запросить все объекты, которые пользователь не видел.

Возможно, более эффективным способом может быть (при условии, что я рассматриваю эти объекты в хронологическом порядке), чтобы отметить первый и последний объекты, которые я вижу, и показывать их только до или после этих точек с помощью ключа createdAt. Тогда я предполагаю показать новые объекты из этих точек, чтобы не делиться на несколько запросов.

В идеале я хотел бы перетасовать объекты, но я также хотел бы, чтобы этот алгоритм был максимально эффективным.

+0

Попробуйте подход даты и посмотреть, как она идет – Wain

ответ

0

Создать класс под названием Вид. Каждый вид состоит из уникального идентификатора из видимого объекта (не может быть OBJECTID) и указателя на пользователя, который просматривал объект.

Ваш запрос должен быть:

//(Simple equalTo query) 
Query1 = All View Objects where User pointer = User 

//(whereKey:that-unique-id-column doesNotMatchKey:that-unique-id-column inQuery:Query1) 
Query2 = All viewable Objects where not included in pointers in Query1 
+0

у меня есть несколько вопросов в этом подходе. Вы хотите создать указатель в классе View для каждого пользователя, который просматривает объект, или только одно отношение для каждого представления, содержащее все указатели пользователя? (сколько пользователей могло бы использовать это, не нажимая ограничение Parse.com на 128 КБ для PFObject?) Также для класса «Вид» почему я не могу использовать объект viewableObject? Затем сделайте 'все видимые объекты whereKey: objectId doesNotMatchKey: viewObjectId inQuery: Query1' где' viewObjectId' для каждой строки 'viewableObject.objectId' –