2013-11-22 6 views
2

У меня возник вопрос о GAE NDB - Index.Google App Engine - NDB - INDEX Quesions

  1. Я предполагаю, что вы можете указать индекс через index.yaml или в определении модели с использованием опции свойства, indexed = true. Я прав? Если да, то предпочтительнее другого?
  2. Есть ли способ добавить/удалить индекс в течение жизненного цикла объектов данных?
  3. Могу ли я указать индекс в поле структурированного свойства? Если да, то можете ли вы, пожалуйста, сообщить мне ** в качестве синтаксиса для этого?

Заранее спасибо

ответ

3

По умолчанию индексируются свойства, которые могут быть проиндексированы (т. Е. Те, которые не являются вариантами Blob), что означает, что вы можете их фильтровать или сортировать самостоятельно. Добавление индексов уникальной собственности в index.yaml было бы необычным. Установка indexed = False для свойства будет означать меньшее количество операций записи при сохранении объектов, но будет означать, что фильтрация или сортировка по свойству больше невозможны. Я бы предложил прочитать documentation on indexes.

Если вы хотите отфильтровать или отсортировать (в сочетании) более чем с одним свойством, то вам необходимо включить их в index.yaml. Однако при запуске кода на сервере разработки, если для него требуется индекс, который еще не указан, то index.yaml будет изменен, чтобы содержать подходящий индекс для выполняемого запроса. Добавление индексов вручную не обязательно то, что вам когда-либо понадобится.

Вы не можете индексировать весь StructuredProperty, свойства структурированных свойств индивидуально индексируются и не нужно думать о них иначе, чем для обычных свойств. Если вы хотите вручную указать индекс нескольких свойств, который включает в себя суб-свойство, тогда вы должны это сделать, используя свойство property.subproperty (например, 'address.city').

+0

Спасибо! Удивительное объяснение! – user2667409

1

s1) Да, вы можете установить некоторые свойства, как индексируется. Некоторые типы свойств не позволяют индексировать вообще. Предпочтительно устанавливать индексы программно в рамках каждого определения модели.

2) Хотя вы можете программно отказаться от индекса (т. Е. Удалить индексированный = True), я бы не рекомендовал его. Он оставит ваше хранилище данных в несовместимом состоянии.

3) Невозможно установить индекс для структурированного свойства, однако вы можете установить связь между моделью и моделями в структурированном свойстве.

См:

"Вы можете указать обычные варианты свойств для структурированных свойств (кроме проиндексированы)."

+0

Спасибо. Я запутался, где в документе говорится, что пул структурированной собственности можно индексировать. Я понял, что это означает все структурированное свойство, а не отдельный элемент. – user2667409

Смежные вопросы