Google Code предлагается на следующих языках: English – Español – 日本語 – 한국어 – Português – Pусский – 中文(简体) – 中文(繁體)
Хранилище App Engine использует индексы для всех запросов, выполняемых приложением. Эти индексы обновляются при каждом изменении объекта, поэтому можно быстро получить результаты запросов приложения. Для этого хранилищу данных должно быть заранее известно, какие запросы будет выполнять приложение. Необходимые индексы указываются в файле конфигурации. Сервер разработки может автоматически создать конфигурацию индекса хранилища данных в ходе тестирования приложения.
Конфигурация индексов хранилища данных задается в файле datastore-indexes.xml, находящемся в каталоге WEB-INF/ в WAR приложения. Это XML-файл, корневой элемент которого представлен тегом <datastore-indexes>. Он содержит нуль или более элементов <datastore-index>, каждый из которых представляет индекс, который должен поддерживать App Engine.
Как описано в статье Запросы и индексы, индекс представляет собой таблицу значений для определенного набора свойств объектов определенного типа. Все столбцы значений свойств отсортированы в порядке возрастания или убывания. В конфигурации индекса указывается тип объектов, названия свойств и их порядок сортировки.
Вот пример конфигурации для двух индексов:
<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes
xmlns="http://appengine.google.com/ns/datastore-indexes/1.0"
autoGenerate="true">
<datastore-index kind="Employee" ancestor="false">
<property name="lastName" direction="asc" />
<property name="hireDate" direction="desc" />
</datastore-index>
<datastore-index kind="Project" ancestor="false">
<property name="dueDate" direction="asc" />
</datastore-index>
</datastore-indexes>
В элементе <datastore-indexes> задан атрибут autoGenerate, который указывает, должен ли этот файл рассматриваться вместе с автоматически созданной конфигурацией. См. раздел Использование автоматической конфигурации индекса далее.
Каждый элемент <datastore-index> представляет индекс. Атрибут kind задает тип объектов, которые нужно проиндексировать. Атрибут ancestor принимает значение true, если индекс поддерживает запросы, фильтрующие объекты по родителю группы объектов, в противном случае принимает значение false.
Элементы <property> в теге <datastore-index> представляют свойства объектов, которые нужно проиндексировать. Атрибут name представляет название свойства, а атрибут direction – порядок сортировки: по возрастанию (asc) или по убыванию (desc). Порядок элементов свойств задает порядок строк в индексе: строки сортируются по первому свойству, затем по второму и т .д.
Определять индексы, необходимые для запросов приложения, вручную достаточно утомительно, и при этом вы не застрахованы от ошибок. К счастью, сервер разработки может создать для вас конфигурацию индекса. Чтобы использовать автоматическую конфигурацию индекса, добавьте атрибут autoGenerate="true" в элемент datastore-indexes.xml своего файла <datastore-indexes>. Автоматическая конфигурация индекса также используется, если в приложении нет файла datastore-indexes.xml.
Если она включена, сервер разработки поддерживает файл datastore-indexes-auto.xml в каталоге WEB-INF/appengine-generated/, расположенный в WAR приложения. Если приложение, выполняемое на сервере разработки, пытается выполнить запрос к хранилищу данных, для которого нет соответствующего индекса в файлах datastore-indexes.xml и datastore-indexes-auto.xml, сервер просто добавляет необходимую конфигурацию в файл datastore-indexes-auto.xml.
Если включена автоматическая конфигурация индекса, при добавлении приложения на сервер AppCfg использует оба файла datastore-indexes.xml и datastore-indexes-auto.xml, чтобы определить индексы, которые нужно создать для приложения на App Engine.
Если в файле datastore-indexes.xml указан атрибут autoGenerate="false", сервер разработки и AppCfg игнорируют содержание файла datastore-indexes-auto.xml. Если приложение, выполняемое на сервере разработки, пытается выполнить запрос, для которого нет соответствующего индекса в файле datastore-indexes.xml, сервер разработки так же, как и App Engine вызывает исключение.
Желательно иногда перемещать конфигурацию индекса из файла datastore-indexes-auto.xml в файл datastore-indexes.xml, затем отключать автоматическую конфигурацию индекса и тестировать приложение на сервере разработки. Это упрощает поддержку индекса, освобождая от необходимости управлять двумя файлами, а также позволяет воспроизвести все ошибки, возникающие в случае отсутствия конфигурации индекса.