ข้อ จำกัด การปรับขนาดของ PostgreSQL และ MySQL


43

ฉันได้ยินมาว่าประสิทธิภาพของฐานข้อมูลเชิงสัมพันธ์ที่ไม่มีส่วนแบ่งเช่น MySQL หรือ PostgreSQL "แตก" เกินกว่า 10 TB

ฉันสงสัยว่าข้อ จำกัด ดังกล่าวมีอยู่เนื่องจากไม่มีใครมากับ Netezza, Greenplum หรือ Vertica ฯลฯ อย่างไรก็ตามฉันอยากจะถามว่าใครที่นี่มีการอ้างอิงถึงรายงานการวิจัยหรือกรณีศึกษาอย่างเป็นทางการที่มีการ จำกัด ปริมาณเหล่านี้หรือไม่

คำตอบ:


52

ไม่มีคำตอบที่ง่ายสำหรับคำถามของคุณ แต่นี่คือบางสิ่งที่ควรพิจารณา

อันดับแรกสเกลไม่ใช่สิ่งเดียวที่ต้องกังวล สิ่งที่คุณทำกับข้อมูลของคุณคือ หากคุณมีข้อมูล 500 ตาราง 30 TB และคุณกำลังทำ OLTP อย่างง่ายด้วยการรายงานน้อยมากฉันไม่คิดว่าคุณจะมีปัญหามากเกินไป PostgreSQL มีฐานข้อมูล 32TB อยู่ที่นั่น อย่างไรก็ตามในขณะเดียวกันประสิทธิภาพจะลดลงบ้างเพราะต้องกดดิสก์ทุกอย่าง ในทำนองเดียวกันถ้าคุณมี 50TB ถ้าข้อมูล แต่มีชุด Hit ทั่วไปประมาณ 100GB จากนั้นคุณสามารถสร้างเซิร์ฟเวอร์ที่มี RAM เพียงพอที่จะเก็บส่วนหนึ่งของฐานข้อมูลนั้นไว้ในหน่วยความจำและคุณเป็นสีทอง

ในทางกลับกันหากคุณพยายามที่จะใช้โหมด (ค่าทั่วไปส่วนใหญ่) จากข้อมูล 1TB มันไม่สำคัญว่าคุณใช้ระบบใดสิ่งนี้จะเจ็บปวดกับหรือไม่มีเศษ (แก้ไข: อันที่จริงการแบ่งส่วนอาจทำให้ปัญหานี้แย่ลง )

ปัญหาสำคัญที่คุณจะพบกับฐานข้อมูลขนาดใหญ่ใน MySQL และ PostgreSQL นั้นเกี่ยวข้องกับข้อเท็จจริงที่ว่า กล่าวอีกนัยหนึ่งแบบสอบถามถูกเรียกใช้เป็นบล็อกเดียวโดยเธรดเดียวและไม่สามารถแยกย่อยเป็นชิ้น ๆ และเรียกใช้แยกกัน ปัญหานี้มักเกิดขึ้นเมื่อรันคิวรีการวิเคราะห์ขนาดใหญ่กับข้อมูลจำนวนมาก นี่คือที่ที่ Postgres-XC และ Green Plum มาช่วยเหลือเนื่องจากแยกที่เก็บข้อมูลออกจากการดำเนินการและสามารถทำได้ในระดับผู้ประสานงาน โปรดทราบว่า Postgres-XC และ Green Plum ใช้เป็นหลักในการแบ่งส่วนภายใน แต่ผู้ประสานงานบังคับใช้ความสอดคล้องทั้งหมดทั่วโลก

คุณสามารถแยกแบบสอบถามออกได้ด้วยชุดประมวลผลคู่ขนานมีตัวประมวลผล / ช่อง I / O ดิสก์ที่แตกต่างกันเรียกใช้บางส่วนและรายงานส่วนหลังของชุดผลลัพธ์ที่จะรวบรวมและส่งกลับไปยังแอปพลิเคชัน อีกครั้งสิ่งนี้มักจะมีประโยชน์มากที่สุดในการวิเคราะห์มากกว่าการประมวลผลโหลดธุรกรรม

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

