Как свойства списка влияют на индексные записи для каждой сущности в 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 записей индекса.

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

Другие вопросы по тегам