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

    首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一 ...

  2. Cocos2d-x3.0 Json解析

    2dx3.0下一个JSON解析库官员以及集成.我们参考一下吧OK. JSON文件hello.json内容 {"pets":["dog","cat&qu ...

  3. Node.js日志框架选型比較:Winston

    日志对于问题定位.调试,系统性能调优至关重要,尤其是系统复杂以及在线执行的情况下. 好的开发框架都会有一个可开启关闭/可配置记录级别的日志系统.我们从下面几个方面来做选型: 1. 每行日志都须要有准确 ...

  4. 系统预定义委托与Lambda表达式

    NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式   开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Fun ...

  5. jquery-制作选项卡

    强大的jquery-制作选项卡   最近在学习jquery,特地把今天写的一个选项卡源码贴出来.只是做只是梳理,大神们请不要吐槽,如果有更好的方法,欢迎指点.谢谢. css <style> ...

  6. leetcode[159] Longest Substring with At Most Two Distinct Characters

    找到最多含有两个不同字符的子串的最长长度.例如:eoeabc,最长的是eoe为3,其他都为2. 思路: 用p1,p2表示两种字符串的最后一个出现的下标位置.初始p1为0. p2为-1.start初始化 ...

  7. Scala从零开始:使用Intellij IDEA写hello world

    Scala从零开始:使用Intellij IDEA写hello world 分类: Scala |2014-05-23 00:39 |860人阅读   引言 在之前的文章中,我们介绍了如何使用Scal ...

  8. Android学习路径——Android的四个组成部分activity(一)

    一.什么是Activity? Activity简单的说就是一个接口.我们是Android手机上看到的每个界面就是一个activity. 二.Activity的创建 1.定义一个类继承activity, ...

  9. 动态注册HttpModule

    动态注册HttpModule 2014-06-05 08:58 by 汤姆大叔, 757 阅读, 4 评论, 收藏, 编辑 文章内容 通过前面的章节,我们知道HttpApplication在初始化的时 ...

  10. “String.h” 源代码总结

    <String.h>  总结: 常用的函数:   一.memchr: 说明:当第一次遇到字符ch时停止查找.如果成功,返回指向字符ch的指针:否则返回NULL. 代码: #include ...