Algorithme d'allocation pour l'identification de l'espace de stockage

entrez la description de l'image ici

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).