ก่อนอื่นโปรดทราบว่าสามารถจัดการได้ 1 พันล้านแถวอย่างมีประสิทธิภาพด้วยสถาปัตยกรรมที่แบ่งพาร์ติชันบนฮาร์ดแวร์เซิร์ฟเวอร์สินค้าโภคภัณฑ์ทั่วไป สิ่งที่แปลกใหม่ที่แชร์สถาปัตยกรรมใด ๆ จะไม่จำเป็นสำหรับปริมาณข้อมูลนี้อย่างไรก็ตามคุณอาจได้รับประโยชน์อย่างมากจากการแบ่งพาร์ติชันตาราง
Sharding เป็นสิ่งที่แตกต่างจากการแบ่งพาร์ติชันในแนวนอนและบอกเป็นนัยถึงสถาปัตยกรรม 'shared nothing' ซึ่งไม่รองรับ SQL Server 1
SQL Server สามารถรองรับการแบ่งพาร์ติชันในแนวนอนและสถาปัตยกรรมดิสก์ที่ใช้ร่วมกันจะเพียงพอสำหรับแถว ~ 1 Billon
ใน SQL Server คุณสร้างฟังก์ชั่นพาร์ติชันเลือกพาร์ติชันตามค่าหรือช่วงของค่าในคอลัมน์บนตารางเช่น
create partition function F_AccPrdPart (int)
as range left for values (
180001 -- Dummy value
,199012 ,199112 ,199212 ,199312, 199412 ,199512
,199612 ,199712 ,199812 ,199912 ,200012 ,200112
,200212 ,200312 ,200412 ,200512 ,200612 ,200712
,200812
,200901, 200902, 200903, 200904, 200905, 200906
,200907, 200908, 200909, 200910, 200911, 200912
,201001, 201002, 201003, 201004, 201005, 201006
,201007, 201008, 201009, 201010, 201011, 201012
,201101, 201102, 201103, 201104, 201105, 201106
,201107, 201108, 201109, 201110, 201111, 201112
,202012
,939999 -- Dummy value
)
go
จากนั้นสร้างกลุ่มไฟล์อย่างน้อยหนึ่งกลุ่มเพื่อจัดสรรพาร์ติชันให้ สำหรับชุดข้อมูลขนาดใหญ่กลุ่มไฟล์เหล่านี้สามารถตั้งค่าบนฟิสิคัลวอลุ่มที่แตกต่างกัน โปรดทราบว่าที่เก็บข้อมูลแนบโดยตรงจะเร็วกว่า SAN มากในเกือบทุกกรณี ในตัวอย่างด้านล่างเราจะสร้างกลุ่มไฟล์ 6 กลุ่มชื่อ PartVol1-PartVol6
สามารถสร้างชุดพาร์ติชั่นหนึ่งพาร์ติชั่นขึ้นไปเพื่อจัดสรรพาร์ติชั่นของตารางไปยังกลุ่มไฟล์ตามค่าของฟังก์ชันพาร์ติชั่น,
create partition S_AccPrdPart as partition F_AccPrdPart
TO ([PRIMARY]
,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6]
,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6]
,[PartVol1], [PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6]
,[PartVol1]
,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
,[PartVol2], [PartVol3], [PartVol4], [PartVol5], [PartVol6], [PartVol1]
,[PartVol2]
,[PRIMARY]
,[PRIMARY])
go
ชุดรูปแบบนี้ออกแบบมาเพื่อแบ่งพาร์ติชันในรอบระยะเวลาบัญชี วันที่นี้ยังใช้บ่อยสำหรับเรื่องนี้แม้ว่าจะสามารถใช้คีย์ใดก็ได้
คุณสามารถสร้างตารางในชุดรูปแบบพาร์ติชันราวกับว่ามันเป็นกลุ่มไฟล์เช่น
Create table FooTrans (
FooTransID int identity (1,1) not null
,AccPeriod int not null
,[...]
) on S_AccPrdPart (AccPeriod)
go
โปรดทราบว่าตารางจะถูกสร้างขึ้นในรูปแบบพาร์ทิชันแทนกลุ่มไฟล์ที่ระบุและข้อระบุคอลัมน์ที่จะใช้เป็นคีย์พาร์ทิชัน ขึ้นอยู่กับคีย์พาร์ทิชันแถวในตารางจะถูกจัดสรรให้กับหนึ่งในกลุ่มไฟล์ในรูปแบบพาร์ทิชัน
หมายเหตุ:กฎของหัวแม่มือสำหรับการออกแบบโครงร่างการแบ่งพาร์ติชันคือแต่ละพาร์ติชันควรมีจำนวนแถวใน 10 ล้านต่ำของการพูดระหว่าง 10 และ 50 ล้านขึ้นอยู่กับความกว้างของแถว วอลุ่มดิสก์ที่พาร์ติชันตั้งอยู่นั้นควรจะเร็วพอที่จะทำการสแกนอย่างน้อยหนึ่งพาร์ติชันในไม่กี่วินาที
การแบ่งพาร์ทิชั่นการแบ่งส่วนและการแบ่งใช้ระบบใด ๆ
ดูเหมือนว่าคำศัพท์เล็กน้อยที่นี่เพื่อทำให้เข้าใจการอภิปรายบางส่วนในหัวข้อนี้
ระบบ 'shared nothing' เป็นระบบคู่ขนานที่โหนดไม่มีหน่วยเก็บข้อมูล SAN ที่แบ่งใช้ แต่ใช้หน่วยเก็บข้อมูลโลคัลกับโหนด ตัวอย่างคลาสสิกของสถาปัตยกรรมประเภทนี้คือ Teradata ไม่มีระบบใดที่ใช้ร่วมกันปรับขนาดได้ดีกับชุดข้อมูลที่มีขนาดใหญ่มากเนื่องจากไม่มีคอขวด I / O ส่วนกลาง I / O throughput ปรับขนาดตามจำนวนโหนดในระบบ
ระบบ 'ดิสก์ที่ใช้ร่วมกัน' เป็นระบบที่เซิร์ฟเวอร์ฐานข้อมูลอย่างน้อยหนึ่งเซิร์ฟเวอร์ใช้ระบบย่อยที่เก็บข้อมูลดิสก์ร่วมกัน ฐานข้อมูลสามารถเป็นเซิร์ฟเวอร์เดียวที่มีที่จัดเก็บในตัวเครื่องหรือต่อพ่วงกับ SAN หรือคลัสเตอร์ของเซิร์ฟเวอร์ที่เชื่อมต่อกับ SAN ที่ใช้ร่วมกัน ระบบประเภทนี้ถูก จำกัด โดยปริมาณงานที่มีอยู่จากระบบย่อยหน่วยเก็บข้อมูล
'Sharding' เป็นคำที่ใช้อธิบายการแยกฐานข้อมูลระหว่างเซิร์ฟเวอร์ที่มีอยู่จริงในสถาปัตยกรรมที่ไม่มีการแบ่งปัน แพลตฟอร์มต่าง ๆ จะมีการสนับสนุนที่มากหรือน้อยสำหรับฐานข้อมูลที่แตกออก ในแวดวง Teradata คำนี้ไม่ได้ใช้เพราะ Teradata นำเสนออิมเมจระบบเดียวที่โปร่งใสให้กับลูกค้าแม้ว่าสถาปัตยกรรมฟิสิคัลจะไม่มีการแชร์อะไรเลย
SQL Server เวอร์ชันเก่ากว่ามีการสนับสนุนอย่าง จำกัด สำหรับการแบ่งส่วนผ่านมุมมองแบบแบ่งพาร์ติชันแบบกระจาย Microsoft จัดทำ SQL Server 2008 R2 รุ่นที่สนับสนุนสถาปัตยกรรมแบบไม่มีอะไรใช้ร่วมกันด้วยอิมเมจระบบเดียว แต่รุ่นนี้มีให้สำหรับ OEM เท่านั้นและสามารถซื้อได้ในชุดฮาร์ดแวร์เท่านั้น
สำหรับ 1 พันล้านแถว
สำหรับ 1 พันล้านแถว (เว้นเสียแต่ว่าแต่ละแถวจะกว้างมาก) ไม่มีอะไรที่ใช้ร่วมกันหรือสถาปัตยกรรมที่แตกออกมานั้นสะดวกสบายในขอบเขตของการใช้จ่ายมากเกินไป ไดรฟ์ข้อมูลประเภทนี้สามารถจัดการได้บนเซิร์ฟเวอร์เดียวที่มีสเป็คที่สมเหตุสมผลหากมีระบบย่อยดิสก์ที่รวดเร็วเพียงพอ
Local ดิสก์แนบโดยตรงนั้นคุ้มค่าที่สุดในแง่ของราคาสำหรับประสิทธิภาพ คอนโทรลเลอร์ SAS RAID เดียวสามารถใช้หลายอาร์เรย์และสามารถติดตั้งคอนโทรลเลอร์หลายตัวในเซิร์ฟเวอร์ ขึ้นอยู่กับการกำหนดค่าอาร์เรย์ SAS 24-25 สล็อตที่ทันสมัยสามารถใส่ได้หลายพัน IOPS หรือ 1GB + / วินาทีในประสิทธิภาพการสตรีม เซิร์ฟเวอร์ที่มีบัส PCI-e หลายตัวและคอนโทรลเลอร์หลายตัวสามารถรองรับเพิ่มเติมได้ในทางทฤษฎี
ประเภทของประสิทธิภาพที่จำเป็นสำหรับการทำงานกับฐานข้อมูลขนาด 1 พันล้านแถวสามารถทำได้อย่างง่ายดายและราคาถูกกับฮาร์ดแวร์เซิร์ฟเวอร์สินค้าโภคภัณฑ์และแนบกับที่เก็บข้อมูลประเภทนี้โดยตรง คุณสามารถใช้ SAN ได้ แต่คุณอาจต้องการตัวควบคุม SAN หลายตัวเพื่อให้ได้ประสิทธิภาพที่เท่าเทียมกันและฮาร์ดแวร์มีแนวโน้มที่จะมีลำดับความสำคัญสูงกว่า
ตามคำแนะนำทั่วไปให้ใช้ที่เก็บข้อมูลแนบโดยตรงสำหรับแอปพลิเคชันที่มีข้อกำหนด I / O หนักเว้นแต่คุณจะต้องการเวลาทำงานที่ดี ข้อผิดพลาดในการกำหนดค่าและการควบคุมการเปลี่ยนแปลงเป็นแหล่งหยุดทำงานที่ไม่ได้กำหนดไว้นานกว่าความล้มเหลวของฮาร์ดแวร์ในศูนย์ข้อมูลสมัยใหม่
SAN สามารถมอบแพลตฟอร์มสตอเรจที่จัดการได้ง่ายขึ้นถ้าคุณมีแอพพลิเคชั่นขนาดใหญ่เนื่องจากพวกมันให้ความสะดวกในการจัดการพื้นที่เก็บข้อมูลส่วนกลาง อย่างไรก็ตามสิ่งนี้มาในราคาที่สูงและการได้รับประสิทธิภาพสูงจากโครงสร้างพื้นฐานของ SAN นั้นยากและมีราคาแพง
1 Microsoft สร้าง SQL Server รุ่นคู่ขนาน แต่สามารถใช้ได้ผ่านช่อง OEM ที่มาพร้อมกับฮาร์ดแวร์เท่านั้น รุ่นที่มีอยู่นอกชั้นวางไม่รองรับความสามารถนี้