04年我在制作某省高考报名系统时使用过这种方法,效果很好但是源代码是基于2003的,今天已经不大适合了.
其实方法很简单:
1、目的:将一个大型数据库分散成几个小型的库,一方面加快查询速度,另一方面最主要的是能够将 数据库服务分散到几个不同的服务器上从而增强系统的反映能力。
2、方法:将数据库分散开,如果是连续数字的话,最好划分,例如手机号根据号段即可。身份证根据归属地,都可以。对于字符串类型的例如姓名等复杂一些,可以hash以后再想办法。
3、实际:该方法稳定可靠,我们已经在多个系统中使用多年没有出现过问题。
4、不足:分开的多个数据库如果需要合并统计时比较麻烦。
下边是该方法的具体代码:
1、首先应当配置Web.Config文件
<
connectionStrings
>
<
add name
=
"
zy00
"
connectionString
=
"
Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/zhiyuan_Data.MDF;Integrated Security=True;User Instance=True
"
providerName
=
"
System.Data.SqlClient
"
/>
<
add name
=
"
zy01
"
connectionString
=
"
Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/zhiyuan_Data.MDF;Integrated Security=True;User Instance=True
"
providerName
=
"
System.Data.SqlClient
"
/>
<
add name
=
"
zy02
"
connectionString
=
"
Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/zhiyuan_Data.MDF;Integrated Security=True;User Instance=True
"
providerName
=
"
System.Data.SqlClient
"
/>
<
add name
=
"
zy03
"
connectionString
=
"
Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/zhiyuan_Data.MDF;Integrated Security=True;User Instance=True
"
providerName
=
"
System.Data.SqlClient
"
/>
<!--
以下代码省略:说明zy00代表志愿00库,其实该库并能不使用。只是为了增强程序强壮性,如果不能正确定位其他库才转向此库操作。
剩余的其他库依次编号更在后边即可,可以有任意多个。
-->
</
connectionStrings
>
2、一段根据传入关键字进行转向的代码。(传入的关键字中包含2位地域代码,使用该代码进行转向控制)01代表石家庄、02代表。。。
//
本示例中是使用数据集中的数据适配器的例子,其他的也一样
zhiyuansTableAdapters.tzhiyuanyxTableAdapter zyapt
=
new
zhiyuansTableAdapters.tzhiyuanyxTableAdapter();
//
建好以后的adapt需要根据考生号自动定向连接
zyapt.Connection.ConnectionString
=
zhiyuan.changeconbyksh(ksh);
zhiyuans.tzhiyuanyxDataTable tablezhiyuan
=
new
zhiyuans.tzhiyuanyxDataTable();
zyapt.getkszhiyuan(tablezhiyuan, ksh, pcdm, zyh);
ok,这样就可以使用了
其实方法很简单:
1、目的:将一个大型数据库分散成几个小型的库,一方面加快查询速度,另一方面最主要的是能够将 数据库服务分散到几个不同的服务器上从而增强系统的反映能力。
2、方法:将数据库分散开,如果是连续数字的话,最好划分,例如手机号根据号段即可。身份证根据归属地,都可以。对于字符串类型的例如姓名等复杂一些,可以hash以后再想办法。
3、实际:该方法稳定可靠,我们已经在多个系统中使用多年没有出现过问题。
4、不足:分开的多个数据库如果需要合并统计时比较麻烦。
下边是该方法的具体代码:
1、首先应当配置Web.Config文件














1
/**/
/// <summary>
2
/// 根据传入的考生号来决定使用哪个数据库进行操作
3
/// 目前定向到市级,将来可以扩充
4
/// </summary>
5
/// <param name="ksh"/"bmddm"></param>
6
/// <returns>连接字符串</returns>
7
public
static
string
changeconbyksh(
string
ksh)
8
{
9
/**////ksh的第5、6位为地市代码,需要根据相应的地市代码进行判断,取用相应的字符串
10
///
11
//为了复用该程序,在这里传入的参数可以是ksh 或bmddm需要判断,总位数以及区域代码位置不同
12
string strdishi="00";
13
if (ksh.Trim().Length == 6)
14
{
15
strdishi = ksh.Trim().Substring(0, 2);
16
}
17
else
18
{
19
strdishi = ksh.Substring(4, 2);
20
}
21
//数据库前缀,本例中仅对志愿库操作。
22
string prefixes = "zy";
23
//将要返回的连接
24
string strcon="";
25
switch(strdishi)
26
{
27
case "01":
28
strcon = ConfigurationManager.ConnectionStrings[prefixes+strdishi].ToString();
29
break;
30
case "02":
31
strcon = ConfigurationManager.ConnectionStrings[prefixes + strdishi].ToString();
32
break;
33
case "03":
34
strcon = ConfigurationManager.ConnectionStrings[prefixes + strdishi].ToString();
35
break;
36
//以下省略。。。
37
default: //如果不能正确定位则返回一个预先定义好的垃圾回收库,1、避免返回异常。2、收集数据判断错误原因。
38
strcon = ConfigurationManager.ConnectionStrings[prefixes + "00"].ToString();
39
break;
40
}
41
return strcon;
42
}
3、在程序中调用该转向语句


2

3

4

5

6

7

8



9


10

11

12

13

14



15

16

17

18



19

20

21

22

23

24

25

26



27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42






