ฉันไม่เคยทำงานกับการแบ่งพาร์ติชันของเซิร์ฟเวอร์ SQL แต่ขณะนี้ฉันต้องเผชิญกับการออกแบบฐานข้อมูลซึ่งอาจรับประกันไดรฟ์ ระบบนี้ใช้สำหรับคูปอง คูปองจะออกเป็นระยะโดยปกติทุก ๆ หกสัปดาห์แม้ว่าจะมีการออกโฆษณาแบบเฉพาะกิจเช่นสำหรับกิจกรรมพิเศษ มีลูกค้า 15 ล้านคนและสำหรับการออกแต่ละครั้งลูกค้าทุกคนจะได้รับคูปอง 6 ประเภทที่แตกต่างกันโดยมีคูปองรวม 90 ล้านใบ เราจำเป็นต้องติดตามข้อมูลการแลกรับอินสแตนซ์คูปองและเก็บรักษาไว้เป็นเวลา 6 เดือนถึงแม้ว่าโดยทั่วไปแล้วคูปองจะใช้ได้เพียงหกสัปดาห์เท่านั้น คำขอแลกรางวัลใด ๆ สำหรับคูปองที่ไม่ถูกต้องจะไม่สามารถเข้าถึงฐานข้อมูลได้เพราะจะทำการตรวจสอบโดย POS จนถึง
ในช่วงเวลาหกเดือนเราจะต้องเก็บแถวได้ 360 ล้านแถวในตารางอินสแตนซ์คูปองและมากถึง 72 ล้านแถว (สมมติว่ามีอัตราการไถ่ถอนสูงสุด 20%) ในตารางแลกซื้อ ฉันรู้สึกว่าตัวเลขเหล่านี้ใหญ่เกินไปสำหรับพาร์ติชันเดียวหรือไม่
คำถามของฉันคืออะไรใช้เป็นคีย์พาร์ติชัน หนึ่งในผู้สมัครที่เห็นได้ชัดคือการออกงานโดยให้พาร์ทิชั่นประมาณ 6 ครั้ง แต่ฉันคิดว่าอาจเป็นไปได้ว่าขนาดพาร์ทิชันที่ใหญ่เกินไปที่จะให้มีประสิทธิภาพสูงสุด? มันจะเป็นไปได้ที่จะแบ่งพาร์ติชันด้วยสองปุ่มเช่นโดยการออกอีเวนต์ + ตัวเลขสุดท้ายของรหัสลูกค้าหรือไม่ ดังนั้นตรรกะจะเป็น:
If issuance event = 1 and last digit of customer id < 5 then
Store in partition 1
Else if issuance event = 1 and last digit of customer id >4 then
Store in partition 2
Else if issuance event =2 and last digit of customer id <5 then
Store in partition 3
Else if issuance event =2 and last digit of customer id >4 then
Store in partition 4
Etc...
นอกจากนี้ฉันไม่แน่ใจเกี่ยวกับข้อมูลจำเพาะของเซิร์ฟเวอร์ฐานข้อมูลที่เราต้องการ 16gb และ 8CPU จะเพียงพอหรือไม่ db ต้องสามารถส่งคืนผลลัพธ์จากตารางอินสแตนซ์คูปองโดยป้อนค่าบาร์โค้ดเป็นตัวเลขในเวลาน้อยกว่าครึ่งวินาที คำขอธุรกรรมที่คาดไว้สำหรับการตรวจสอบความถูกต้อง (เลือก) และแลก (แทรก) คาดว่าจะสูงสุดที่ประมาณ 3,500 ต่อนาที
เซิร์ฟเวอร์ SQL Server 2008r2 64 บิต db จะถูกจัดเตรียมเป็น VM จากโฮสต์ที่มีประสิทธิภาพมากพร้อมการเข้าถึงประสิทธิภาพสูงและ SAN ความจุขนาดใหญ่
ฉันจะขอบคุณมากสำหรับคำแนะนำใด ๆ จากผู้ที่ได้ปรับใช้โซลูชัน SQL Server เพื่อจัดการปริมาณที่คล้ายกัน
ความนับถือ
ปล้น.