我上大学的那个时候喜欢研究一些数据库的技术,那时候觉得数据处理很重要,而且数据优化也是相当重要的,看了很多数据库方面的资料,虽然在实际的项目也遇到过一些数据库优化的任务,完成之后还是有些心情愉快。但是一直没有遇到过数据优化的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数据库优化(补充)的更多相关文章

  1. 百万行mysql数据库优化和10G大文件上传方案

    百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...

  2. 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  3. 50多条mysql数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...

  4. 30多条mysql数据库优化方法【转】

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  5. 转载:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. 从运维角度来分析mysql数据库优化的一些关键点【转】

    概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...

  7. mysql 数据库优化第一篇(基础)

    Mysql数据库优化 1. 优化概述 存储层:存储引擎.字段类型选择.范式设计 设计层:索引.缓存.分区(分表) 架构层:多个mysql服务器设置,读写分离(主从模式) sql语句层:多个sql语句都 ...

  8. mysql数据库优化课程---10、mysql数据库分组聚合

    mysql数据库优化课程---10.mysql数据库分组聚合 一.总结 一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from ...

  9. Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)

    转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...

随机推荐

  1. Access to the temp directory is denied. Identity 'NT AUTHORITY\NETWORK SERVICE' under which XmlSerializer is running does not have sufficient permiss

    造成错误的原因是用bat代码清理系统垃圾时造成的权限丢失而引起的 错误描述 1.An error occurred creating the configuration section handler ...

  2. SQL Server调优系列基础篇(常用运算符总结)

    原文:SQL Server调优系列基础篇(常用运算符总结) 前言 上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握 ...

  3. ASP.NET状态服务及session丢失问题解决方案总结

    原文:ASP.NET状态服务及session丢失问题解决方案总结[转载] asp.net Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule ...

  4. s2sh三大框架整合过程(仅供参考)

    三大框架顾名思义就是非常有名的Struts2 ,Hibernate,Spring, 框架整合的方法很多,现在我写一个非常简单的整合过程,相信大家一看就会! 这里使用的struts-2.2.1.1.hi ...

  5. TRS_WCM(拓尔思信息技术有限公司)内容协作平台平台置标经验攻略

    TRS_WCM置标过程中经验积累 版本V4.0-2014.6.24-穿越者7号 目录 1.嵌套模板置标 1 2.栏目名称超链接置标 1 3.列表循环输出文档标题包含超链接 1 4.取既定栏目下第一篇文 ...

  6. UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)

    在本人之前的一篇文章<<Appium基于安卓的各种FindElement的控件定位方法实践和建议>>第二章节谈到Appium可以通过使用UIAutomator的方法去定位And ...

  7. Nancy和MVC的简单对比

    Nancy和MVC的简单对比 在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy ...

  8. 【剑指offer】员工年龄排序

    典型的以空间换时间问题,思路非常重要! /* 员工年龄排序 员工可能有几万名,要求时间复杂度为O(n) 思路:员工的年龄必定在一个范围内,比方0-99,那么我们建立一个大小为100的辅助数组,然后遍历 ...

  9. Canvas入门(3):图像处理和渲染文本

    资源:http://www.ido321.com/997.html 一.图像处理(非特别说明,全部结果均来自最新版Google) 在HTML 5中,不仅能够使用Canvas API绘制图形,也能够用于 ...

  10. ZA7783:MIPI转LVDS/MIPI转RGB888/RGB转LVDS

    在消费类电子越来越白热化阶段.好多设计project师已经開始慢慢关注到成本控制,小金在这里就给大家带来一颗转接IC.希望能帮助贵公司控制成本.当然性能也是可靠的,已经好多产品设计了. 多多不吝赐教 ...