2015-10-03 8 views
6

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां मोंगोडीबी मॉडल फेसबुक के समान होगा। तो हम सभी जानते हैं कि एफबी कैसे काम करता है, उपयोगकर्ता एक बैंड/कंपनी पेज "पसंद करता है", और वह उपयोगकर्ता उस पृष्ठ से सभी पोस्ट देखेगा।सी # मोंगोडब मॉडल फेसबुक की तरह

क्या नीचे मॉडल है कि मुझे इसे कैसे डिजाइन करना चाहिए? यदि पृष्ठ में लाखों पसंद हैं, तो प्रत्येक पोस्ट में के लाखों उप दस्तावेज़ होंगे की तरह। यह सही प्रतीत नहीं होता है, एक बेहतर तरीका होना चाहिए जिसके बारे में मैं सोच नहीं सकता।

धन्यवाद।

public class Person 
{ 
    public ObjectId Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Page 
{ 
    public ObjectId Id { get; set; } 
    public string Name { get; set; } 
    public List<Like> PersonLikes { get; set; } 

} 
public class Like 
{ 
    public ObjectId Id { get; set; } 
    public ObjectId UserId { get; set; } 
    public DateTime DateLiked { get; set; } 
} 

public class Post 
{ 
    public ObjectId Id { get; set; } 
    public ObjectId PageId { get; set; } 
    public string Message { get; set; } 
    public List<Like> PersonLikes { get; set; } 
} 
+0

क्या किसी के पास कोई सुझाव है? – Curtis

+0

अच्छा सवाल, तथ्य यह है कि चीजें वायरल जा सकती हैं। मेरे पास शायद इसके बजाय एक काउंटर होगा और उसके बाद एक और संग्रह होगा जहां वास्तविक जानकारी की जानकारी संग्रहीत की जाती है। क्या वे सिंक से बाहर हो सकते हैं? बेशक, कोई लेनदेन नहीं है, लेकिन फिर आपको सटीक होने की आवश्यकता है? –

+0

**> यह सही प्रतीत नहीं होता है, एक बेहतर तरीका होना चाहिए जिसके बारे में मैं सोच नहीं सकता। ** सबसे पहले - हाँ, यह सही नहीं है। और MongoDB निश्चित रूप से इस समाधान के लिए डेटाबेस नहीं है, आप इस स्कीमा के लिए SQL डेटाबेस के साथ बेहतर हैं। इस समाधान के लिए सही डीबी ग्राफ-डीबी होगा जैसे neo4j – sed

उत्तर

2

मेरे ले संभालने आप केवल ट्रैक करना चाहते हैं पसंद करती है

public class Page 
{ 
    public ObjectId Id { get; set; } 
    public DateTimeOffset Date { get; set; } 
    public string Name { get; set; } 
    public int NumberOfLikes { get; set; } 
} 

public class Post 
{ 
    public ObjectId Id { get; set; } 
    public ObjectId PageId { get; set; } 
    public DateTimeOffset Date { get; set; } 
    public string Message { get; set; } 
    public int NumberOfLikes { get; set; } 
} 

मैं तो रिएक्शन कतार होगा (पसंद या नापसंद) प्रविष्टि के लिए, "भावना" जानकारी वास्तविक में संग्रहित किया जा की जरूरत नहीं है समय, क्या यह है? ये दवाएं नहीं हैं, बैंक लेनदेन, आदि

public class Like 
{ 
    public ObjectId Id { get; set; } 
    public ObjectId ParentId { get; set;} 
    public ObjectId UserId { get; set; } 
    public DateTimeOffset Date { get; set; } 
} 

कतार कहां? पसंद के संग्रह के लिए। पृष्ठ या पोस्ट का हिस्सा क्यों नहीं? क्योंकि यदि कोई पोस्ट वायरल चला जाता है (जैसा कि आपने कहा था कि बहुमत नहीं होगा), तो आप 1,000,000 पसंद के साथ समाप्त हो सकते हैं। विश्लेषणात्मक इंजन के अलावा इस जानकारी को ब्राउज़ करने वाला कौन है?

आपको यह भी सुनिश्चित करना होगा कि उपयोगकर्ता केवल प्रति आइटम एक बार अपनी प्रतिक्रिया व्यक्त कर सके।

+0

आपकी 'लाइक' कक्षा में पृष्ठ या पोस्ट का आईडी गुम है जो पसंद आया था। –

+1

@IanMercer ने डेटटाइम को डेटटाइम ऑफसेट में भी बदल दिया। –

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। प्रत्येक पोस्ट को पसंद करने की आवश्यकता नहीं है। मुझे बस पोस्ट देखने के लिए एक उपयोगकर्ता की जरूरत है। तो उपर्युक्त उदाहरण में, मैं सभी पोस्ट संदेशों को देखने के लिए UserId "XXXXX" द्वारा पसंद संग्रह की क्वेरी कैसे करूं? – Curtis

1

पोस्ट केवल एक पृष्ठ पर मौजूद है, इसलिए यह वह पृष्ठ है जिस पर पोस्ट का मालिक होना चाहिए, न कि पृष्ठ का मालिक है।

public class Person 
{ 
    public ObjectId Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Page 
{ 
    public ObjectId Id { get; set; } 
    public string Name { get; set; } 
    public List<Like> PersonLikes { get; set; } 
    public List<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public ObjectId Id { get; set; } 
    public string Message { get; set; } 
    public List<Like> Likes { get; set; } 
} 

public class Like 
{ 
    public ObjectId Id { get; set; } 
    public ObjectId UserId { get; set; } 
    public DateTime DateLiked { get; set; } 
} 
संबंधित मुद्दे