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

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

  •  
  •   meteor2013 · 2014-02-18 11:55:18 +08:00 · 6048 次点击
    这是一个创建于 3913 天前的主题,其中的信息可能已经有所发展或是发生改变。
    35 条回复    2014-06-13 17:08:46 +08:00
    Shared
        1
    Shared  
       2014-02-18 12:25:38 +08:00
    坑?
    wwek
        2
    wwek  
       2014-02-18 12:25:38 +08:00
    什么东西都可以是坑`` 用kv的没坑了?
    我看未必.
    我还是选mysql + nosql搭配
    shiny
        3
    shiny  
       2014-02-18 12:26:47 +08:00
    你确定不是说MongoDB才是个坑…… MySQL哪里坑了……
    chloerei
        4
    chloerei  
       2014-02-18 12:27:44 +08:00   ❤️ 1
    照这么说编程就是个坑。
    simapple
        5
    simapple  
       2014-02-18 12:32:45 +08:00
    想的多了,先做出一个再说
    2code
        6
    2code  
       2014-02-18 12:34:15 +08:00
    淘宝都可以使用mysql,你怕啥
    hsu
        7
    hsu  
       2014-02-18 12:36:31 +08:00 via iPhone
    1.V2EX只是社区,说MySQL是坑只可能是某些人的个人观点
    2.数据库只是工具,为了更好的达成你的目标,你可以选择合适的工具,但不能觉得某种工具是坑,关键点在于工具使用者自身
    3.我觉得连Facebook都可以用MySQL,那么我猜测你的站点应该也可以。
    FrankFang128
        8
    FrankFang128  
       2014-02-18 12:38:51 +08:00 via Android   ❤️ 1
    MySQL 是坑的话谁敢说自己不是坑
    raincious
        9
    raincious  
       2014-02-18 12:39:48 +08:00
    不是坑。V2EX后台不知道怎么运算的,但是由于这么多功能(比如Block判断等等),占用了很多数据库的运算资源。优化好了(或者干脆去掉)或许能省掉一些。

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

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

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

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

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

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

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

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

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

    而varnish之类的前端缓存,比常规的静态页面灵活很多,可以写很复杂的判断逻辑,比如指定缓存某个url格式的页面内容,expire也非常好控制。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5280 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:22 · PVG 17:22 · LAX 01:22 · JFK 04:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.