My favorites | 中文(繁體) | Sign in
英文版或許有比此中譯版新的內容

Java 資料存放區索引設定

「應用服務引擎」資料存放區會為應用程式所建立的每個查詢編製索引。實體只要變更,這些索引即會更新,因此應用程式執行查詢時,能夠快速傳回結果。如要達成這個目標,資料存放區必須事先知道應用程式將執行的查詢。請在設定檔中指定應用程式需要的索引。當您測試應用程式時,開發伺服器將可以自動產生資料存放區索引設定。

關於 datastore-indexes.xml

您可以在應用程式 WAR 的 WEB-INF/ 目錄的 datastore-indexes.xml 檔案中,指定資料存放區索引的設定。這是一個 XML 檔案,其根元素為 <datastore-indexes>。這個檔案包含零或多個 <datastore-index> 元素,每個「應用服務引擎」維護的索引都有一個元素。

如「查詢和索引」中所述,索引是一個表格,內含特定種類個體的特定屬性值。每個資料欄的屬性值會依照遞增或遞減順序排序。索引的設定會指定實體的種類,以及屬性的名稱和排列順序。

下列範例會指定兩個索引:

<?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 屬性 (attribute),可控制是否要將這個檔案連同自動產生的索引設定一起納入考量。請參閱下方的「使用自動索引設定」。

每個 <datastore-index> 元素代表一個索引。kind 屬性 (attribute) 會指定要編製索引的實體類別。 如果索引支援的查詢會根據群組父系篩選實體,則 ancestor 屬性 (attribute) 為 true,否則為 false

<datastore-index> 中的 <property> 元素代表要編製索引的實體屬性。name 屬性 (attribute) 為屬性名稱,而 direction 屬性 (attribute) 為排列順序,其中 asc 表示遞增,而 desc 表示遞減。屬性元素的順序會指定索引的順序:資料列會依照第一個屬性、第二個屬性,以此類推進行排序。

使用自動索引設定

手動判斷應用程式的查詢所需的索引,不僅十分無趣,還很容易發生錯誤。幸運的是,開發伺服器可以為您判斷索引設定。如要使用自動索引設定,請將屬性 (attribute) autoGenerate="true" 新增至 datastore-indexes.xml 檔案的 <datastore-indexes> 元素。如果您的應用程式沒有 datastore-indexes.xml 檔案,也會使用自動索引設定。

啟用自動索引設定之後,開發伺服器會在應用程式 WAR 的 WEB-INF/appengine-generated/ 目錄中,維護一個 datastore-indexes-auto.xml 檔案。當開發伺服器的執行應用程式嘗試資料存放區查詢,但是 datastore-indexes.xmldatastore-indexes-auto.xml 中沒有對應的索引,則伺服器會將適當的設定新增至 datastore-indexes-auto.xml

上傳應用程式時,如果已啟用自動索引設定,AppCfg 會使用 datastore-indexes.xmldatastore-indexes-auto.xml 判斷「應用服務引擎」應用程式需要建置的索引。

如果您的 datastore-indexes.xml 包含 autoGenerate="false",開發伺服器和 AppCfg 會忽略 datastore-indexes-auto.xml 的內容。開發伺服器的執行應用程式執行查詢時,如果 datastore-indexes.xml 未指定查詢的索引,開發伺服器將擲回例外狀況,就像「應用服務引擎」一樣。

建議您有時可以將索引設定從 datastore-indexes-auto.xml 移至 datastore-indexes.xml,然後停用自動索引設定,並在開發伺服器中測試應用程式。如此一來,您不需要管理兩個檔案,即可輕鬆維護索引,還能確定您的測試會重製因為遺失索引設定而引發的錯誤。