2012-05-14 4 views
0

У меня возникли проблемы с преобразованием заданной проблемы в эффективное решение для хранилища данных Google. Проблема заключается в следующем. У меня есть объект, определяющий отношения между двумя объектами, то есть что-то вроде этого:эффективный набор операций в хранилище данных google app engine datastore

struct Relation 
{ 
    Obj1 int 
    Obj2 int 

    // other data 
} 

Теперь я хочу, чтобы выполнить следующий запрос эффективным образом: для заданного множества объектов set = [obj1, obj2, obj3, obj4], я хочу, чтобы найти все объекты отношений с (E), для которого E.Obj1 ∈ set ∧ E.Obj2 ∈ set. Обратите внимание, что я не знаю этого заранее, поэтому я не могу предварительно скопировать все записи в наборе один раз. Есть ли способ представить эту проблему в хранилище данных, чтобы я мог эффективно извлекать все отношения, входящие в данный набор?

ответ

1

Эквивалентный запрос GQL: «SELECT * FROM Kind WHERE Obj1 IN: 1 AND Obj2 IN: 1», передавая в качестве первого параметра. К сожалению, запросы IN расширяются на один запрос для каждого термина, поэтому здесь происходит комбинаторный взрыв запросов - 16 запросов в случае набора из 4 элементов. На самом деле нет способа избежать этого со стандартным запросом.

+0

Конечно, я могу это сделать, но это точно не то, что я хочу :) – jessevdk

+0

@jessevdk К сожалению, нет волшебного рецепта, чтобы обойти его - вот как работает индексация. –

Смежные вопросы