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每秒。

     
     
     
  • 相关阅读:
    CODING x 百果园 _ 水果零售龙头迈出 DevOps 体系建设第一步
    Nocalhost 亮相 CD Foundation 国内首届 Meetup,Keith Chan 将出席致辞
    做云原生时代标准化工具,实现高效云上研发工作流
    打造数字化软件工厂 —— 一站式 DevOps 平台全景解读
    WePack —— 助力企业渐进式 DevOps 转型
    CODING Compass —— 打造行云流水般的软件工厂
    Nocalhost —— 让云原生开发回归原始而又简单
    CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全
    Nocalhost:云原生开发新体验
    使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3174969.html
Copyright © 2011-2022 走看看