zoukankan      html  css  js  c++  java
  • 百万行mysql数据库优化和10G大文件上传方案

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

    最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个mysql而已。

    问题1:针对MySQL Community5.5+版本优化业务执行速度,提高整体系统效率

    测试服务器硬件环境:Intel Core i5,8gb内存,7200rpm硬盘,Win7专业版

    Table名称

    读取频率

    写入频率

    最低连续读取速度

    最低连续写入速度

    预估数据量

    C….

    频繁

    不频繁

    30行/150ms

    100行/s

    百万行

    D…

    频繁

    不频繁

    30行/150ms

    100行/s

    百万行

    De…..

    频繁

    不频繁

    30行/150ms

    10行/s

    万行

    St……

    频繁

    不频繁

    30行/150ms

    100行/s

    百万行

    S……

    频繁

    频繁

    30行/150ms

    100行/s

    百万行

    Pr...

    很频繁

    不频繁

    1000行/s-5000行/s

    100行/s

    百万行/表

    De…….

    很频繁

    频繁

    1000行/s-5000行/s

    1000行/s

    百万行/表

    De……

    很频繁

    频繁

    1000行/s-5000行/s

    1000行/s

    百万行/表

    看到这个想到的是拆分表,不外乎就是表的纵向拆分和横向拆分,我在项目中也遇到过类似的问题,当时也是使用mysql数据库当时大概列数有800多,mysql数据一张表的字段是不能有800多个,最开始测试的是用String 按照JSON的格式存入的数据库,结果发现处理时加入了循环,反而使系统性能变得很慢导出一个Excel也是很吃力的,最后采用分表大概分了9张,解决了问题,其实现在想想是不是使用对象的序列化,将序列化的对象存入数据库呢,使用在从数据库中取出来反序列化使用,当时分表后满足了需求就没再测试对象的序列化的方法了。但是这次给的需求不需要纵向拆表,是否需要横向拆表呢?测试一次先,每次的点子都是要测试的e。

     

     

    有些时候在mysql中还是要善用limit,

     

    除开主键其余没加索引,这样上了百万条的数据查询应该是不存在问题,话不多说优化SQL吧。

    但是插入还是存在问题,是否需要分表呢?如果只是上百万还是可以不用分表的,如果分表就要处理好分页查询,删除和增加的操作,我还是喜欢使用Mysql数据的同步,使用两个mysql数据库,服务器ip分别为ip1和ip2,我们将ip1作为Master数据库,把ip2作为slave服务器,我们可以采用单项同步的方式,就是Master的数据是主数据,然后slave主动去Master哪儿同步数据回来,太晚了,明天测试通过就可以开始优化项目了。

    在数据库中数据在100w多行时插入数据耗时2.822秒的时间,

    问题2:大文件上传居然有这样的要求,

    档案大小

    Action

    最大执行内存占用

    内网最低传输速率(802.11g)

    50mb

    Upload

    5mb

    1mb/s

    500mb

    Upload

    5mb

    1mb/s

    5gb

    Upload

    5mb

    1mb/s

    10gb

    Upload

    5mb

    1mb/s

    50mb

    Download

    5mb

    1mb/s

    500mb

    Download

    5mb

    1mb/s

    5gb

    Download

    5mb

    1mb/s

    10gb

    Download

    5mb

    1mb/s

    以前遇到过一个视频网站上传要求也是最大4G左右,这次居然要上传最大的有10G,

    为提高大文件传输速率,将目标文件分成N块文件,对应启动N个线程通过TCP/IP协议来传 输,传输文件前先检查是否存在该文件的临时文件群,如果存在找出其断点位置进行续传,最后合并文 件。异步分割发送,用目前最主流的FLASH+AJAX技术。ActionScript和HTML5是支持SOCKET通讯的,呵呵。

    实现流程:

    1 客户端向服务端发送传递文件启动信号(发送文件名字)

    2 服务器检查是否包含有该文件所对应的临时文件(eg, 传输file.txt,就检查是否存在temp[i]file.txt,(i为 第N块临时文件)),如果存在就发送所有临时文件的断点位置给客户端

    3 客户端更具文件大小将文件分为N块(每块默认大小为500M,可通过参数进行配置)以加快传输速率, 然后根据服务器返回的断点位置(如果有)对每块文件进行移位,移动到断点位置进行续传,如果服务器 上没有临时文件夹,就进行普通的传送文件

    4当所有线程工作完成,合并所有临时文件夹。

    大文件上传的问题已经实现使用的是serverlight实现的。测试通过了大概是5-6M每秒。

     
     
     
  • 相关阅读:
    (转)在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: SQL 网络接口, error: 26 定位指定的服务器/实例时出错)
    C++面试题集(最全的C\C++试题集和答案)
    linq
    sqlserver 读取多个表的分页存储过程(参考)
    xml xslt linqxml
    .net 文件操作的一点记录
    HTTP压缩
    图片防盗链
    随笔
    datareader 与 应用程序池
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3174969.html
Copyright © 2011-2022 走看看