V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
flash866
V2EX  ›  PHP

话说一紧急项目,哥手一抖,就把图片存到 mysql 里面了,现在发现问题。

  •  
  •   flash866 · 2015-01-13 11:38:39 +08:00 · 4960 次点击
    这是一个创建于 3601 天前的主题,其中的信息可能已经有所发展或是发生改变。

    把三个月的项目周期压缩到2周了,于是哥手抖了,图片一律进了MySQL。
    现在项目上线了,问题出在list页面(PS:列表中哥分页都来不及搞),本来如果是纯文字性的列表是不会有问题的,但是因哥实在是贱,这种情况下还在考虑用户体验,在列表中加了个图片预览列,虽然用户叫好了,但是数据库动不动就报 Mysql gone away。

    因为用户已经看到界面,所以现在无法在去掉那个图片列字段。

    我想了下,问题应该是出在显示list页面时,取出的数据量过于庞大(图片每个大概1M,初始阶段,大概100条数据左右,这样每次一个select后占用的内存在100M左右)。

    还有救没?

    27 条回复    2015-01-16 00:24:32 +08:00
    mhycy
        1
    mhycy  
       2015-01-13 11:39:32 +08:00
    除了立刻搬出来还能咋样?
    xiaogui
        2
    xiaogui  
       2015-01-13 11:40:23 +08:00
    搬出来也很简单的吧。
    cevincheung
        3
    cevincheung  
       2015-01-13 11:42:22 +08:00
    立刻搬出……
    zzNucker
        4
    zzNucker  
       2015-01-13 11:42:22 +08:00
    半夜搬出来吧。。。。
    knightluffy
        5
    knightluffy  
       2015-01-13 11:44:22 +08:00
    图片存数据库,你也是醉了。。
    coolwind
        6
    coolwind  
       2015-01-13 11:53:06 +08:00
    临时 试一试 mysql配置加大 max_allowed_packet = 128M

    然后把图片移出mysql
    SoloCompany
        7
    SoloCompany  
       2015-01-13 12:37:04 +08:00 via Android   ❤️ 1
    可以不一次select啊,比如只select前256字节,读取meta比如图片长宽等等,然后在前端滚动到位置的时候才显示图片
    billwang
        8
    billwang  
       2015-01-13 13:05:21 +08:00
    楼主可知道,现在很多生产环境系统都把二进制文件存入数据库中,只不过是oracle数据库。如果迁出最好接入类似于非结构化平台中去。
    Mac
        9
    Mac  
       2015-01-13 13:24:34 +08:00
    既然还没交付,改成upload到目录有什么难处么?预览也很简单啊,缩略图即可
    em70
        10
    em70  
       2015-01-13 13:30:41 +08:00 via Android
    分页的话也没问题吧
    Actrace
        11
    Actrace  
       2015-01-13 13:37:39 +08:00
    一个是管道的size限制,一个是整取。
    在管道限制不大的情况下,如果多行记录一次无法取出,可以在逻辑上单独去取图片数据,一行一行的取,反正有主键也是瞬间的事情。
    huigeer
        12
    huigeer  
       2015-01-13 13:46:21 +08:00
    醉了, mysql: 怪我咯
    feiyuanqiu
        13
    feiyuanqiu  
       2015-01-13 13:55:50 +08:00
    写脚本搬吧...另外这满篇的「哥」看的真是不舒服
    akira
        14
    akira  
       2015-01-13 14:02:24 +08:00
    图片列字段必须去掉,换成存图片目录或者图片url吧。
    jianghu52
        15
    jianghu52  
       2015-01-13 14:14:43 +08:00
    那不如你先老实儿的把分页做了,这样的话查询,加载啥的都会轻松点吧。
    sun1991
        16
    sun1991  
       2015-01-13 14:26:41 +08:00   ❤️ 1
    再加一列thumbnail, 存放小图. 预览的时候读小图而不是原始尺寸.
    lbp0200
        17
    lbp0200  
       2015-01-13 14:50:39 +08:00
    16楼+1
    cevincheung
        18
    cevincheung  
       2015-01-13 14:52:34 +08:00
    mongodb-gridfs+nginx-gridfs 你绝逼需要
    cst4you
        19
    cst4you  
       2015-01-13 14:53:17 +08:00
    跑个批处理把图片select出来然后保存到文件即可...楼主别懒
    y10n
        20
    y10n  
       2015-01-13 17:34:32 +08:00
    select * 惹祸了
    kaneg
        21
    kaneg  
       2015-01-13 22:20:36 +08:00 via iPhone
    用缓存。类似的设计以前做过,当时是文本转换图片。在第一次访问的时候把内容load出来后写到文件中去,之后访问先查文件在不在,在的话直接redirect过去。
    Daghlny
        22
    Daghlny  
       2015-01-13 23:24:31 +08:00
    以前在学校做项目的时候就把图片加进mysql了。。。
    网址:123books.sinaapp.com
    15ir
        23
    15ir  
       2015-01-13 23:40:11 +08:00
    @Daghlny
    atan
        24
    atan  
       2015-01-14 00:51:05 +08:00
    可以用类似select2那样的组件,支持ajax加载,一次只加载10条,滚动下去后再加载10条。。。
    zeayes
        25
    zeayes  
       2015-01-14 09:20:36 +08:00
    趁现在数据量还不是很大,赶紧迁移出来吧。图片、视频这样的东西还是存文件系统比较好。
    husinhu
        26
    husinhu  
       2015-01-14 09:28:43 +08:00 via iPhone
    @huigeer 哈哈
    Tianpu
        27
    Tianpu  
       2015-01-16 00:24:32 +08:00
    thumbnail存数据库挺合理的,然后用data uri,简直是最优解

    大图没有必要存数据库
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:03 · PVG 21:03 · LAX 05:03 · JFK 08:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.