2016-01-03 30 views
2

我知道您應該在實體模型中的所有屬性中添加@Index以添加索引,但如果您忘記並且已經存在在數據存儲中寫入實體?將索引添加到Google App Engine上已存在於數據存儲中的實體屬性

有沒有辦法通過開發人員控制檯或其他方式手動將索引添加到所有這些屬性?

我發現如果您將@Index添加到您的實體並重新部署該項目,則該實體的所有新寫入都會將該屬性編入索引。但是,該屬性的所有現有寫入都不會被編入索引(因此不可測量)。

回答

0

將實體寫入數據存儲時更新索引。爲了確保現有實體的索引得到更新,一種方法是讀取每個實體並將其寫回到成本高昂的位置,但是可以批量執行(例如在計劃任務中)。

你沒有提及你正在使用哪種語言 - 我知道這不是Python,因爲那裏沒有@index。在Python中,當我使用新索引更新index.yaml並上傳它時,App Engine負責爲我進行重新索引(可能需要相當長一段時間,但它確實會「自行發生」)。

無論您喜歡什麼語言,您都可以利用Python運行時的功能,因爲App Engine允許應用程序(共享相同數據存儲區)的各個模塊使用不同的語言 - 只需在Python中添加一個模塊,在Python的ndb中複製模型,並像使用全Python應用程序一樣使用index.yaml ......這應該可以很好地工作,唯一的困難是「在內部挖掘」您使用的任何圖層數據存儲頂端(物化,或其他)以Python術語對您的模型進行逆向工程。

+1

afaik java還自動重新編譯現有實體(24小時內) –

+0

@ZigMandel這是新的,這是在哪裏記錄的?這是免費的嗎? – marcadian

+0

@marcadian,在https://cloud.google.com/appengine/docs/java/config/indexconfig中記錄爲「如果在上載應用程序時啓用了自動索引配置,則AppCfg同時使用datastore-indexes.xml和數據存儲-indexes-auto.xml來確定哪些索引需要在生產環境中爲您的應用程序構建。「然而,這並沒有提及24小時的時間,也沒有涉及計費問題,所以我會推遲Zig Mandel的這兩個方面。 –

相關問題