2011-11-23 39 views
0

Message類我有一個消息模型,我希望它有幾個接收器,可能是他們中的很多。 我還希望能夠告訴每個接收者消息是否被查看(未讀/未讀)。另外我希望接收者能夠刪除該消息。谷歌應用程序引擎:採用列表屬性接收機

兩個可能的解決方案是下文中,對每個I有一個消息模型的用戶模型。

  • 對於第(使用這裏http://www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html提出的思想)

    我有具有包含將接收該消息和父設置爲消息中的用戶的ListProperty一個MessageReceivers類。我查詢這與messages = db.GqlQuery('SELECT __key__ FROM MessageReceivers WHERE receivers = :1', user)和做一個db.get([ key.parent() for key in messages ])

    我有這是我不知道如何將狀態存儲郵件的問題:無論是閱讀還是不和後續問題的用戶是否有新郵件。另外一個問題是刪除消息的開銷(必須移除接收器列表屬性的用戶)

  • 對於第二個:我有一個的messageReceiver對於每個接收器具有指向消息和對用戶和還存儲狀態(讀/未讀)。

這兩個接近的哪一個你認爲它有更好的性能?而在第一種情況下,您是否有任何關於處理郵件狀態的建議。

回答

1

我在生產中實現了第一個選項。缺點是如果使用自定義索引,則ListProperty限制爲2500個條目。無恥插頭:請參見我的博客博斯特http://bravenewmethod.wordpress.com/2011/03/23/developing-on-google-app-engine-for-production/

讀取狀態存儲。我通過實現一個實體來實現這一點,該實體在幾個月前存儲未讀消息,然後只是假設較舊的消息被讀取。更簡單的是以日期順序查詢消息,並將最後一個已知消息時間戳存儲在實體中,並假定所有較舊的消息都是已讀取的。我建議不要在擁有巨大列表屬性的實體中保留悠久的歷史,因爲閱讀和存儲這些實體可能會變得非常慢。

消息刪除是昂貴的,沒有辦法繞過。

0

如果你需要存儲每封郵件的狀態,最好的選擇是寫收件人每一個實體,具有讀取狀態(和別的,比如標誌,等等),而不是使用索引的關係模式。