Как свойства списка влияют на записи индекса для каждой сущности в Google App Engine? - PullRequest
1 голос
/ 18 декабря 2010

Я знаю, что существует ограничение в 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()

, потому что это будетдайте мне 10 000 записей индекса.

Однако мой вопрос таков: если у меня нет записей в index.yaml для Foo, попробуйте:

foo3 = Foo(x = range(100), y=range(100))
foo3.put()

, которые все равно поднимут "BadRequestError: Слишком много проиндексированных свойств для исключения объекта?Судя по моим тестам, это не вызовет никаких ошибок.Это правильно?Сколько индексных записей будет в foo3 в этом случае?Это 200 (сумма длин каждого списка)?Или что-то еще?

1 Ответ

2 голосов
/ 20 декабря 2010

Вы правы - это не вызовет никаких исключений и создаст 200 записей индекса.

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

...