0
我有一個擁有「關注者」的用戶。我需要能夠上下瀏覽用戶/追隨者的樹。如果我使用ancestor relations,如果用戶有很多追隨者,我最終會在實體條目上打AppEngine's 1mb limit。用戶/關注者關係的AppEngine模型結構
在AppEngine上構建這些數據的最佳方式是什麼?
我有一個擁有「關注者」的用戶。我需要能夠上下瀏覽用戶/追隨者的樹。如果我使用ancestor relations,如果用戶有很多追隨者,我最終會在實體條目上打AppEngine's 1mb limit。用戶/關注者關係的AppEngine模型結構
在AppEngine上構建這些數據的最佳方式是什麼?
你不能使用祖先關係的一個簡單的理由,你的用例允許循環引用(我跟着你,你跟着我)。
解決方案取決於您的預期使用模式。您可以選擇以下兩種選項:
(A)在每個實體實體中存儲此用戶所關注的其他用戶的ID列表。 (B)創建一個具有兩個屬性的單獨實體:「用戶」和「追隨者」。每個實體將代表用戶之間的單一「連接」。
雖然第一個選項似乎更簡單,但您可能會遇到exploding indexes問題。此外,它可能會變成一個更昂貴的解決方案,因爲用戶關係的每次更改都需要覆蓋用戶實體並更新其所有其他索引。第二種解決方案沒有這些缺點,但可能需要一些額外的代碼。
嘿,我其實沒有循環引用。也許我原來的描述應該提到我的結構更像是一個邀請樹。所以頂級的一個人。我需要能夠瀏覽那棵樹,理論上最高的人可能有成千上萬的孩子,和孩子的孩子等關係。 – bradley 2014-12-02 12:55:09
如果這是一棵深的樹,你如何防止循環引用?無論哪種情況,如果您嘗試在單個實體組中使用與大量實體的祖先關係,則根本無法更新數據。 – 2014-12-02 14:43:31
這是一個邀請樹。你不能邀請已經被邀請的人。在頂層,我需要獲得「用戶1」邀請的用戶列表,然後從該列表中我需要獲得他們邀請的用戶,等等。因此,如果「用戶1」邀請了2個人,並且這兩個人邀請了另外2個人,那麼我需要能夠檢索所有加入的8個人,這實際上是因爲用戶1。 – bradley 2014-12-02 14:56:12