ดังนั้นคำตอบคือเมื่อคุณมีขนาดเกิน 1-2 TB คุณอาจพบว่าตัวเองต้องเผชิญกับการแลกเปลี่ยนระหว่างระบบและปริมาณงานจำนวนมาก อีกครั้งนี่เป็นข้อมูลเฉพาะสำหรับฐานข้อมูลขนาดของชุดการทำงาน ฯลฯ อย่างไรก็ตาม ณ จุดนี้คุณต้องไปกับระบบเกล็ดหิมะจริงๆนั่นคือระบบที่มีเอกลักษณ์และปรับให้เข้ากับปริมาณงานของคุณ

แน่นอนว่านี่หมายความว่าข้อ จำกัด นั้นไม่สามารถวัดได้โดยทั่วไป

แก้ไข : ตอนนี้ฉันทำงานกับฐานข้อมูล 9TB ซึ่งจัดการการผสมผสานการตัดสินใจสนับสนุนและการประมวลผลปริมาณงานใน PostgreSQL ความท้าทายที่ใหญ่ที่สุดเพียงอย่างเดียวคือถ้าคุณมีคำถามที่มีจำนวนมากของชุดข้อมูลคุณจะต้องรอสักครู่เพื่อหาคำตอบ

อย่างไรก็ตามด้วยความเอาใจใส่อย่างละเอียดถี่ถ้วน (รวมถึงดัชนี, autovacuum, วิธีการทำงานเหล่านี้ในระดับต่ำ, ฯลฯ ) และทรัพยากรการคำนวณที่เพียงพอ, สิ่งเหล่านี้สามารถจัดการได้ทั้งหมด (และฉันประเมินว่าสามารถจัดการได้ดีในช่วง 30TB ใน Pg)

แก้ไข 2 : เมื่อคุณมุ่งหน้าไปที่ 100TB แม้ว่าการทำงานจะขึ้นอยู่กับชุดข้อมูลของคุณ ฉันกำลังทำงานอยู่ตอนนี้ที่จะไม่ขยายไปในช่วงนี้เพราะมันจะถึงขีด จำกัด 32TB ต่อตารางใน PostgreSQL ก่อน


2
ดูเหมือนว่า Postgres 9.6 จะได้รับการปรับปรุงขนานภายในแบบสอบถาม (สแกน seq แบบขนาน, เข้าร่วมแบบขนาน)
a_horse_with_no_name

1
ฉันคิดว่ามันจะต้องใช้เวลาอีกสองสามรุ่นเพื่อให้สิ่งนี้มีประโยชน์จริงๆ
Chris Travers

@ChrisTravers มีฐานข้อมูลอื่นที่สนับสนุนสถานการณ์แบบนี้ดีขึ้นหรือไม่? อาจไม่จำเป็นต้อง RDBMS? ขอบคุณ
konung

1
@konung ฉันไม่รู้จะซื่อสัตย์ ฉันคิดว่ามันคุ้มค่าที่จะเล่นกับเอ็นจิ้น MapReduce ในระดับหนึ่งเพราะสิ่งนี้จะช่วยกำหนดวิธีการคิดข้อมูลของคุณ คุณต้องรู้ว่าคุณกำลังทำอะไรอยู่ โซลูชันเช่น Teradata และ Postgres-XL ช่วย แต่เป็นโซลูชันที่ต้องการความรู้ที่ชัดเจนเกี่ยวกับสิ่งที่คุณกำลังทำ (และคุณสามารถสร้างของคุณเอง ณ จุดนั้นบน RDBMS ใด ๆ )
Chris Travers

1
อีกเหตุผลหนึ่งที่ฉันแนะนำให้เล่นกับ Mongo ก็คือแม้ว่า (อาจจะเป็นเพราะ) มันไม่ได้ปรับขนาดได้ดี แต่สอนวิธีคิดเกี่ยวกับข้อมูลแบบรวมและ MapReduce เมื่อคุณไปถึงจุดนั้น
Chris Travers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.