百万行mysql数据库优化(补充)
我上大学的那个时候喜欢研究一些数据库的技术,那时候觉得数据处理很重要,而且数据优化也是相当重要的,看了很多数据库方面的资料,虽然在实际的项目也遇到过一些数据库优化的任务,完成之后还是有些心情愉快。但是一直没有遇到过数据优化的DBA工作。个人也是从事java开发和一些采集监控系统,但是做过的项目也不算是很到,没有遇到过10万以上的监控采集点的项目,也有想过在开发工程中用下内存数据库,但是做过的项目还是没有必要使用到内存数据库。遇到的系统瓶颈大概是以下8个方面:
1 磁盘I/O:磁盘IO读写速度要比内存慢很多,内存要比磁盘快10万倍~100万倍的速度。如果程序在运行过程中,如果IO操作效率低下将会是系统的瓶颈。
2 网络操作:对网络数据进行操作时由于网络的不确定性也将成为系统的瓶颈。
3 CPU:对CPU的争夺情况也将可能成为系统的瓶颈。
4 异常:异常的处理是一个很耗费资源的过程,如果系统频繁出现异常的处理将成为系统的瓶颈。
5 数据库:对数据库的操作,如果数据库中的数据量逐渐增加,将会使数据库的操作花费的时间也逐渐增加,将成为系统的瓶颈。
6 锁竞争:对高并发程序来说,如果存在激烈的锁竞争,也会对性能带来巨大的开销。将会成为系统的瓶颈。
7 内存:如果内存分配的不合理,也将会成为系统的瓶颈(内存交换频繁将可能存在系统耗费资源多)。
8 系统处理的访问量:如果系统承受的访问量大也将成为系统的瓶颈。
前期提到的技术路线有
分析表的使用情况,频繁增删的,用链式结构;频繁查改的,用顺序结构。频繁查找字段,加入索引,索引覆盖,从索引上获取全部数据。
分析E-R,实现3个范式的数据库完整性,减少数据冗余。
对大数据表,分表处理,包括水平拆分和垂直拆分
优化字段类型,能确定varchar字段长度的尽量长度给小。
页面查询的时候,分页查询数据库内容,采用select * 尽量使用确定的字段写出来并且确定只有查询1条的数据一定要使用limit 1 ,查询尽量能使用limit就要使用limit,这样能有复杂的流程换取时间。
一次操作数据量适中,不用3重循环来处理数据,不要无限制的封装函数,特别是循环量大的函数一定要注意。
关于读写分离,如果数据库压力很大,一台机器支撑不了,用mysql复制实现多台机器同步,我觉得上百万的数据这个还是没有必要用到。
如果for循环比较多,可以尝试将改成for(int i=0;i<x;i=i+n)这样的方式来优化循环,循环是比较拖累程序的。
在for循环能一些对字符串的操作频繁的时候注意数据类型的选择,这个也是很重要的。
如果存在乘除法的语句能够用位运算代替的尽量用位运算,这样效率更高。
异常处理的过程最好不要放在for循环之中,这样会拖慢系统性能。
百万条数据量主要优化是在代码优化之中并且效果明显。而且只有在运维的时候了解实际的运行状况才能知道系统的瓶颈在哪里。
具体实施的方案1:使用数据库连接池,创建多个数据库连接放在连接池中,当用户提交数据时直接从数据库中拿到数据库的连接操作并行向数据库中插入数据,这样会节省很多时间到达优化的效果,我做了下测试在数据库表中的数据到达到了200多万时,也能达到要求但是这样占用的数据库连接比较多,资源占用比较多。基本的流程图如下:
具体实施的方案2:在用户请求数据时数据库先不存在响应,先缓存数据,等到达时间,1秒或者是500毫秒,也可以是缓存上线1000条数据之后,打开连接一起存入到数据库中,这样对性能的优化效果更好,基本流程如下图:
通过测试在数据库中数据到达200万条的时候插入数据为1000条时,能到达201毫秒的时间,优化的效果很好,并且占用资源少。
该系统的数据量不大建议使用第二种方式。
百万行mysql数据库优化(补充)的更多相关文章
- 百万行mysql数据库优化和10G大文件上传方案
百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 50多条mysql数据库优化建议
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...
- 30多条mysql数据库优化方法【转】
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 转载:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 从运维角度来分析mysql数据库优化的一些关键点【转】
概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...
- mysql 数据库优化第一篇(基础)
Mysql数据库优化 1. 优化概述 存储层:存储引擎.字段类型选择.范式设计 设计层:索引.缓存.分区(分表) 架构层:多个mysql服务器设置,读写分离(主从模式) sql语句层:多个sql语句都 ...
- mysql数据库优化课程---10、mysql数据库分组聚合
mysql数据库优化课程---10.mysql数据库分组聚合 一.总结 一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from ...
- Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)
转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...
随机推荐
- C# WinForm开发系列 - WebBrowser
原文:C# WinForm开发系列 - WebBrowser 介绍Vs 2005中带的WebBrowser控件使用以及一些疑难问题的解决方法, 如如何正确显示中文, 屏蔽右键菜单, 设置代理等; 收集 ...
- Asp.net MVC + EF + Spring.Net 项目实践(二)
这一篇主要介绍数据库和entity framework集成 1. 先创建数据库,很简单的几张表,但也涉及了一些主外键关系.联合主键等,关系图如下(DB脚本在最后) 2. 打开VS,现在建立Model实 ...
- jmeter java请求
demo下载地址http://yun.baidu.com/share/link?shareid=4277735898&uk=925574576 1.引用jmeter的jar包 到jmeter的 ...
- Oracle中注意用户的访问权限
新增表.序列.存储过程等,要注意用户(例如System)的权限.如果在增删改查过程中出现数据库读写权限的报错,则在建表(或者序列.存储过程等)时,在脚本前面加 GRANT CREATE TABLE T ...
- leetcode第24题--Reverse Nodes in k-Group
problem: Given a linked list, reverse the nodes of a linked list k at a time and return its modified ...
- DynamicResource与StaticResource的区别
原文:DynamicResource与StaticResource的区别 2008-06-20 12:16:12 静态资源在第一次编译后即确定其对象或值,之后不能对其进行修改.动态资源则是在运行时决定 ...
- 一步一步实现基于Task的Promise库(二)all和any方法的设计和实现
在上一篇中我们已经初步完成了Task类,如果仅仅是这些,那么没有多大意义,因为网上这类js库有很多,现在我们来些更复杂的使用场景. 如果我们现在有这样一个需求:我们要先读取aa.txt的内容,然后去后 ...
- modalDialog的使用,图片切换,点击图片时打开一个窗体,并显示信息
//主窗体 //与open的区别:1.参数二是传递的参数 2.属性设置格式:属性=属性值; 3.dialogHeight与dialogWidth没有单位,即需要自己加上px //window.show ...
- Carmichael Numbers - PC110702
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10006.html 原创:Carm ...
- 实现Client Credentials Grant
[OAuth]基于DotNetOpenAuth实现Client Credentials Grant Client Credentials Grant是指直接由Client向Authorizatio ...