ควรใช้ฐานข้อมูล nosql เช่น mongodb ผ่าน mysql เมื่อใด


13

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

ฉันจะแลกเปลี่ยนตัวอย่างคำถามได้อย่างไรว่า 'ค้นหาความคิดเห็นทั้งหมดที่โพสต์โดยผู้ใช้นี้', 'ค้นหารูปภาพทั้งหมดที่เป็นของอัลบั้มขององค์กร' ฯลฯ

ระบบ nosql ย้ายออกจากตัวแบบข้อมูลเชิงสัมพันธ์แบบคงที่ แต่ยังให้คุณสามารถติดตามการอ้างอิงดังกล่าวได้หรือไม่มีบางสิ่งที่คล้ายคลึงกับกุญแจต่างประเทศที่คุณสามารถใช้ในการสืบค้นได้หรือไม่?

คำตอบ:


19

การใช้งานทั่วไป

  • หากคุณมีโครงสร้างข้อมูลที่ไม่ได้กำหนดไว้อย่างชัดเจนในเวลาที่คุณสร้างระบบ ฉันมักจะเก็บการตั้งค่าผู้ใช้ใน nosql เช่น อีกตัวอย่างหนึ่งคือระบบที่ผู้ใช้จำเป็นต้องสามารถเพิ่มเขตข้อมูลที่รันไทม์ - เจ็บปวดมากใน RDBMS และสายลมใน NoSQL

  • ถ้าโครงสร้างโมเดลของคุณส่วนใหญ่อยู่กึ่งกลางวัตถุวัตถุหนึ่งหรือสองสามโมเดลและความสัมพันธ์ส่วนใหญ่เป็นวัตถุลูกของวัตถุโมเดลหลัก ในกรณีนี้คุณจะพบว่าคุณจะต้องเข้าร่วมจริงน้อยมาก ฉันพบว่าระบบการจัดการที่ติดต่อสามารถนำไปใช้งานได้เป็นอย่างดีใน nosql เช่น บุคคลสามารถมีหลายที่อยู่โทรศัพท์และอีเมล แทนที่จะทำให้พวกเขาแต่ละคนลงในตารางแยกพวกเขาทั้งหมดกลายเป็นส่วนหนึ่งของรูปแบบเดียวกันและคุณมีวัตถุหนึ่งคน

  • หากคุณต้องการได้รับประโยชน์จากการทำคลัสเตอร์ข้อมูลของคุณในหลายเซิร์ฟเวอร์แทนที่จะมีเซิร์ฟเวอร์แบบเสาหินเดียวซึ่ง RDBMS ต้องการโดยทั่วไป

  • เก็บเอาไว้. แม้ว่าคุณต้องการติดกับ RDBMS เป็นฐานข้อมูลหลักของคุณ แต่ก็มีประโยชน์ในการใช้ฐานข้อมูล NoSQL สำหรับแคชผลลัพธ์แบบสอบถามหรือเก็บข้อมูลเช่นตัวนับ

  • จัดเก็บเอกสาร หากคุณต้องการจัดเก็บเอกสารที่สอดคล้องกันในฐานข้อมูลบางส่วนของฐานข้อมูล NoSQL (เช่น MongoDB) มีความเชี่ยวชาญในการจัดเก็บเอกสารเหล่านั้น

สิ่งที่เกี่ยวกับการเข้าร่วม?

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

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

โชคดีที่ไดรเวอร์ส่วนใหญ่สามารถทำการเข้าร่วมให้คุณได้หากคุณตั้งค่าสคีมาของคุณไว้

สำหรับการอ่านเพิ่มเติมที่จริงผมขอแนะนำให้มาร์ตินฟาวเลอร์


2

ฉันจะใช้ฐานข้อมูลเช่นนี้ในระหว่างขั้นตอนการวางแผนของโครงการ (ก่อนการพัฒนาก่อนที่จะออกแบบ) เพื่อบันทึกข้อมูลที่มีโครงสร้างความสัมพันธ์และคุณลักษณะที่ยังไม่ทราบและอาจมีการวิเคราะห์ ฉันจะพยายามทำให้ทุกอย่างสอดคล้องกับโมเดลเชิงสัมพันธ์หลังจากนั้น


2
อะไร? ... ทำไม ...
Robert Harvey

ในทางปฏิบัติเราสามารถใช้โมเดลความสัมพันธ์สำหรับข้อมูลที่รู้ว่าจะไม่เปลี่ยนแปลงมากนักเช่นข้อมูลผู้ใช้ด้วยชื่อทั่วไปอีเมล ฯลฯ ใน forexample mysql จากนั้นใช้สิ่งนั้นร่วมกับ nosql databse เพื่อจัดการข้อมูลที่ไม่มีโครงสร้างและผิดปกติเช่นบันทึกกิจกรรมของผู้ใช้ ประเภทของความรับผิดชอบแยก ? หรือคุณกำลังแนะนำด้วยการเริ่มต้นด้วยฐานข้อมูล nosql และดำเนินการโอนย้ายข้อมูลทั้งหมดไปยังโมเดลเชิงสัมพันธ์เมื่อทุกอย่างถูกตั้งค่า
akomada

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

0

ในบางกรณีคุณไม่จำเป็นต้องมีรหัสต่างประเทศ ตัวอย่างเช่น

ค้นหาความคิดเห็นทั้งหมดที่โพสต์โดยผู้ใช้รายนี้

สามารถทำได้ง่ายเพียงแค่โหลดcommentsส่วนของเอกสารที่สอดคล้องกับผู้ใช้ สิ่งนี้เรียกว่าdenormalization : แทนที่จะมีสองชุดด้วยการเข้าร่วมคุณมีเอกสารหนึ่งชุดและทุกสิ่งที่คุณต้องการอยู่ในเอกสาร หนึ่งแบบสอบถามไม่ร่วม, ประสิทธิภาพที่ดีขึ้น

แต่ในบางสถานการณ์สิ่งนี้อาจทำให้ข้อมูลซ้ำซ้อนดังนั้นการเชื่อมโยงจากเอกสารหนึ่งไปอีกเอกสารหนึ่งอาจเหมาะสม ในกรณีนี้คุณอาจสนใจโดยการปรับมาตรฐานของ MongoDB, รหัสต่างประเทศและการเข้าร่วม , หน้าอ้างอิงฐานข้อมูลและคุณสมบัติ DBRefs โดยเฉพาะ

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