Когда мне нужен индекс для хранилища данных Google App Engine? - PullRequest
0 голосов
/ 09 апреля 2019

Я использую стандартное окружение Python 2.7 Google App для своего проекта со старым хранилищем данных (не NDB).

Я столкнулся со странным поведением пользовательского индекса хранилища данных.

У меня есть модель, подобнаяthis.

class EmailHistory(db.Model):
    code = db.StringProperty(required=True)
    account = db.ReferenceProperty(Account)
    group = db.ReferenceProperty(Group)
    ......

И я попытался получить объекты, используя запрос ниже.

q = EmailHistory.all().filter('account =', account).filter('code =', code).filter('group =', group)
lst = [e for e in q]

Я ожидал, что мне понадобится пользовательский индекс для этого запроса, так как я запрашиваю три свойства.(Насколько я понимаю, AppEngine создает встроенный индекс автоматически для каждого свойства, поэтому мне не нужно определять индекс для запроса одного свойства. Но если я хочу сделать запрос по нескольким свойствам, мне нужно будет определить собственный индекс)

Но когда я запускал его на локальном компьютере, он не генерировал пользовательский индекс автоматически.Более того, когда я запустил его на сервере движка Google App, у меня была возможность извлекать сущности без NeedIndexError.

У меня вопрос, когда хранилищу данных точно нужен пользовательский индекс?Я прочитал их официальную документацию, но не понял, почему мне не нужен пользовательский индекс для запроса выше.https://cloud.google.com/appengine/docs/standard/python/datastore/indexes

1 Ответ

1 голос
/ 09 апреля 2019

Облачное хранилище данных может выполнять запросы, в которых может использоваться объединение слиянием.Вы можете найти более подробную информацию на https://cloud.google.com/appengine/articles/indexselection.

На https://cloud.google.com/appengine/docs/standard/python/datastore/indexes#index-configuration, он говорит: «Эти предопределенные индексы достаточны для выполнения многих простых запросов, таких как запросы только на равенство и простые запросы неравенства».Ваш запрос является запросом только на равенство.

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