Ich habe noch nie mit SQL Server-Partitionierung gearbeitet, aber ich stand derzeit vor dem Entwurf einer Datenbank, für die die Volumes dies wahrscheinlich rechtfertigen. Das System ist für Gutscheine. Die Gutscheine sind in der Regel alle sechs Wochen auszustellen, es erfolgt jedoch auch eine Ad-hoc-Ausstellung - z. B. für einen besonderen Anlass. Es gibt 15 Millionen Kunden und für jedes Ausstellungsereignis erhält jeder Kunde 6 verschiedene Coupontypen, was insgesamt 90 Millionen Couponinstanzen ergibt. Wir müssen die Einlösungsdaten der Couponinstanz verfolgen und diese 6 Monate lang aufbewahren, obwohl ein Coupon normalerweise nur sechs Wochen gültig ist. Einlösungsanfragen für einen ungültigen Gutschein gelangen nicht in die Datenbank, da diese vom POS bis validiert werden.
Über einen Zeitraum von sechs Monaten müssen bis zu 360 Millionen Zeilen in der Coupon Instance-Tabelle und bis zu 72 Millionen (unter der Annahme einer Rückzahlungsrate von maximal 20%) in der Einlösungstabelle gespeichert werden. Ich habe das Gefühl, dass diese Zahlen für eine einzelne Partition zu groß sind.
Meine Frage ist - was als Partitionsschlüssel zu verwenden? Ein offensichtlicher Kandidat wäre ein Ausstellungsereignis, das ungefähr 6 Partitionen ergibt. Aber dann denke ich, dass vielleicht sogar das eine Partitionsgröße ergeben würde, die zu groß ist, um eine optimale Leistung zu ermöglichen? Wäre es möglich, durch zwei Schlüssel zu partitionieren, z. B. durch das Ausgabeereignis + die letzte Ziffer der Kunden-ID? Die Logik wäre also:
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...
Ich bin mir auch nicht sicher, welche Spezifikation des Datenbankservers wir benötigen werden. Reichen 16 GB und 8 CPUs aus? Die Datenbank muss in der Lage sein, ein Ergebnis aus der Coupon-Instanztabelle zurückzugeben, das in weniger als einer halben Sekunde auf einem numerischen Barcode-Wert eingegeben wurde. Die erwartete Transaktionsanforderung zum Validieren (Auswählen) und Einlösen (Einfügen) wird voraussichtlich einen Spitzenwert von ungefähr 3.500 pro Minute erreichen.
Der 64-Bit-Datenbankserver SQL Server 2008r2 wird als VM von einem sehr leistungsstarken Host mit Zugriff auf ein SAN mit hoher Leistung und großer Kapazität bereitgestellt.
Ich wäre sehr dankbar für Ratschläge von Personen, die eine SQL Server-Lösung zur Verwaltung ähnlicher Volumes bereitgestellt haben.
Grüße
Rauben.