เมื่อใดที่คุณควรใช้ฐานข้อมูลเทียบกับเอกสารเทียบกับกราฟ? [ปิด]


29

สำหรับวัตถุประสงค์ของการสนทนาลองพิจารณาสถานการณ์จำลองของ FourSquare

สถานการณ์

หน่วยงาน:

  • ผู้ใช้
  • สถานที่

ความสัมพันธ์:

  • Checkins: ผู้ใช้ <-> สถานที่หลายแห่งไปมาก
  • เพื่อน: ผู้ใช้ <-> ผู้ใช้หลายต่อหลายคน

การออกแบบฐานข้อมูล

สิ่งเหล่านี้มักจะมีข้อผิดพลาดโปรดชี้ให้พวกเขาเห็น

RDBMS

โต๊ะ:

  • ผู้ใช้
  • สถานที่
  • เช็คอิน (แยก)
  • เพื่อน (แยก)

ข้อดี:

  • CAP: ความสอดคล้องความพร้อมใช้งาน

จุดด้อย:

  • CAP: ความอดทนต่อการแบ่งพาร์ทิชัน
  • schemes = โครงสร้างที่ไม่ยืดหยุ่น
  • การจำลองแบบไม่ดี?

กราฟ

วัตถุที่:

  • ผู้ใช้
  • สถานที่

ขอบ:

  • เพื่อน: ผู้ใช้ <-> ผู้ใช้
  • เช็คอิน: ผู้ใช้ -> สถานที่
    • มีการประทับเวลา

ข้อดี:

  • CAP: ความสอดคล้องความพร้อมใช้งาน?
  • schemaless วัตถุและขอบที่เปลี่ยนแปลงไม่ได้อย่างง่ายดาย
  • คำสั่งการสำรวจเส้นทางกราฟตัวอย่างเช่น:
    • การจัดกลุ่ม
      • ค้นหากลุ่มเพื่อน
      • การค้นหาร้านอาหารที่ชอบโดยคนที่คล้ายกัน
    • ข้อความค้นหาทั่วไป / ที่เป็นประโยชน์อื่น ๆ

จุดด้อย:

  • CAP: ความอดทนต่อการแบ่งพาร์ติชัน?

เอกสาร / วัตถุ

3 ฐานข้อมูลแยกจากกัน?

  • ผู้ใช้
    • รายชื่อเพื่อน
  • เช็คอิน
    • การประทับเวลา
    • ผู้ใช้งาน
    • สถานที่
  • สถานที่

ข้อดี:

  • CAP: ความพร้อมใช้งานความทนทานต่อพาร์ติชัน
  • schemaless วัตถุที่เปลี่ยนแปลงได้ง่าย

จุดด้อย:

  • CAP: ความสม่ำเสมอ

คำถาม

สำหรับบันทึกพวกเขาลงเอยด้วยการใช้ MongoDB นอกจากเครื่องหมายคำถามข้างต้นทั้งหมดแล้ว:

  1. ฉันไม่แน่ใจว่าจะใช้ฐานข้อมูลเอกสารอย่างไร
  2. ฐานข้อมูลเอกสารได้รับความอดทนต่อพาร์ติชันอย่างไร
  3. หากต้องการรับการเช็คอินของผู้ใช้คนเดียวฉันถือว่าการดำเนินการจะแยกการตรวจสอบทั้งหมดและกรองข้อมูลเมตาสำหรับชื่อผู้ใช้ (แผนที่ + ตัวกรอง) ประสิทธิภาพของการแยกวิเคราะห์เอกสาร 1,000,000+ รายการสำหรับผู้ใช้แต่ละรายจะแย่มาก ฉันคิดว่านี่ไม่ใช่พฤติกรรมที่ถูกต้องใช่ไหม
  4. มีโปร / ข้อเสียอะไรอีกบ้าง

(1) คุณต้องสะกดความเป็นจริงระหว่าง 2 ตารางในแง่ธุรกิจ นี่เป็นเพราะอาจมีความสัมพันธ์แบบคู่ขนาน ตัวอย่างเช่นผู้ใช้ <--> ผู้ใช้ไม่ได้หมายถึงความสัมพันธ์ 1 มม. มันอาจมีความหมายมากกว่า 1 ตัวอย่างเช่นผู้ใช้ชอบผู้อื่นและผู้ใช้เกลียดผู้ใช้อื่น เหล่านี้คือความสัมพันธ์ 2 (2) มันจะช่วยได้ถ้าคุณสามารถสรุปสิ่งที่คุณต้องการได้อย่างแน่นอน
NoChance

@EmmadKareem: (1) ฉันไม่ได้มองสถานการณ์ที่ซับซ้อน ความสัมพันธ์ของผู้ใช้ <-> ผู้ใช้คนเดียวที่ฉันสนใจคือมิตรภาพซึ่งกันและกันซึ่งเป็นการเชื่อมต่อที่หลากหลาย (2) ฉันต้องการคำถาม 4 ข้อที่ด้านล่างของโพสต์ตอบ
wting

คำตอบ:


13

คำถามของคุณอาจเป็นหัวข้อของหลักสูตรวิทยาลัยระยะยาวภาคเรียน คุณต้องแบ่งมันออกเป็นกลุ่มที่จัดการได้ เช่นนี้ฉันจะทิ้งคำตอบบางส่วนออกไป

