3

enter image description here用于识别所述存储空间

分配算法参考图像

我的方案

I1和I2是其可以是相同的服务器或其他服务器我的SQL服务器实例。 小框内表示sql实例内的数据库。

每个框附近的数字表示一个人可以存储的数据量。即。有30个数据库可以存储30个用户的数据。将有n个服务器,实例和数据库,这可以扩展。

设计用于I1的容量是60(10+20+30)

我们有另一个主数据库,其中的服务器,实例和数据库的细节。使用它我们可以防止使用带有位域的数据库。所以,如果我停止具有能够存储20I1用户,那么数据库的I1总存储将是40

我的要求

我们需要识别基础上的可用空间的服务器实例的算法。这样基础设施团队就可以对流量进行负载平衡。

如果I1极限是30I220I310 用户将在比被分配3:2:1。如果创建了30个用户,那么I1包含15,I2包含10,I3包含5.

我该如何实现这一目标?任何算法。

我需要在SQL Server中实现这个2008年

我很抱歉这一篇长文来形容我的问题:(。希望任何一个可以帮助我。在此先感谢。

回答

0

全部,

我使用百分比策略解决了这个问题。

太简单了。

第一次

Instance I1 (10+20+30) - 60 (60 free spaces - 100% free) 
Instance I2 (10+20+30) - 60 (60 free spaces - 100% free) 

新用户来,它将选择第一个。

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% 

另一个用户

Selects I2 because of 100% free. 

停止I2的数据库,其可能够存储30个用户 为I2所以总空间将是20 + 10(30),并且还百分比自由空间会减少。 因此,另一个用户来,它会选择可用空间的实例。

例如:我有两个实例I1容量为1000用户和I2容量为2用户。

算法将分配1000第一(所以I1999空间免费)和未来的用户将被分配到I2.所以I2的比例免费将50%。因此,当I1达到50%(即500用户将被创建到I1然后只有I2将再次使用)时发生下一个分配。

1

一个简单的算法做到这一点是使用一个随机数发生器和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 

可以为dbNupper更新值每X分配和/或每隔X分钟,以反映正在释放用户或反映任何偏见随机数发生器

+0

感谢Zim-Zam的回答。 – kbvishnu 2013-05-10 05:34:06