แนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบฐานข้อมูล NoSQL


33

ฉันเพิ่งเริ่มใช้ฐานข้อมูลที่ใช้เอกสาร NoSQL (MongoDB) และฉันอยากรู้เกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบฐานข้อมูล

ฉันคิดว่าสถาปัตยกรรมควรแตกต่างจากฐานข้อมูลเชิงสัมพันธ์หรือไม่ ฉันควรยังคงมุ่งมั่นสำหรับฐานข้อมูลปกติ

ตัวอย่างเช่นฉันมีกรณีการใช้งานเฉพาะ;

ฉันมีผู้ใช้ที่มีประวัติการเช่า (อาร์เรย์ที่อยู่) ควรอาร์เรย์นั้นเป็นอาร์เรย์ของผู้ใช้หรือเป็นคอลเลกชันแยกต่างหากด้วยรหัสที่ใช้ร่วมกันหรือไม่


อย่าใช้กุญแจต่างประเทศ
dukeofgaming

อย่าใช้ SQL :-) อย่างจริงจัง "NoSQL" จะบอกอะไรคุณเกี่ยวกับเทคโนโลยีนี้อีกไหม?

ฉันคิดว่ากระทู้นี้ควรอยู่ในเว็บไซต์ฐานข้อมูลของ Stack Exchange คุณสามารถขอความช่วยเหลือเพิ่มเติมเกี่ยวกับปัญหานี้ได้ที่นั่น
Luis Arriojas

คำตอบ:


23

แนวทางที่เหมาะสมสำหรับการออกแบบฐานข้อมูล NoSQL คือDDD ( Domain Driven Design ) สำหรับบางคนที่เคยออกแบบ RDBMS นั้นดูเหมือนว่า NoSql จะมีรูปแบบการต่อต้านของ SQL และมันก็เหมาะสมกว่าเมื่อพิจารณาในขอบเขตของ DDD

ขึ้นอยู่กับการใช้ที่อยู่คุณอาจกำหนดให้เป็นวัตถุที่มีค่าในรูปแบบประวัติ / เช่ารถ

นี่คือการอ้างอิงบางส่วนที่อาจช่วยขจัดความคิดในการออกแบบด้วย NoSQL:


19

TL; DR

การทำให้เป็นมาตรฐานใน RDBMS ช่วยให้คุณใช้ประโยชน์จากจุดแข็งของกระบวนทัศน์เชิงสัมพันธ์

การทำให้เป็นปกติใน NoSQL ช่วยให้คุณสามารถใช้ประโยชน์จากจุดแข็งของกระบวนทัศน์ NoSQL

คำตอบที่ยาว

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

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

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

คุณต้องถามฉันจะต้องเปลี่ยนแปลงข้อมูลอะไรด้วยกัน ข้อมูลใดที่จัดกลุ่มข้อมูลอื่นอย่างมีเหตุผล ในกรณีของคุณคนฟังดูเหมือนรวมที่ดี อะไรคือจุดเริ่มต้นทางตรรกะที่มีต่อข้อมูลที่เหลือ

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

ทุกสิ่งอื่นที่ RDBMS ให้คุณคุณจะต้องติดตั้งโค้ดและสคีมาของคุณเอง คุณจะต้องเข้าร่วมในรหัสถ้าคุณต้องการรวมมวลรวม คุณจะต้องแยกวิเคราะห์หากคุณต้องการเพียงส่วนหนึ่งของการรวม คุณจะต้องตรวจสอบเอกลักษณ์ด้วยตนเองหากคุณไม่ต้องการสิ่งที่ซ้ำกัน คุณจะต้องใช้ตรรกะการทำธุรกรรมของคุณเองเมื่อทำงานกับมวลรวม ฯลฯ

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

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

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