Как свойства списка влияют на индексные записи для каждой сущности в Google App Engine?
Я знаю, что существует ограничение в 5000 записей индекса на объект, что означает, что я не могу делать такие вещи:
class Foo(db.Model):
x = db.ListProperty(int)
y = db.ListProperty(int)
foo1 = Foo(x = range(5001))
foo1.put()
Кроме того, если у меня есть индекс в index.yaml
- kind: Foo
properties:
- name: x
- name: y
тогда я также вижу из этой темы:
http://groups.google.com/group/google-appengine/browse_thread/thread/d5f4dcb7d00ed4c6
что я не могу сделать это:
foo2 = Foo(x = range(100), y=range(100))
foo2.put()
потому что это даст мне 10000 записей индекса.
Однако мой вопрос: если у меня нет записей в index.yaml для Foo, попробуйте:
foo3 = Foo(x = range(100), y=range(100))
foo3.put()
это все еще вызовет исключение "BadRequestError: слишком много проиндексированных свойств для объекта"? Судя по моим тестам, это не вызовет никаких ошибок. Это правильно? Сколько индексных записей будет в foo3 в этом случае? Это 200 (сумма длин каждого списка)? Или что-то другое?
1 ответ
Вы правы - это не вызовет никаких исключений и создаст 200 записей индекса.
Для составных индексов это работает так, что для каждой уникальной комбинации значений создается одна строка индекса, в то время как встроенные индексы создают по одной строке индекса на значение - это эквивалентно определению отдельного индекса с одним свойством для каждого свойства в вашем модель.