2012-05-15 43 views
1

我在設計數據存儲模型並試圖在思考查詢過濾器如何工作時決定最佳方法。Google App Engine上的動態屬性與固定屬性查詢速度

最好如果我只寫出兩個例子。第一個例子是,如果我有一個固定的「性別」屬性,只有一個字符串可以設置爲「男性」或「女性」。

class Person(db.Model): 
    name = db.StringProperty() 
    gender = db.StringProperty() 

p1 = Person(name="Steve", gender="male") 
p2 = Person(name="Jane", gender="female") 
p1.put() 
p2.put() 

males = db.GqlQuery("SELECT * FROM Person WHERE gender = :1", "male") 

第二個例子是,如果該人實體是Expando模型和I動態地設置一個「is_male」或「is_female」動態屬性。

class Person(db.Expando): 
    name = db.StringProperty() 

p1 = Person(name="Steve") 
p1.is_male = True 
p1.put() 
p2 = Person(name="Jane") 
p2.is_female = True 
p2.put() 

males = db.GqlQuery("SELECT * FROM Person WHERE is_male = :1", True) 

現在讓我們說,我們收集數百萬條記錄,我們希望做一個查詢,這兩種方法中的一種以上的速度會更快生產谷歌App Engine上運行的Python 2.7?

+1

你是什麼意思動態屬性?您的第二個代碼片段看起來像沒有別的名稱保存到數據存儲區,那麼爲什麼您認爲您將能夠在該屬性上進行查詢? – aschmid00

+2

因爲它的擴展模型:https://developers.google.com/appengine/docs/python/datastore/datamodeling#The_Expando_Class – adam

+1

問題中的代碼沒有說:)我建議你更新問題以反映'一點細節 – aschmid00

回答

3

絕對沒有區別 - 模型在數據存儲中看起來是一樣的,無論該屬性是否爲「動態」。唯一的區別是沒有設置值的標準屬性類將在數據存儲中插入值爲None的字段,該字段會佔用一些額外的空間,但允許您查詢未設置該值的用戶。

相關問題