Je n'ai jamais travaillé avec le partitionnement SQL Server mais je suis actuellement confronté à la conception d'une base de données pour laquelle les volumes le justifient probablement. Le système est destiné aux coupons. Les coupons doivent être émis périodiquement, généralement toutes les six semaines, mais il y aura également une émission ponctuelle - par exemple pour un événement spécial. Il y a 15 millions de clients et pour chaque événement d'émission, chaque client recevra 6 types de coupons différents, ce qui donne un total de 90 millions d'instances de coupons. Nous devons suivre les données de rachat des instances de coupons et les conserver pendant 6 mois, bien que généralement un coupon ne soit valide que pendant six semaines. Toute demande de rachat pour un coupon non valide n'atteindra pas la base de données car elle sera validée par le TPV jusqu'au.
Sur une période de six mois, nous devrons stocker jusqu'à 360 millions de lignes dans le tableau Instance du coupon et jusqu'à 72 millions (en supposant un taux de remboursement maximal de 20%) dans le tableau de remboursement. J'ai l'impression que ces chiffres sont trop gros pour une seule partition?
Ma question est - quoi utiliser comme clé de partition? Un candidat évident serait par événement d'émission, donnant environ 6 partitions. Mais alors je pense que peut-être même cela donnerait une taille de partition trop grande pour permettre des performances optimales? Serait-il possible de partitionner par deux clés, par exemple par événement d'émission + dernier chiffre de l'identifiant client? La logique serait donc:
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...
De plus, je ne suis pas sûr de la spécification du serveur de base de données dont nous aurons besoin. Les 16 Go et 8 processeurs seront-ils suffisants? La base de données doit être en mesure de renvoyer un résultat de la table d'instances de coupons, saisie sur une valeur de code-barres numérique en moins d'une demi-seconde. La demande de transaction attendue pour valider (sélectionner) et racheter (insérer) devrait culminer à environ 3 500 par minute.
Le serveur SQL Server 2008r2 64 bits db sera provisionné en tant que machine virtuelle à partir d'un hôte très puissant avec accès à un SAN hautes performances et de grande capacité.
Je serais très reconnaissant pour tout conseil de ceux qui ont déployé une solution SQL Server pour gérer des volumes similaires.
Cordialement
Rob.