2012-10-31 21 views
2

使用Google App Engine,實體大小限制爲1 MB。假設我有一個博客系統,並且期望每篇文章有數千條評論,有些段落的篇幅很長。通常,沒有限制,您只需將所有評論與博客帖子存儲在同一實體中。但是在這裏,會有關於達到1 MB限制的擔憂。在Google App Engine中存儲評論的有效方法?

另一種可能的方式,雖然效率低得多,但是將每個評論作爲一個單獨的實體存儲,但這需要幾次,幾次讀取才能獲得所有評論,而不是隻讀一次,以獲得博客文章及其評論(如果他們在同一個實體中)。

什麼是處理這種情況的有效方法?

+0

將它們存儲爲獨立的實體並使用緩存來避免多次讀取並提高速度。 – kichik

+0

@kichik緩存似乎是一個不可靠的解決方案,不是嗎?也許更可預測,更穩定。如果由於某種原因,這些評論將從緩存中刪除,那麼最後我會在月底得到一個非常大的賬單 – Snowman

+0

從我的經驗來看,這是非常可靠的。但請不要聽我說,使用[appstats](https://developers.google.com/appengine/docs/python/tools/appstats)分析這兩個解決方案。 – kichik

回答

1

我有六點建議:

1)將註釋存儲在不同的實體中。使用NDB API,它具有緩存和遊標。因此,您可以限制每個視圖的查詢成本。您可以使用僅鍵值查詢,祖先和投影查詢進行快速訪問。見:https://developers.google.com/appengine/docs/billing

2)分開的實體使併發和索引更容易。

3)看看Search API和Prosepective Search API。如果您有很多評論,搜索將非常重要。由於搜索您應該使用單獨的實體進行評論,這使得訪問搜索結果變得非常簡單。

4)當您使用像mapreduce這樣的工具來分析註釋時,處理單獨的實體也是首選。

5)你可以隨時根據你的博客引擎和appstats的經驗進行優化。數據存儲是真正的瓶頸還是使用的實例數量。我不知道你的用例,但你也可以使用客戶端(瀏覽器)來優化和緩存結果。

6)那麼處理評論的第三方解決方案呢?看到這篇文章從尼克約翰使用Disqus javascript評論和搜索他的應用程序引擎博客引擎:http://blog.notdot.net/2009/10/Blogging-on-App-Engine-part-6-Comments-and-Search

2

如果註釋是線程,將它們存儲爲單獨的實體可能是有道理的。

如果評論可以作爲投票的目標,將它們作爲單獨的實體存儲是有道理的。

如果可以編輯註釋,將它們存儲爲單獨的實體可以減少爭用,避免必須對所有註釋進行悲觀鎖定,否則可能會導致上次編輯覆蓋之前編輯的風險。

如果您可以通過評論進行分頁,將它們存儲爲單獨的實體是有意義的,因爲多種原因,索引是唯一的。

相關問題