一种简单的数据库分流的算法及实现

04年我在制作某省高考报名系统时使用过这种方法,效果很好但是源代码是基于2003的,今天已经不大适合了. 其实方法很简单: 1、目的:将一个大型数据库分散成几个小型的库,一方面加快查询速度,另一方面最主要的是能够将数据库服务分散到几个不同的服务器上从而增强系统的反映能力。 2、方法:将数据库分散开,如果是连续数字的话,最好划分,例如手机号根据号段即可。身份证根据归属地,都可以。对于字符串类型的例如姓名等复杂一些,可以hash以后再想办法。 3、实际:该方法稳定可靠,我们已经在多个系统中使用多年没有出现过问题。 4、不足:分开的多个数据库如果需要合并统计时比较麻烦。 下边是该方法的具体代码: 1、首先应当配置Web.Config文件 2、一段根据传入关键字进行转向的代码。(传入的关键字中包含2位地域代码,使用该代码进行转向控制)01代表石家庄、02代表。。。 1 /** 2 /// 根据传入的考生号来决定使用哪个数据库进行操作 3 /// 目前定向到市级,将来可以扩充 4 /// 5 /// 6 /// 连接字符串 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、在程序中调用该转向语句 //本示例中是使用数据集中的数据适配器的例子,其他的也一样 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,这样就可以使用了 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/greatlongway/archive/2007/08/17/1747593.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值