我正在爲我的移動應用程序提供通知訂閱源,並且正在尋找關於某個問題的一些幫助。在GAE中創建通知類型訂閱源Objectify
該應用程序是一個Twitter/Facebook類似的應用程序,用戶可以發佈狀態,其他用戶可以喜歡,評論或訂閱他們。
我想要在我的應用程序中有一件事是讓用戶可以看到誰喜歡/評論他們的帖子或訂閱他們。
這個系統的第一部分我發現,當一個用戶喜歡/評論/訂閱時,一個Notification
實體將被寫入數據存儲,並提供關於該事件的詳細信息。要顯示用戶Notification
的所有我需要做的是查詢該用戶的所有Notification
,按日期創建desc進行排序,並且我們有其他用戶對特定用戶帳戶採取的操作的一個很好的小動作。
我遇到的問題是有人不喜歡帖子,取消訂閱或刪除評論時該怎麼做。目前,如果我要查詢該特定通知,則可能會由於最終一致性而從數據存儲區返回任何內容。我們可以想象有人喜歡,然後立即不喜歡一個職位(沒有這樣做的B/C?= P)。發現Notification
的查詢可能會返回null,並且在調用ofy().delete().entity(notification).now();
時沒有任何內容會被刪除。現在用戶在Feed中有一個通知,說Sally喜歡他的帖子,但實際上她喜歡,然後很快就不喜歡它了!
在這整個系統中的扳手的是,我不能Key<Notification>
刪除,因爲我真的沒有辦法知道Notification
的id
試圖刪除它時。
我正在試驗的潛在解決方案是不刪除任何Notification
s。相反,我會一直寫Notification
's,並簡單地指出通知是正面還是負面。然後在我的查詢中向特定用戶顯示通知,我可以以某種方式顯示總和爲正的Notification
。這也會在數據存儲上節省一些錢,因爲刪除實體很昂貴。
以及快速連續的喜好和取消頂你可以簡單地抖在客戶端上的行動,等待+/- 5秒鐘,直到結果趨於穩定,然後,只然後,將請求發送到服務器以執行實際的類似/不多於類似的持久性操作。 – konqi
@konqi好主意。仍然希望這個API系統堅實! – Micro
這同樣適用於服務器端,但可能需要一些memcache和任務隊列。或者你可以添加鎖定,比如說:如果你喜歡一個通知,你可以持續10秒,但是你需要的只是一個時間戳(也可能是一些memcache)。這也會減少你的數據存儲寫入... – konqi