Как сделать эффективную схему Google-App-Engine с большим количеством BooleanPropertys - PullRequest
1 голос
/ 26 декабря 2010

Я создаю приложение GAE, в котором есть объекты с множеством логических свойств.Я хочу, чтобы можно было осуществлять поиск по этим свойствам, делая запрос, подобный (в psuedo-sql): «получить элементы, где X1 = True, X2 = False, X3 = False и позволить X4-X7 быть либо истиной, либо ложью».

У меня есть модель, похожая на показанную ниже:

class JobModel(BaseModel):
  job_name      = db.StringProperty();
  part_time     = db.BooleanProperty();
  has_401k      = db.BooleanProperty();
  has_health_in = db.BooleanProperty();
  has_childcare = db.BooleanProperty();
  has_edu_reim  = db.BooleanProperty();

Проблема в том, что GAE требуется индекс для каждого возможного способа поиска этих логических значений.Так что если у вас есть 5 логических свойств, вам понадобится 32 различных индекса.Если у вас есть 20 логических свойств (в моем случае), вам нужно более миллиона индексов!

Должен быть лучший способ настроить эту схему хранилища данных, верно?

1 Ответ

4 голосов
/ 26 декабря 2010

Это может быть хорошей возможностью для StringListProperty.

Установка членства является сильной стороной ListProperty.

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

db.StringListProperty

has = ['401k:T', 'health_in:F', 'has_childcare:T']

GQL, где пункт

"WHERE has = '401k:T' and has = 'health_in:F'"

ListProperties требуютнекоторые усилия, чтобы понять их сильные стороны и применение.

Сериализация свойств списка хранилищ данных GAE

...