ฉันรู้ว่า Shopify ใช้ฐานข้อมูลเดียวเท่านั้นสำหรับร้านค้าทั้งหมด แต่พวกเขาสามารถจัดการฐานข้อมูลด้วยข้อมูลขนาดใหญ่ได้อย่างไร เป็นความคิดที่ดีที่จะใช้ฐานข้อมูลเดียวสำหรับร้านค้ากว่า 50,000 แห่งหรือไม่?
ฉันรู้ว่า Shopify ใช้ฐานข้อมูลเดียวเท่านั้นสำหรับร้านค้าทั้งหมด แต่พวกเขาสามารถจัดการฐานข้อมูลด้วยข้อมูลขนาดใหญ่ได้อย่างไร เป็นความคิดที่ดีที่จะใช้ฐานข้อมูลเดียวสำหรับร้านค้ากว่า 50,000 แห่งหรือไม่?
คำตอบ:
โปรดทราบ: ฉันกำลังตอบจากมุมมองของ SQL Server ดังนั้นฉันพูดถึงแนวคิดบางอย่างที่เฉพาะเจาะจงกับ SQL Server แต่ฉันเชื่อว่าแนวคิดเหล่านี้ทั้งหมดมีความเทียบเท่าในแพลตฟอร์ม RDBMS หลักอื่น ๆ ที่มีข้อดีและข้อ จำกัด ที่คล้ายคลึงกัน
ฉันอาจจะแก้ไขคำตอบนี้ต่อไปเพราะฉันนึกถึงข้อดีข้อเสียอื่น ๆ
มันขึ้นอยู่กับสคีมาปริมาณ ฯลฯ ที่ร้านค้าเก็บคืออะไร มันแตกต่างจากการจัดเก็บข้อมูลประมาณ 50,000 แมวหรือ 50,000 ผลิตภัณฑ์หรือ 50,000 wingnuts อย่างไร
มีเหตุผลหลายประการ (นอกเหนือจากขนาดของมันเอง) ทำไมคุณไม่ต้องการจัดเก็บข้อมูลสำหรับลูกค้า 50,000 รายในฐานข้อมูลเดียวหากลูกค้าสามารถแยกข้อมูลได้อย่างสมบูรณ์ (ไม่รวมตารางการค้นหาเช่นรหัส zip หรือ ตารางเฉพาะแอปพลิเคชันซึ่งสามารถไปที่ฐานข้อมูลส่วนกลางเดียว):
หากลูกค้าเติบโตเกินกว่าโปรแกรมที่ไม่มีวิธีง่ายๆในการแยกเพียงข้อมูลของพวกเขาและย้ายไปยังอีกเช่นเซิร์ฟเวอร์และอื่น ๆ ที่จะไต่ออกจนกว่าคุณจะวางแผนล่วงหน้าและพาร์ทิชันในสิ่งที่ชอบCustomerID
และมี 50,000 filegroups (คุณจำกัด ถึง 15,000 พาร์ติชันหรือ 1,000 ถ้าคุณใช้ SQL Server เวอร์ชันเก่าและมีกลุ่มไฟล์มากเกินไปอาจทำให้เกิดความเสียหายได้ ) โปรดทราบว่าการแบ่งพาร์ติชันต้องใช้ Enterprise Edition
หากปรากฎว่าลูกค้าของคุณใหญ่เกินไปสำหรับอินสแตนซ์นี้การขยายออกหมายถึงการรับฮาร์ดแวร์ใหม่และย้ายฐานข้อมูลทั้งหมดที่นั่น (และอาจทำเช่นนั้นอีกครั้งตามถนน)
การลบลูกค้าอาจเจ็บปวดอย่างเท่าเทียมกันเนื่องจากคุณจะต้องลบบาง% ของแถวออกจากตารางที่มีขนาดใหญ่มากและนั่นจะไม่ถูก
คุณอาจมีการกระจายข้อมูลลูกค้าอย่างกว้างขวาง (ลูกค้ารายหนึ่งพันล้านแถวและลูกค้า 5,000 ราย) สิ่งนี้สามารถนำไปสู่สิ่งต่าง ๆ เช่นการดมพารามิเตอร์และประสิทธิภาพที่เป็นอันตรายที่เกี่ยวข้องกับความสำคัญเชิงหัวใจและคุณภาพของแผน (เนื่องจากคุณอาจจะใช้แผนเดียวกันสำหรับการสืบค้นเดียวกันกับชุดข้อมูลที่แตกต่างกันมาก)
ลูกค้าของคุณทั้งหมดต้องอยู่ภายใต้แผน SLA และ HA / DR ที่แน่นอน คุณมีฐานข้อมูลทั้งหมดในโหมดการกู้คืนเต็มรูปแบบด้วยการสำรองข้อมูลบันทึกแบบนาทีต่อนาทีหรือคุณอยู่ในรูปแบบที่เรียบง่ายและใช้การสำรองข้อมูลเต็มรูปแบบ + diff หากคุณต้องเปลี่ยนกลับเนื่องจากข้อผิดพลาดของลูกค้าหรือจำเป็นต้องกู้คืนฐานข้อมูลเป็นระยะเวลาหนึ่งซึ่งจะส่งผลต่อลูกค้าทุกราย
มีความเป็นไปได้ที่จะเกิดข้อผิดพลาดในการดึงข้อมูล - ข้อบกพร่องในกรณีที่ส่วนคำสั่งอาจนำไปสู่ลูกค้ารายหนึ่งที่เห็นข้อมูลลูกค้าอื่นหรือข้อมูลลูกค้าอื่น ๆ ทั้งหมด
อาจมีผลทางกฎหมาย (บาง บริษัท จะมีข้อกำหนดที่เข้มงวดในสถานที่ซึ่งคุณไม่ได้วางข้อมูลไว้ในฐานข้อมูลเดียวกับ บริษัท อื่นและโดยเฉพาะอย่างยิ่งคู่แข่งของพวกเขา)
หากการรักษาความปลอดภัยของข้อมูลของลูกค้าคนใดคนหนึ่งมีความสำคัญการบรรลุเป้าหมายนั้นง่ายกว่าการแยกฐานข้อมูลมากกว่าการแยกภายในตาราง
ข้อได้เปรียบบางประการในการมีลูกค้าแต่ละรายในฐานข้อมูลแยกต่างหาก (หรืออย่างน้อยก็มีหลายฐานข้อมูลแต่ละกลุ่มลูกค้า):
DROP DATABASE
ลบลูกค้าและข้อมูลทั้งหมดประมาณเท่ากับข้อเสียบางอย่าง: