如果你有先见之明的话,会给表名,存储过程的名字加上前缀,例如论坛表命名为BBS_xxx,博客表命名为BLOG_xxx;这样的话在分表处理时会比较容易一些。说到这儿也许你会想到外键约束怎么办,我的博客表,论坛帖子表都有用了User表的主键做外键呀。这个很容易处理,我们需要当机立断的删掉外键,这个当机立断可能会带来一些麻烦,我们来分析下可能会遇到一些什么问题:
1. 分成多个库,没了外键了以前的inner join操作要跨库吗?
假定场景:博客表有对用户表的外键引用,我们需要在首页显示博客列表,博客列表需要显示用户名和用户id的信息
之前用户表,博客表在一个库里面的时候我们可以通过外键inner join来取得用户的关联信息,现在用户库和博客库被拆成了两个库,我想对跨库做inner join说no;为什么呢,因为这不适合扩展,假如有一天我们的业务量又增长了我们就需要把用户库挪到另外一台机器上,这要导致inner join跨服务器了,这显然不是一个好办法,那该怎么办呢? 我有两种方案,大家评判好坏:
1)做违反范式的设计,将用户的不变信息用户名和用户id一起存在博客表中,让用户名冗余吧,这样做可以保证取博客数据连带用户名时是非常高效率的
2)我们不再从数据库中取用户名的信息,改从缓存中取,我们可以在缓存中形成一个最近活跃的用户数据池,当我们需要用户名时从这个缓存区中去取。
目前在我的应用中用的是第一种方案,第二种更有伸缩性,第一种存冗余数据只能存用户名,有时候只存用户名就够了,有时候可能会出现不够的问题。
2. 如果用到了根据外键做的级联删除,那这是一个噩梦
对付这个问题,我的方案是修改程序,如果需要级联删除,在程序逻辑中完成,不要在数据库做级联删除了,级联删除是一种隐含在数据库中的逻辑,是一种不好的设计方案。
3. 触发器也可能带来和外键做级联删除同样的麻烦,同样的也是修改程序逻辑,代替这种数据库级别的隐含逻辑。 也许你会说分库之后一定会带来性能的提高吗?这个问题得具体分析,这要看你的服务器性能如何,如果分库之后数据库的cpu,io,内存的压力依然很大;那么您可以将分库之后的其中某一个库迁移到另外一台服务器上,让两台服务器分摊数据访问的压力,肯定会提升性能的。
最后说下,分库分与不分是由数据量、性能要求决定的。下篇分表敬请期待!
相关推荐:
xampp apache启动失效问题的解决方法
Tab页界面,用jQuery及Ajax技术实现
php self,$this,const,static,->的使用
asp.net cookie的读写实例
在ACCESS和SQL Server下Like 日期类型查询区别
php 代码优化的42条建议 推荐
asp.net Javascript 的几种写法与提示
MySQL 数据类型 详解
写出更好的JavaScript之undefined篇(上)
apache SHTML网页SSI使用详解
Javascript 刷新全集常用代码
IE Firefox 使用自定义标签的区别
用jQuery技术实现Tab页界面之二
jquery pagination插件实现无刷新分页代码
JSP EL表达式详细介绍
asp.net SharpZipLib的压缩与解压问题
面向对象的javascript(笔记)
jquery (show,fadeOut,Animate)简单效果
asp.net dataview做无限极分类的又一用法
JSP request(return String)用法详例
按日期选择最晚日期与最早日期对应的数的差值
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
asp.net 验证码生成和刷新及验证
php 服务器调试 Zend Debugger 的安装教程
DIV+CSS+JS 变灰弹出层
关于页面优化和伪静态
jQuery Ajax之load()方法
SQL Server全文检索查询浅析
php pack与unpack 摸板字符字符含义
jQuery 行级解析读取XML文件(附源码)
asp.net 取消缓存相关问题说明
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
sql 语句中的 NULL值
javascript实现拖拽并替换网页块元素
javascript 线性渐变二
asp 正则 过滤重复字符串的代码
asp.net下利用js实现返回上一页的实现方法小集
php 静态变量的初始化
js 操作符实例代码
写出高性能SQL语句的35条方法分析
select into 和 insert into select 两种表复制语句
C# 获取程序集版本、文件版本
系统存储过程sp_MSforeachtable和sp_MSforeachdb使用说明
深入认识javascript中的eval函数
JS OOP包机制,类创建的方法定义
JavaScript OOP类与继承
学习ExtJS accordion布局
javascript 在网页中的运用(asp.net)
Oracle 子程序参数模式,IN,OUT,NOCOPY
控制input的CSS但不影响CheckBox以及Radio的样式