我建模一個谷歌的數據存儲與客觀化和部分數據存儲區的有以下3個要素:物化POST/LIKE /用戶關係
用戶發佈一個新帖子可以被很多用戶喜歡(典型的社交網絡)。
到目前爲止,我有用戶:
@Entity
public class UserMW {
@Id
private Long id;
@Index
private String email;
...
}
帖子:
@Entity
public class PostMW{
@Id
private Long id;
@Load
private Ref<UserMW> owner;
...
}
,喜歡:
@Entity
public class LikeMW {
@Id
private Long id;
@Load
private Ref<UserMW> user;
private Key likedObject;
...
}
它完美,滿足我所有的需求至今。現在的問題是,我不知道我應該去哪一種方式,而不是像一個帖子(從類似的喜歡中刪除一個實體)。
我有用戶和likedObject鍵將其刪除,所以如果它是在一個關係型數據庫是很簡單的,但是,客觀化...
(只是用「那裏」的用戶ID和likedObjectID刪除)我可以考慮兩種方法:
1 - @index關於這兩個屬性的喜歡實體然後查詢它並刪除(但@Index是如此昂貴,表喜歡是巨人!!聽起來不是一個好東西想法)
2 - @Parent關於用戶屬性的喜歡實體和@Index關於對象然後由祖先查詢,然後過濾byObjectObject Key an D刪除(但如果我使用@Parent,我明白所有的時間我加載1個用戶,我會加載他所有的喜歡,正如我所說,表喜歡是巨大的!聽起來不是一個好主意)
任何建議來解決我的問題?
謝謝你們!
聽起來像爲'Like'模型添加一個索引是要走的路...至於費用昂貴 - 索引現在是免費的(但索引存儲不是)。是什麼讓你覺得它會讓喜歡 - 巨人? –
原因喜歡是要存儲整個應用程序的所有喜歡。目前它的實現是用來存儲喜歡的帖子,但很快我們就會添加這個功能,讓用戶能夠喜歡圖片,評論,帖子等......就像facebook一樣。所以喜歡會有這麼多的實體。 索引價格昂貴,因爲GAE數據存儲會向您收取書面費用,並且每個實體內的每個索引都會被寫入兩次。 我對嗎@MihailRussu? –
根據[數據存儲的新定價](https://cloudplatform.googleblog.com/2016/03/Google-Cloud-Datastore-simplifies-pricing-cuts-cost-dramatically-for-most-use-cases.html)'寫作無論指標如何,單個實體的成本只有1筆,現在每10萬美元的成本爲0.18美元。您可以使用盡可能多的索引來滿足您的應用程序需求,而不會增加寫入成本。「 索引仍然存儲並影響性能,但使用它們時可能會更加自由。我個人認爲你在做什麼是過早的優化和會與另一個索引,但我錯了...... :) –