2016-09-27 95 views
1

我使用的設計模型,我不知道是完全正確的,所以我想也許我應該提出一個問題,找出最好的方法去做。 我創建了一個基礎機構有兩個領域,如:Objectify實體模型設計

 public abstract class BaseEntity 
    @Index private Key<User> createdBy; 
    @Index private DateTime creationDate = new DateTime(); 

現在我也有另外一個子類中調用用戶有自己的指標,例如:

 @Entity 
    @Cache 
    public class user extends BaseEntity 
    @Index private String email ; 
    @Index private String dob 

現在,當我寫我的數據存儲的索引。 xml文件是這樣做的:

<datastore-index kind="User" ancestor="false" source="manual"> 
    <property name="createdBy" direction="asc"/> 
    <property name="creationDate" direction="asc"/> 
    <property name="email" direction="asc"/> 
    <property name="dob" direction="asc"/> 
    </datastore-index> 

     or 

    <datastore-index kind="User" ancestor="false" source="manual"> 
    <property name="email" direction="asc"/> 
    <property name="dob" direction="asc"/> 
</datastore-index> 

謝謝。

回答

1

在雲數據存儲中,您需要的索引完全依賴於要運行的查詢,而不是數據模型。文檔中的index definition部分非常有用。例如,如果你想運行查詢:

Query<User> q = ofy().load().type(User.class) .filter("email", "[email protected]").order("createdDate");

你需要的指數:

<datastore-index kind="User" ancestor="false" source="manual"> <property name="email" direction="asc"/> <property name="createdDate" direction="asc"/> </datastore-index>

無論你上市將滿足查詢(即使該指標的第二個指數中列出的屬性是必要指數中列出的屬性的超集)。

您應該使用App Engine development server運行您的應用程序,並運行您需要應用程序在生產服務中運行的任何查詢。這將自動生成一個datastore-indexes-auto.xml,其中包含完全服務這些查詢所需的索引。

+0

非常感謝。在發佈問題後將其配置出來 –