สำหรับวัตถุประสงค์ของการสนทนาลองพิจารณาสถานการณ์จำลองของ FourSquare
สถานการณ์
หน่วยงาน:
- ผู้ใช้
- สถานที่
ความสัมพันธ์:
- Checkins: ผู้ใช้ <-> สถานที่หลายแห่งไปมาก
- เพื่อน: ผู้ใช้ <-> ผู้ใช้หลายต่อหลายคน
การออกแบบฐานข้อมูล
สิ่งเหล่านี้มักจะมีข้อผิดพลาดโปรดชี้ให้พวกเขาเห็น
RDBMS
โต๊ะ:
- ผู้ใช้
- สถานที่
- เช็คอิน (แยก)
- เพื่อน (แยก)
ข้อดี:
- CAP: ความสอดคล้องความพร้อมใช้งาน
จุดด้อย:
- CAP: ความอดทนต่อการแบ่งพาร์ทิชัน
- schemes = โครงสร้างที่ไม่ยืดหยุ่น
- การจำลองแบบไม่ดี?
กราฟ
วัตถุที่:
- ผู้ใช้
- สถานที่
ขอบ:
- เพื่อน: ผู้ใช้ <-> ผู้ใช้
- เช็คอิน: ผู้ใช้ -> สถานที่
- มีการประทับเวลา
ข้อดี:
- CAP: ความสอดคล้องความพร้อมใช้งาน?
- schemaless วัตถุและขอบที่เปลี่ยนแปลงไม่ได้อย่างง่ายดาย
- คำสั่งการสำรวจเส้นทางกราฟตัวอย่างเช่น:
- การจัดกลุ่ม
- ค้นหากลุ่มเพื่อน
- การค้นหาร้านอาหารที่ชอบโดยคนที่คล้ายกัน
- ข้อความค้นหาทั่วไป / ที่เป็นประโยชน์อื่น ๆ
- การจัดกลุ่ม
จุดด้อย:
- CAP: ความอดทนต่อการแบ่งพาร์ติชัน?
เอกสาร / วัตถุ
3 ฐานข้อมูลแยกจากกัน?
- ผู้ใช้
- รายชื่อเพื่อน
- เช็คอิน
- การประทับเวลา
- ผู้ใช้งาน
- สถานที่
- สถานที่
ข้อดี:
- CAP: ความพร้อมใช้งานความทนทานต่อพาร์ติชัน
- schemaless วัตถุที่เปลี่ยนแปลงได้ง่าย
จุดด้อย:
- CAP: ความสม่ำเสมอ
คำถาม
สำหรับบันทึกพวกเขาลงเอยด้วยการใช้ MongoDB นอกจากเครื่องหมายคำถามข้างต้นทั้งหมดแล้ว:
- ฉันไม่แน่ใจว่าจะใช้ฐานข้อมูลเอกสารอย่างไร
- ฐานข้อมูลเอกสารได้รับความอดทนต่อพาร์ติชันอย่างไร
- หากต้องการรับการเช็คอินของผู้ใช้คนเดียวฉันถือว่าการดำเนินการจะแยกการตรวจสอบทั้งหมดและกรองข้อมูลเมตาสำหรับชื่อผู้ใช้ (แผนที่ + ตัวกรอง) ประสิทธิภาพของการแยกวิเคราะห์เอกสาร 1,000,000+ รายการสำหรับผู้ใช้แต่ละรายจะแย่มาก ฉันคิดว่านี่ไม่ใช่พฤติกรรมที่ถูกต้องใช่ไหม
- มีโปร / ข้อเสียอะไรอีกบ้าง