Référer l'image
Mon scénario
I1 et I2 sont mes instances de server SQL qui peuvent être dans le même server ou server différent. À l'intérieur des petites boîtes représente les bases de données à l'intérieur des instances sql.
Le nombre près de chaque boîte représente la quantité de données qu'une personne peut stocker. c'est à dire . Base de données ayant 30 peut capable de stocker datatables de 30 users. Il y aura n nombre de servers et d'instances et de bases de données, ce qui peut être échelonnable.
La capacité prévue pour I1
est de 60(10+20+30)
.
Nous avons une autre database master qui détaille les servers, les instances et la database. En utilisant cela, nous pouvons empêcher l'utilisation d'une database avec un champ de bits. Donc, si j'arrête la database ayant la capacité de stocker 20
users I1
alors le stockage total de I1
sera de 40
Mon exigence
Nous avons besoin d'un algorithm qui identifie l'instance du server en fonction de l'espace disponible. Cette équipe d'infrastructure peut donc équilibrer le trafic.
si la limite de I1
est de 30
, I2
est de 20
et I3
est de 10
users seront atsortingbués dans le rapport 3: 2: 1. Si 30 users sont créés, alors I1 contient 15, I2 contient 10 et I3 contient 5.
Comment je peux y arriver? Tout algorithm.
Je dois réaliser ceci dans SQL Server 2008.
Je suis désolé pour ce long essai pour décrire mon problème 🙁 J'espère que quelqu'un m'aidera Merci d'avance.
Un algorithm simple pour ce faire consiste à utiliser un générateur de nombres randoms et un bloc if-else
float db1upper = 10.0 / (10 + 20 + 30) float db2upper = db1upper + 10.0 / (10 + 20 + 30) float rand // [0, 1) if(rand < db1upper) Use db1 else if(rand < db2upper) Use db2 else Use db3
Vous pouvez mettre à jour les valeurs de dbNupper
toutes les allocations X et / ou toutes les X minutes pour refléter les users désaffectés ou pour refléter tout biais dans le générateur de nombres randoms
Tout,
J'ai résolu cela en utilisant une stratégie de pourcentage.
C'est trop simple.
Première fois
Instance I1 (10+20+30) - 60 (60 free spaces - 100% free) Instance I2 (10+20+30) - 60 (60 free spaces - 100% free)
Un nouvel user vient , il va sélectionner le premier.
Instance I1 (10+20+30) - 59(1 space is allocated) So percentage will be around 96%* Instance I2 (10+20+30) - 60(0 space is allocated) So percentage will be 100%
Un autre user
Selects I2 because of 100% free.
Arrêt d'une database de I2, qui peut stocker 30 users. L'espace total pour I2 sera de 20 + 10 (30) et le pourcentage d'espace libre sera réduit. Alors un autre user vient, il va sélectionner l'instance disponible de l'espace libre.
Par exemple: J'ai deux instances I1
ayant une capacité de 1000
users et I2
ayant une capacité de 2
users.
L'algorithm allouera 1000
premier (donc I1
ayant 999
espace libre) et l'user suivant sera affecté à I2.
Donc, le pourcentage de gratuit de I2
sera de 50%
. Donc l'allocation suivante arrive quand I1
atteint 50%
(c.-à-d 500
Que 500
users seront créés à I1
alors seulement I2
utilisera à nouveau).