Asp.Net 网站优化系列之数据库优化分字诀上 分库

如果你有先见之明的话,会给表名,存储过程的名字加上前缀,例如论坛表命名为BBS_xxx,博客表命名为BLOG_xxx;这样的话在分表处理时会比较容易一些。说到这儿也许你会想到外键约束怎么办,我的博客表,论坛帖子表都有用了User表的主键做外键呀。这个很容易处理,我们需要当机立断的删掉外键,这个当机立断可能会带来一些麻烦,我们来分析下可能会遇到一些什么问题:

1. 分成多个库,没了外键了以前的inner join操作要跨库吗?

假定场景:博客表有对用户表的外键引用,我们需要在首页显示博客列表,博客列表需要显示用户名和用户id的信息

之前用户表,博客表在一个库里面的时候我们可以通过外键inner join来取得用户的关联信息,现在用户库和博客库被拆成了两个库,我想对跨库做inner join说no;为什么呢,因为这不适合扩展,假如有一天我们的业务量又增长了我们就需要把用户库挪到另外一台机器上,这要导致inner join跨服务器了,这显然不是一个好办法,那该怎么办呢? 我有两种方案,大家评判好坏:

1)做违反范式的设计,将用户的不变信息用户名和用户id一起存在博客表中,让用户名冗余吧,这样做可以保证取博客数据连带用户名时是非常高效率的

2)我们不再从数据库中取用户名的信息,改从缓存中取,我们可以在缓存中形成一个最近活跃的用户数据池,当我们需要用户名时从这个缓存区中去取。

目前在我的应用中用的是第一种方案,第二种更有伸缩性,第一种存冗余数据只能存用户名,有时候只存用户名就够了,有时候可能会出现不够的问题。

2. 如果用到了根据外键做的级联删除,那这是一个噩梦

对付这个问题,我的方案是修改程序,如果需要级联删除,在程序逻辑中完成,不要在数据库做级联删除了,级联删除是一种隐含在数据库中的逻辑,是一种不好的设计方案。

3. 触发器也可能带来和外键做级联删除同样的麻烦,同样的也是修改程序逻辑,代替这种数据库级别的隐含逻辑。

也许你会说分库之后一定会带来性能的提高吗?这个问题得具体分析,这要看你的服务器性能如何,如果分库之后数据库的cpu,io,内存的压力依然很大;那么您可以将分库之后的其中某一个库迁移到另外一台服务器上,让两台服务器分摊数据访问的压力,肯定会提升性能的。

最后说下,分库分与不分是由数据量、性能要求决定的。下篇分表敬请期待!

(0)

