2014-02-26 37 views
0

我目前正在設計一個類似於twitter/jaiku/reddit的應用程序的結構。基本上有一些upvotes和downvotes小帖子,他們按照分數和時間排序像reddit。標記在appengine上閱讀的帖子

我已經完成了所有這些工作,但現在我們的要求已經發生了一些變化,我們需要用戶能夠將帖子標記爲「已讀」。這會使該帖子不再顯示在該用戶的Feed中。我可以用(User,Post)的每個元組對一個Read實體進行建模,但是這需要大量的工作才能找到該表中不存在的帖子。或者,我可以反轉該關係,以便每個未讀帖子都有一個實體,並且更容易找到表中存在哪些帖子「do」。但是,然後我需要在此表中創建一個條目每一個用戶每次發佈帖子。這不會很好地擴展。

我的問題是這樣的:我將如何在appengine的數據存儲中對這類負面信息建模?如果有問題,我使用go運行時,但任何運行時的答案都可以。

回答

0

這將是一個多對多的關係。 This article描述瞭如何建模不同類型的關係,包括多對多關係。唯一的問題是,我不知道天氣應該在用戶上存儲閱讀帖子列表,還是在帖子上閱讀用戶列表,因爲在不同情況下帖子列表可能會變大。如果帖子是相對私密的,而且很多人看不到,則可以在帖子模型中存儲用戶密鑰列表。但是,如果有成千上萬的人可以看到一篇文章,那麼最好將用戶的帖子列表存儲起來,因爲可能沒有很多用戶擁有數千篇閱讀文章。另一個選擇可能是丟棄舊帖子,或者放棄他們的閱讀狀態。

+0

噢好的。由於索引屬性限制,我在某處讀到它們限於5000個元素。我將如何在查詢中使用它?我認爲IN運營商一次只能有30個元素。 – Logiraptor

+0

現在更新我的答案 – bigblind

+0

我實際上不確定我的答案是否有效了,在閱讀Guido Vanrossum對此問題的答案後:http://stackoverflow.com/questions/15377119/gae-ndb-design-performance-and-use重複屬性,即使他在談論ndb,python數據存儲區api,我認爲這是關於重複屬性在底層處理的方式。 – bigblind