MYSQL数据库设计的一些小技巧[整理] 有感
2008-11-04 20:05
239 查看
选表类型:
mysql的myisam表适合读操作大,写操作少;表级锁表
innodb表正好相反;行级锁表
互联网服务,不算支付性的服务外,互动产品,新闻系统等等一般都是读多,写少。用myisam表比较合适。
表的设计
定长表:所有列的字段长度都是定长的。可以去查mysql的手册不定长字段是VARCHAR、BLOB或TEXT。int char都是定长的,定长表占用空间会大。
动态表:就是字段不是都定长的。
定长表要比动态表检索速度快。
软件系统的设计习惯是把每张表都分清很明确的功能,比如用户表都是用户信息,如果需要同时从留言表取数据,又从用户表取用户信息的时候,就会采用联合查 询,有的时候一些操作还会用left,join等各种复杂sql语句,没准还要用mysql的函数。如果是针对访问量,读取量很大的互联网服务时,同时并 发去读,数据量又大,很可怕。最好是如果数据不会修改,在常用的表上有冗余字段,能够做到一次读,把数据都拿到;可以有冗余的写操作,但减少复杂的查询操 作。
在设计表的时候要将这个表的所有字段类型占用的字节数求和,并乘以你的预期(如:存储100W数据量),就是整张表未来会占用容量。
拆表 拆库
拆表就是将一张表复制N多张,里面分别存放不用内容的数据,数据的存放是用HASH算法来决定放入哪张表。
例如用户表user,传统情况就是一张表,拆表就是将表复制为user_01,user_02等里面都存放了格式一样的不同用户数据。
拆库和拆表类似,就是库的复制。
拆表或拆库有很多的HASH算法,主要目的就是减少表的数据量,用算法保证每个表的数据量平均,请求,读写操作被分摊降低压力,而且安全,出了问题最多是一部分用户受影响。缺点就是检索不方便,需要另想办法。
很多网站为了前期省事都会采用discuz的产品,如bbs,blog等,网上有不少关于这个产品的介绍和优化方法,没细研究过,听过一些网站介绍他们的 优化方法时,对于数据库主要是采用主从的方法,将数据库的读写分离来提高性能,但是个人觉得这种办法在数据量到了规模的时候就OVER了,并发和读写操作 没提升,数据也是会逐渐累计超过限制。
互联网服务由于要应对大数据量,大请求量,所以在设计开发的时候就不要太学院派,不要力图达到数据库、程序的设计“优美”,性能是最要紧的。
也就是快慢表的拆分,如果这个用户是活动频繁用户,放块表;2,很长时间才登录,放慢表..
细想WOW的登录检索,那叫个快啊..这方面值得研究.
mysql的myisam表适合读操作大,写操作少;表级锁表
innodb表正好相反;行级锁表
互联网服务,不算支付性的服务外,互动产品,新闻系统等等一般都是读多,写少。用myisam表比较合适。
表的设计
定长表:所有列的字段长度都是定长的。可以去查mysql的手册不定长字段是VARCHAR、BLOB或TEXT。int char都是定长的,定长表占用空间会大。
动态表:就是字段不是都定长的。
定长表要比动态表检索速度快。
软件系统的设计习惯是把每张表都分清很明确的功能,比如用户表都是用户信息,如果需要同时从留言表取数据,又从用户表取用户信息的时候,就会采用联合查 询,有的时候一些操作还会用left,join等各种复杂sql语句,没准还要用mysql的函数。如果是针对访问量,读取量很大的互联网服务时,同时并 发去读,数据量又大,很可怕。最好是如果数据不会修改,在常用的表上有冗余字段,能够做到一次读,把数据都拿到;可以有冗余的写操作,但减少复杂的查询操 作。
在设计表的时候要将这个表的所有字段类型占用的字节数求和,并乘以你的预期(如:存储100W数据量),就是整张表未来会占用容量。
拆表 拆库
拆表就是将一张表复制N多张,里面分别存放不用内容的数据,数据的存放是用HASH算法来决定放入哪张表。
例如用户表user,传统情况就是一张表,拆表就是将表复制为user_01,user_02等里面都存放了格式一样的不同用户数据。
拆库和拆表类似,就是库的复制。
拆表或拆库有很多的HASH算法,主要目的就是减少表的数据量,用算法保证每个表的数据量平均,请求,读写操作被分摊降低压力,而且安全,出了问题最多是一部分用户受影响。缺点就是检索不方便,需要另想办法。
很多网站为了前期省事都会采用discuz的产品,如bbs,blog等,网上有不少关于这个产品的介绍和优化方法,没细研究过,听过一些网站介绍他们的 优化方法时,对于数据库主要是采用主从的方法,将数据库的读写分离来提高性能,但是个人觉得这种办法在数据量到了规模的时候就OVER了,并发和读写操作 没提升,数据也是会逐渐累计超过限制。
互联网服务由于要应对大数据量,大请求量,所以在设计开发的时候就不要太学院派,不要力图达到数据库、程序的设计“优美”,性能是最要紧的。
也就是快慢表的拆分,如果这个用户是活动频繁用户,放块表;2,很长时间才登录,放慢表..
细想WOW的登录检索,那叫个快啊..这方面值得研究.
相关文章推荐
- MYSQL数据库设计的一些小技巧
- 我在网页设计中遇到的一些问题以及处理方法整理
- Linux一些使用小技巧(让你的操作方便犀利)(综合整理)
- 一些非常实用且容易操作的整理电脑和管理文件的小技巧
- 数据库设计的一些小技巧
- 关于NS2跨层设计实现的一些有用资料整理
- 整理关于java开发工具使用过程中一些小技巧来提高开发效率
- 对 java 设计模式的一些了解 (正在学习整理中)
- python 设计及调试的一些小技巧
- iOS 开发一些小技巧(收集整理)
- AngularJS 整理一些优化的小技巧
- 一些最基本的开发设计原则方法(整理)
- 对C#中的web访问mysql数据库的一些知识点进行了整理归纳总结
- 关于iOS,Xcode的一些小技巧整理
- Mysql数据库相关一些知识整理
- 同事整理的对于系统架构设计时的一些指导思想
- 整理一些css在使用中的小技巧(进行中)
- 收集整理mysql数据库设计规范与原则
- 代码容错性及设计的一些小技巧(持续更新)
- 关于游戏架构设计的一些整理吧