相关推荐

  • Asp.Net性能优化技巧汇总

    本文搜集汇总了Asp.net性能优化的各种技巧,对于Asp.Net开发人员有很好的参考借鉴价值.具体内容如下: 一.选择会话状态存储方式 在Webconfig文件配置: <sessionState mode="???" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"

  • Asp.Net 网站优化系列之数据库优化 分字诀 分表(纵向拆分,横向分区)

    1. 纵向分表 纵向分表是指将一个有20列的表根据列拆分成两个表一个表10列一个表11列,这样单个表的容量就会减少很多,可以提高查询的性能,并在一定程度上减少锁行,锁表带来的性能损耗. 纵向分表的原则是什么呢,应该怎样拆分呢?答案是根据业务逻辑的需要来拆分,对于一张表如果业务上分两次访问某一张表其中一部分数据,那么就可以根据每次访问列的不同来做拆分; 另外还可以根据列更新的频率来拆分,例如某些列每天要更新3次,有些列从创建开始基本上很少更新. 举例: 假定场景,我有一张用户表,这张表包含列: I

  • Asp编码优化技巧

    8条Asp编码优化技巧: 1.声明VBScript变量      在ASP中,对vbscript提供了强劲的支持,能够无缝集成vbscript的函数.方法,这样给扩展ASP的现有功能提供了很大便利.由于ASP中已经模糊了变量类型的概念,所以,在进行ASP与vbscript交互的过程中,很多程序员也惯于不声明vbscript的变量,这样加重了服务器的解析负担,进而影响服务器的响应请求速度. 鉴于此,我们可以象在VB中强制用户进行变量声明一样在vbscript中强制用户进行变量声明.实现方法是在AS

  • Asp.Net 网站优化系列之数据库优化措施 使用主从库(全)

    网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库. 主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的查询操作:从库负责查询较旧数据,做一些对实效性要求较小的分析,报表生成的工作.这样做将数据库的压力分担到两台服务器上从而保证整个系统响应的及时性. SQL Server提供了复制机制来帮我们实现主从库的机制.我们看下如何在sql server 2005中实践: 实践前需要新创建一个Test的数据库

  • asp.net程序优化 尽量减少数据库连接操作

    项目以我自己的设计编码完成,并整合测试.初始化数据时,问题出现了.刚开始体现在客户端接受数据很慢.测试环境环境下,数据库服务器部署在国外,网站部署在公司内部,而且我一直认为我的程序在数据库数据处理这里已经做了足够的优化,包括索引和主键已经做到了合理使用.综上所述,起初的速度问题一直没有引起我的关注. 然而最后问题的关键恰恰出在数据库连接查询方面,频繁查询导致数据初始化速度很慢.刚开始我采取的方法是即用即查:需要数据的时候就从数据库查,有比较多的单表查询返回单个字段的情况.假如我有大概3000条左

  • asp.net小谈网站性能优化

    当然,网站性能优化是多方面的,这里先谈一下这些天来的所获: 1.书写代码的习惯: 再复杂的逻辑,也是从最简单的开始.在书写代码的过程中,很多不好的规范都会影响网站的性能: 以下是整理出来的些许代码习惯: 1)字符串的比较 用 string.Empty 代替 " " 2)在遍历过程中,先定义好计数变量, 再遍历, 这样会减少每次遍历就分配一次内存空间: 复制代码 代码如下: int i; for( i=0; i<100;i++) { // codeing } 3)同样的,用 Str

  • asp.net下数据库操作优化一例

    下面是最初实现的代码,其中 LargerResultProcessor 是一个基类,负责遍历泛型参数 T 所指向的数据库表,并以每页 100 项的方式分页,并对每一项调用 ProcessItem 函数,而子类只需实现 ProcessItem 函数即可: 复制代码 代码如下: public class ItemRenameCompanyId : LargerResultProcessor<Item> { protected override void ProcessItem(Item item)

  • Asp.net 网站性能优化二则分享

    随着后端优化空间越来越小,现在越来越多的网站更注重前端性能的优化,就是浏览器,http层面的优化,这里写两点最简单最有效的 asp.net网站优化技巧. 了解常见的网站性能优化技巧 首先我们要学一些优化网站性能和体验的理论和基础知识,雅虎已经帮我们总结好了,详见参考链接中的几篇文章,有好心人已经给翻译成中文了.这里面提到的一些技巧可操作性都很强,建议每一个网站开发人员都仔细学习并进行实践,可以说不了解这里面说的优化技巧,提升网站前端性能就无从谈起. 诊断网站性能 要想优化网站的前端性能,首先要查

  • ASP.NET性能优化之让浏览器缓存动态网页的方法

    OutputCache是针对所有访问服务器资源的用户,本篇要介绍的浏览器缓存则是针对单个用户,让浏览器在我们的控制下彻底不持续访问服务器上的动态内容,也就是我们要让浏览器变成我们的缓存机制中的一部分,在某些特定的场景下最大化地提升ASP.NET站点的性能.如果说OutputCache是从广度上提升并发效率,则浏览器缓存是从深度上提升效率. 一:HTTP头简介 1.1浏览器第一次请求 假设我们请求一个URL地址,譬如我服务器上的一个静态页面http://192.168.0.77/luminji2/

  • ASP.NET性能优化之减少请求

    这种机制存在的性能损耗,就是服务器的ASP.NET仍旧要接收请求,处理请求.此篇所讲的机制是让浏览器自己去决定是否去读缓存,这样就彻底消灭了针对服务器的请求. 1:减少静态页面请求 要让静态页面支持这个需求,我们需要用到http头中的Cache-Control: max-age.值得注意的是Cache-Control是在HTTP/1.1协议下的标识,它是HTTP/1.0协议中的Expires的升级.为了让静态页支持Cache-Control,一种方案是在IIS中进行设置,如下,我在需要静态缓存的

  • 对于ASP编码问题的深入研究与最终解决方案

    ASP乱码确实棘手,这个说明比较权威.有待研究.哪的资料都不如官方资料权威.今天总算从MSDN中择出了ASP编码问题的解决方案.... ASP乱码确实棘手,这个说明比较权威.有待研究. 哪的资料都不如官方资料权威.今天总算从MSDN中择出了ASP编码问题的解决方案. 下面是MSDN中的一段话. Setting @CODEPAGE explicitly affects literal strings in a single response. Response.CodePage affects d

随机推荐