2011-11-18 26 views
2

所以我在App Engine上有一個活動的Python應用程序,它有太多的自動索引。我注意到大量的數據存儲寫入的實體數量很低,我相信這是原因。每個實體都有很多StringProperties,有些甚至有StringListProperties。如何刪除App Engine中的自動索引?

我添加索引= False以我所有的對象的屬性(我不是每次使用查詢哪裏,這將關係):

someproperty = db.StringProperty(indexed = False)

還有什麼我需要新辦要索引的實體?我是否需要增加應用的版本ID?

我需要運行appcfg.py vacuum_indexes .嗎?

+0

如果您收到不需要的索引,可能需要查看數據模型和控制器。如果你的代碼中有最好的結構,那麼你可以避免出現問題。 –

+0

@Nicke我同意你的看法,那就是長遠目標。這簡直就是我可以輕鬆完成體面短期改善的一件事。 – smith324

回答

3

vacuum_indexes僅適用於index.yaml中定義的索引,對於自動索引,它足以設置indexed = False並上傳新版本。

您可以在寫入計數列中的開發服務器數據存儲頁面中看到索引爲False的設置的影響。

+0

我在生產服務器上看到了很大的改進(查看'Datastore Index Write Ops'),但是它位於開發服務器上的位置?我發現的最接近的是'Datastore Statistics',但這不是太有幫助 – smith324

+0

由於我理解不到的原因,GAE團隊決定只有開發者服務器纔會顯示這個值。 –

+0

但那就是我問的。我*不*在開發服務器(如本地計算機)上看到這一點,只有生產(如在谷歌託管環境中) – smith324

1

要擺脫現有的自動索引,您將不得不檢索每個實體並重新將它與indexed = False屬性重新組合。

如果你不這樣做,那麼自動索引將繼續存在。但是,您創建的新實體不會被添加到這些索引中。

+0

但是,有沒有什麼理由通過這種努力來擺脫舊索引,現在你不使用它?看起來你應該能夠保持獨立,除非它使用了大量需要恢復的空間。 –

+0

我認爲存儲空間是您在付出過多索引的情況下唯一支付的費用。 –