หนึ่งในสิ่งแรกที่ต้องพิจารณาในการตัดสินใจว่าจะใช้ฐานข้อมูลประเภทใดคือแบบสอบถามชนิดใดที่คุณจะเรียกใช้และคุณจะรู้จักพวกเขาทั้งหมดก่อนสร้างฐานข้อมูลหรือไม่ ฐานข้อมูล SQL มีข้อดีของการสืบค้นที่ทรงพลังและยืดหยุ่นในข้อมูลทั้งหมดในฐานข้อมูล ฐานข้อมูลกราฟมีความสามารถในการสืบค้นที่มีความเชี่ยวชาญสูงซึ่งทำให้ดีที่สุดสำหรับข้อมูลกราฟและไม่ดีสำหรับข้อมูลที่ไม่ใช่กราฟ (แม้ว่าฐานข้อมูลกราฟสามารถเป็นส่วนประกอบในฐานข้อมูล SQL) ฐานข้อมูล NoSQL นั้นมีข้อ จำกัด ในด้านความสามารถในการดึงและใช้งานข้อมูล

ถัดไปคือความรู้สึกของคุณเกี่ยวกับคุณสมบัติของกรด: Atomicity, Consistency, Isolation และ Durability ฐานข้อมูล SQL ให้การรับประกันที่รัดกุมเกี่ยวกับ 4. ฐานข้อมูล NoSQL โดยทั่วไปจะไม่รับประกันทั้ง 4 ข้อและวิธีการที่พวกเขาออกไปนั้นเป็นความแตกต่างที่สำคัญที่ทำให้การใช้งานฐานข้อมูล NoSQL แตกต่างกัน ในทางกลับกันมันเป็นไปไม่ได้ที่จะรับประกันความสอดคล้องและความพร้อมใช้งานในส่วนของ Partition (ดูที่Brewer's CAP thorem ) ดังนั้นไม่มีฐานข้อมูล SQL จะทำถ้าคุณยืนยันความพร้อมใช้งานเต็มรูปแบบในส่วนของ Partition ส่วนตัวฉันสนใจเรื่องความทนทานของข้อมูลในฐานข้อมูลมากเพราะฉันมักจะทำงานกับข้อมูลที่แม้แต่การสูญเสียข้อมูล 0.0001% ก็ไม่สามารถยอมรับได้และชุดข้อมูลมีขนาดเล็กพอที่ฉันไม่ต้องกังวลเกี่ยวกับพาร์ติชันดังนั้นฉันจึง สนับสนุนฐานข้อมูล SQL อย่างมาก

การพิจารณาในทางปฏิบัติอีกอย่างหนึ่งคือคุณภาพของรหัสเซิร์ฟเวอร์ความพร้อมใช้งานของผู้ดูแลระบบฐานข้อมูลและโปรแกรมเมอร์คุณภาพของการสนับสนุนสำหรับปัญหาที่เกิดขึ้นคุณภาพและความพร้อมใช้งานของไลบรารีอินเตอร์เฟสเพื่อเชื่อมต่อแอปพลิเคชันของคุณกับฐานข้อมูลและอื่น ๆ MySQL นั้นมีมาเกือบ 2 ทศวรรษแล้วที่มีข้อบกพร่องส่วนใหญ่ใช้กันอย่างแพร่หลายดังนั้นจึงมีทั้งการสนับสนุนที่ยอดเยี่ยมและความพร้อมของบุคลากรและมีแนวโน้มที่จะได้รับการสนับสนุนในอีก 10 ปีข้างหน้า คุณไม่สามารถพูดอะไรเกี่ยวกับ Riak ได้

โปรดทราบว่าในขณะที่ Google ได้คิดค้นฐานข้อมูล NoSQL เพื่อให้พวกเขาสามารถจัดเก็บเวอร์ชันแคชและดัชนีของเวิลด์ไวด์เว็บทั้งหมดพวกเขายังคงใช้ MySQL สำหรับบางสิ่ง


1
ฉันรู้ว่าฉันถามอะไรมากมายดังนั้นคำตอบทั่วไปน่าจะดี คำถามหลักคือ: (1) เหตุใดจึงต้องใช้ฐานข้อมูลเอกสารสำหรับการแยกชิ้นส่วนที่ยอดเยี่ยมเมื่อคุณสามารถใช้การแบ่งส่วนในแนวนอนด้วยลอจิกโดยใช้การแบ่งส่วนแบบช่วง? (2) คุณจะออกแบบฐานข้อมูลเอกสารเพื่อใช้ในสถานการณ์ FourSquare อย่างไรและจะจัดการกับการใช้งานทั่วไปอย่างไร (แสดงเช็คอินของผู้ใช้แสดงเพื่อนของผู้ใช้แสดงผู้ใช้ที่อยู่ในสถานที่เช็คอิน)
wting

1
@ William จะมีบทความมากมายที่ตอบคำถามของคุณให้เข้าถึงได้ง่ายผ่าน Google แม้หลาย ๆ บนStack Overflowเพียงอย่างเดียว ทำการบ้านของคุณ.
โปรเก่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.