如果用 CodeIgniter 框架开发一个 V2EX 这样访问量大小的网站,数据库用什么好呢? 本来 PHP 配 MySQL 挺好的,但是好像 V2EX 上的讨论大家觉得 MySQL 是个坑。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
meteor2013
V2EX    PHP

如果用 CodeIgniter 框架开发一个 V2EX 这样访问量大小的网站,数据库用什么好呢? 本来 PHP 配 MySQL 挺好的,但是好像 V2EX 上的讨论大家觉得 MySQL 是个坑。

  •  
  •   meteor2013 Feb 18, 2014 6621 views
    This topic created in 4454 days ago, the information mentioned may be changed or developed.
    35 replies    2014-06-13 17:08:46 +08:00
    Shared
        1
    Shared  
       Feb 18, 2014
    坑?
    wwek
        2
    wwek  
       Feb 18, 2014
    什么东西都可以是坑`` 用kv的没坑了?
    我看未必.
    我还是选mysql + nosql搭配
    shiny
        3
    shiny  
    PRO
       Feb 18, 2014
    你确定不是说MongoDB才是个坑…… MySQL哪里坑了……
    chloerei
        4
    chloerei  
       Feb 18, 2014   1
    照这么说编程就是个坑。
    simapple
        5
    simapple  
       Feb 18, 2014
    想的多了,先做出一个再说
    2code
        6
    2code  
       Feb 18, 2014
    淘宝都可以使用mysql,你怕啥
    hsu
        7
    hsu  
       Feb 18, 2014 via iPhone
    1.V2EX只是社区,说MySQL是坑只可能是某些人的个人观点
    2.数据库只是工具,为了更好的达成你的目标,你可以选择合适的工具,但不能觉得某种工具是坑,关键点在于工具使用者自身
    3.我觉得连Facebook都可以用MySQL,那么我猜测你的站点应该也可以。
    FrankFang128
        8
    FrankFang128  
       Feb 18, 2014 via Android   1
    MySQL 是坑的话谁敢说自己不是坑
    raincious
        9
    raincious  
       Feb 18, 2014
    不是坑。V2EX后台不知道怎么运算的,但是由于这么多功能(比如Block判断等等),占用了很多数据库的运算资源。优化好了(或者干脆去掉)或许能省掉一些。

    另外用Redis给我最大的感觉是,原先用MySQL,只跟服务器聊一句然后取出所有数据的习惯改变了。用Redis的时候得蹭在服务器上,跟服务器聊很多句才能把数据取全。(先跟数据库连接,然后取list,然后根据list取hash什么的)。

    当然,如果想节省MySQL,可以利用缓存。渲染好页面之后,把页面存在那里,访问的时候读缓存就好了,数据有变更的时候通知程序清理然后重建缓存,产生页面所需的查询只需要一次。

    反正我的网站被我优化到大部分页面打开时,如果无需判断权限和用户是否登陆(安全相关的操作)的话,不需要蹭任何数据库,只需要从磁盘里把缓存读出来然后输出就好了。

    // 当然,一旦涉及到权限判断,数据库肯定得蹭。但是我限制到每个页面大约10次查询。大部分页面30毫秒内能渲染好。

    // 如果不蹭数据库只读缓存的话,5毫秒内几乎能搞定。
    misaka
        10
    misaka  
       Feb 18, 2014 via iPad
    照这个标准啥不坑啊。。。这些都只是工具而已,很无辜的。
    chenwl
        11
    chenwl  
       Feb 18, 2014
    用过的人玩的好才会觉得其中的坑,你没用过怎么知道坑在哪?说坑那是为了给别人参考而已。坑不是缺陷,只是一个想象中的不同。
    highkay
        12
    highkay  
       Feb 18, 2014
    mysql的复杂度在访问量上去以后运维压力直线上升,官方的解决方案还很初级,比较依赖第三方的解决方案,比如前面提到的facebook,淘宝和360开源的项目。相当来讲新一代的数据库,比如nosql的mongo,对scale out的需求充分的进行了设计,所以整体解决方案上是一种简化。另外,v2ex真不算什么大访问量……所以mysql妥妥的没问题,redis用来辅助处理一些关系型数据库不太好解决的需求。脱离具体需求谈数据库没什么意义。
    Mihuwa
        13
    Mihuwa  
       Feb 18, 2014
    先做出来再说吧,“坑”后续还是可以填的。
    kstsca
        14
    kstsca  
       Feb 18, 2014
    就算v2ex 用mysql 保证坨坨的。还没到那层面呢,真到那层面,各服务都是坑了。。
    kchum
        15
    kchum  
       Feb 18, 2014
    看设计,能缓存的都缓存吧。
    tioover
        16
    tioover  
       Feb 18, 2014
    说 mysql 是坑是不是因为甲骨文老贼?可以用开源分支
    justfindu
        17
    justfindu  
       Feb 18, 2014
    先做一个出来再说是不是坑~ 反正ci换DBDriver还是挺方便~
    66beta
        18
    66beta  
       Feb 18, 2014
    我觉得坑是CI,换Laravel :)
    Sivan
        19
    Sivan  
       Feb 18, 2014
    被忽悠的不用 MySQL 才是坑。
    yakczh
        20
    yakczh  
       Feb 18, 2014
    ci才是坑,先忽悠进来,然后说不开发了
    ichou
        21
    ichou  
       Feb 18, 2014
    坑吗?
    johnlui
        22
    johnlui  
       Feb 18, 2014
    其实,我个人觉得,v2ex这么大规模的网站就用redis是不必要的。加一层文件缓存足矣。
    MySQL是不是坑?类比PHP来说:天天有人骂php,但是世界上语言有两种,天天被人骂的,和根本没人用的。
    我始终对数据库系统怀有敬畏之心,数据库系统是一套单独系统,不依赖任何语言,自己存储、管理数据,还能以如此高的速度取出数据,MySQL还免费给用,业界良心呐。。。
    wwqgtxx
        23
    wwqgtxx  
       Feb 18, 2014 via Android
    v2说mysql不好是因为要尽量减小工作量和服务器资源开销带来的服务器成本
    对于正常网站来说,mysql绰绰有余
    pubby
        24
    pubby  
       Feb 18, 2014
    看具体应用啊,关系型数据你不用mysql不是自己找坑吗
    lyragosa
        25
    lyragosa  
       Feb 19, 2014
    mysql都是坑了,sqlserver哭晕在厕所里。
    meteor2013
        26
    meteor2013  
    OP
       Feb 19, 2014
    workaholic
        27
    workaholic  
       Feb 19, 2014 via Android
    v2用的就是.mysql+redis
    spoonwep
        28
    spoonwep  
       Feb 19, 2014
    发现LZ被围攻了,其实工具用得好的话都差不多,比如众所周知的FB
    crossmaya
        29
    crossmaya  
       Feb 24, 2014
    mongodb是坑吧,你这外语能力有待提高啊,兄弟。。
    meteor2013
        30
    meteor2013  
    OP
       Feb 25, 2014
    jevonszmx
        31
    jevonszmx  
       Mar 26, 2014
    @raincious
    你需要varnish~~
    raincious
        32
    raincious  
       Mar 26, 2014
    @jevonszmx

    动态页面,不能用 varnish。我的页面有一部分是动态的(比如用户名之类),另一部分是静态的(文章内容)。
    jevonszmx
        33
    jevonszmx  
       Mar 26, 2014
    @raincious
    这个无所谓,需要用户信息的地方用异步,整个页面用varnish缓存即可,如果实时性高,适当减少varnish缓存时间,即使1分钟,也能减少非常多的请求压力。
    我们网站就是,全站topbar上有用户信息,页面有用户信息,都是默认显示正常的信息,异步接口判断已登录则替换掉对应的内容即可。
    raincious
        34
    raincious  
       Mar 26, 2014
    @jevonszmx

    哦,你的情况是静态页面了,然后再用Javascript调程序去获得用户会话信息对吧?这样确实是一种非常有效的手段来减少压力请求。而且可以将静态内容分散到不同的服务器上,这样只需要消耗显示静态内容的资源就能显示整个页面有价值的内容,不需要去搜寻某个位于中心的库。

    不过嗯,我的情况不太一样。一方面是因为懒+我没有那么大的请求压力,第二是实时性内容和静态内容会经常混在一起,不想把目前的架构搞复杂了。

    所以其实还是各种问题和解决方案放在哪里,选择最合适的吧。
    jevonszmx
        35
    jevonszmx  
       Jun 13, 2014
    @raincious
    这种是非常有效的方法,可以减少非常多的查询压力,你可以观察taobao、jd之类的网站。

    而varnish之类的前端缓存,比常规的静态页面灵活很多,可以写很复杂的判断逻辑,比如指定缓存某个url格式的页面内容,expire也非常好控制。
    About     Help     Advertise     Blog     API     FAQ     Solana     1574 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 99ms UTC 16:25 PVG 00:25 LAX 09:25 JFK 12:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86