2012-02-16 49 views
1

我正在Java/GAE上實現具有「跟隨」功能的iPhone應用程序。 此功能與Instagram類似,用戶可以關注其他用戶的活動。活動可以是發佈新照片,喜歡照片,關注其他用戶等。在GAE上高效實現「跟隨」功能

假設我們有兩個實體:Follow和Event,它們都具有對用戶ID的引用。

所以我在考慮在哪裏可以列出目標用戶的事件使用OR查詢。但GAE不支持OR查詢,並且發出單獨的查詢也是低效的,因爲查詢的數量可能非常大(例如100+以下是常規)。

這樣做的常見做法是什麼?

+0

你能列出了不允許使用的OR查詢,以及單獨的查詢是不是有效? – MStodd 2012-02-16 21:16:15

回答

1

你不得不停止思考關係模型;-)我們在我們的應用程序上做了類似的事情。保留「已訂閱」UID的列表,以便在被跟隨用戶的實體中遵循該用戶。當用戶做一些需要通知的事情時,爲每個跟隨該用戶的用戶創建一個事件實體(是的,一個流行的用戶可以創建一大堆條目,這可以被卸載到任務隊列中)。

當用戶檢查通知時,您可以通過他的UID獲取它們。由於這是索引,它會很快返回。當您獲取事件時,刪除它們或將它們標記爲已讀。請記住,連接和其他過濾的查詢速度非常慢,但是獲取大量索引記錄不是。如果有事情要創建大量記錄,請將其卸載到任務隊列中。

2

我會使用一個ListProperty爲訂閱和訂戶。每次訂閱用戶發佈帖子時,都會使用任務爲每個訂閱者添加條目以供查看。就像Rick Mangi指出的那樣,關係模型對數據存儲沒有幫助。如果您正在使用新的NDB API,則可以使用重複的屬性。由於您正在爲每個觀察者創建實體,因此異步API可能非常方便。

1

我們正在實施Etsy在其公共幻燈片中描述的模型。

這是模式圖。

Etsy's Model

強烈建議你閱讀他們的介紹的全部。

Etsy Activity Feed Arch

+0

我一定會檢查它。非常感謝您的鏈接! – 2014-01-14 15:51:54

+0

也可以看看PubNub的Subscribe Event服務,這也可以。雖然我不是他們的定價模式的粉絲,你有支付批量的用戶。 – tven 2014-01-15 16:54:20