การใช้เศษวัสดุมีประสิทธิภาพสำหรับชุดสะสมขนาดเล็กหรือไม่


11

ดูเหมือนว่าการแบ่งฐานข้อมูลจะดีมากถ้าฉันมีคอลเลกชันขนาดใหญ่ จะเกิดอะไรขึ้นถ้าฉันมีคอลเลกชันขนาดใหญ่พอสมควร สมมติว่าสำหรับการรวบรวม 100,000 000 เอกสาร (ความคิดเห็นไม่ใหญ่มาก) การ sharding นั้นมีประสิทธิภาพ นอกจากนี้ยังมีผลบังคับใช้กับ 10,000 คอลเลกชันที่มี 10,000 เอกสารแต่ละ?

(ฉันคิดว่าคำถามนี้ยังคงใช้ได้สำหรับฐานข้อมูลแบบ table oriented ถ้าคุณแทนที่ collection ด้วยตารางและเอกสารด้วยแถวถ้าเป็นไปได้ฉันอยากจะรู้คำตอบเชิงทฤษฎีรวมทั้งคำตอบในสถานการณ์ MongoDB เฉพาะถ้าแตกต่างจากทฤษฎี ตอบ.)

คำตอบ:


5

นอกจากนี้ยังมีผลบังคับใช้กับ 10,000 คอลเลกชันที่มี 10,000 เอกสารแต่ละ?

คนส่วนใหญ่มีปัญหา "การรวบรวมขนาดใหญ่เพียงครั้งเดียว" และดังนั้นการแบ่งส่วนจะมีประโยชน์อย่างชัดเจนในการลดอาการปวดหัวของการทำให้ข้อมูลนี้สมดุล

อย่างไรก็ตามเมื่อคุณมี 10,000 คอลเล็กชั่นปวดหัวของคุณอาจไม่ "สมดุลข้อมูล" ด้วยคอลเลกชันขนาดเล็กจำนวนมากนี้ปัญหาของคุณน่าจะเกี่ยวกับการติดตามคอลเลกชันเหล่านี้ ขึ้นอยู่กับขนาดเอกสารของคุณคุณอาจไม่ได้ขีด จำกัด ล่างเพื่อให้เกิดการใช้งานจริง

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

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


ขอบคุณฉันพยายามอย่างเต็มที่ที่จะรู้ว่าสิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือกำจัดคอลเล็กชั่นเหล่านี้ออกไป ฉันมีคอลเลกชันจำนวนมากมาก่อนเพราะฉันได้ยินความเชื่อทั่วไป: "คอลเลกชันขนาดใหญ่ไม่ดีสำหรับคุณเพราะดัชนีไม่พอดีกับแรมและมันจะช้ามากในการค้นหาและอัปเดตพวกเขา" แต่ฉันเดาว่าการแยกส่วนถูกสร้างขึ้นเพื่อแก้ปัญหานั้น ... ขอบคุณ !!
João Pinto Jerónimo

สุจริตฉันพบว่าคุณมักจะ "โกง" ในดัชนีด้วย หากคุณมีสองคอลเลกชันfooและbarมีโครงสร้างข้อมูลเดียวกันคุณสามารถผสานไว้ในbazคอลเลกชันและแทนที่(ในรหัส):_ids { _id: "foo123" }, { _id: "bar123" }คุณมีดัชนีที่ใหญ่กว่า แต่มีดัชนีเดียวที่มีประเภท ไม่ใช่ข้อกำหนดเพียงแค่ "อาหารสำหรับความคิด"
Gates VP

4

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

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


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