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

用分库来降低数据库压力,但是分开的库仍然在同一台硬件服务器,这样的方案有用吗?

  •  1
     
  •   abcbuzhiming · 2018-10-15 09:41:12 +08:00 · 4079 次点击
    这是一个创建于 2012 天前的主题,其中的信息可能已经有所发展或是发生改变。
    实践中看到过这样的方案,分库来降低数据库压力,但是分开的库仍然运行在一台硬件服务器上。我仔细想了想,这样分开的库还是要受到这台硬件服务器的 I/O 性能的限制,和不分开比,似乎一点也没有增加性能啊
    25 条回复    2018-10-15 17:47:18 +08:00
    niubee1
        1
    niubee1  
       2018-10-15 09:43:02 +08:00
    没用
    dorothyREN
        2
    dorothyREN  
       2018-10-15 09:43:24 +08:00
    可能会增加,也可能会下降,这个要看具体业务类型了
    KingEngine
        3
    KingEngine  
       2018-10-15 09:43:47 +08:00
    一双手干活总比一只手好吧
    yikyo
        4
    yikyo  
       2018-10-15 09:45:14 +08:00
    不分库:从 1000W 条数据里面查询。
    分库:从 500W 条数据里面查询。
    楼主明白了吗?
    yamedie
        5
    yamedie  
       2018-10-15 09:47:03 +08:00
    @yikyo 楼上说的是分表?
    night98
        6
    night98  
       2018-10-15 09:49:42 +08:00
    这个得看机器实际性能和 cpu 核心数来分析了,如果 cpu 核心利用率不高的话,通常分库还是有点作用的。
    xiaoyunwei2
        7
    xiaoyunwei2  
       2018-10-15 09:51:55 +08:00
    just try
    popbones
        8
    popbones  
       2018-10-15 09:51:59 +08:00
    硬件影响的是速度,分库改善的是有些查询的时间复杂度。最简单的例子,比方说你有一个客户订单的表,查询一个客户的订单总数,需要筛选所选客户,然后数所有的条目;而如果你一个客户一个表,订单总数就等于表的大小。显然复杂度是不一样的。
    opengps
        9
    opengps  
       2018-10-15 10:02:56 +08:00 via Android
    没用,你可以在同服务器不同物理硬盘上
    yulitian888
        10
    yulitian888  
       2018-10-15 10:03:04 +08:00
    网络 IO 是可以分的,因为你可以有多块网卡,多条网线。
    磁盘 IO 也是可以分的,因为你可以有多块物理硬盘。
    而跟 IO 比起来,CPU 性能简直是宽裕得可以肆意挥霍了。
    所以,IO 优化理论上是存在提升空间的
    glacer
        11
    glacer  
       2018-10-15 10:06:57 +08:00
    同样是一块 CPU,为什么单线程的程序就没多线程的快?
    sjt1949
        12
    sjt1949  
       2018-10-15 10:11:42 +08:00
    @glacer 不一定,多线程可能比单线程慢。我在实际中遇到过这种情况。
    tt67wq
        13
    tt67wq  
       2018-10-15 10:14:29 +08:00
    那你咋不把软件全装在 C 盘呢。。。。反正电脑硬盘都一样大
    unix 为啥还要搞个文件系统,直接放一个目录下得了
    我国为啥要搞那么多省市,直接一个中央得了
    zjlletian
        14
    zjlletian  
       2018-10-15 10:16:54 +08:00
    @yikyo 对于索引来说根本不是问题。
    domty
        15
    domty  
       2018-10-15 10:18:14 +08:00
    因为性能瓶颈不在硬件 IO 上
    celeron533
        16
    celeron533  
       2018-10-15 10:18:39 +08:00
    我觉得是分出了不太用的冷数据和最近一直使用的热数据。
    这样的话,冷数据库基本都在打酱油,不太会占用太多的资源。热数据库由于检索集变小,性能会有一定的提升。
    pkoukk
        17
    pkoukk  
       2018-10-15 10:19:02 +08:00
    一般情况下,不是更容易碰到 CPU 瓶颈么?
    troywinter
        18
    troywinter  
       2018-10-15 10:36:47 +08:00
    但你的性能瓶颈是在查询速度,跟硬件 io 瓶颈无关,如果你已经知道瓶颈在硬件 io,那直接升级硬件不就行了
    abcbuzhiming
        19
    abcbuzhiming  
    OP
       2018-10-15 11:00:01 +08:00   ❤️ 1
    @yikyo 那你的意思就是说对这种做法,水平分库是有用的,但是如果是垂直分库,就没啥用了,因为垂直分库并不降低单个库的数据量
    kernel
        20
    kernel  
       2018-10-15 11:05:51 +08:00 via Android
    这个办法有用的话只能说明 MySQL 的程序员水平不行,机器的性能都榨不干
    koolob
        21
    koolob  
       2018-10-15 11:34:32 +08:00
    有可能只是为了节约当前的数据库成本,压力小时一台机器就够用。如果将来压力上来了,单台机器性能不够,直接把其中的某些库转移到另外的机器上,改个配置就可以用了。
    cstj0505
        22
    cstj0505  
       2018-10-15 11:39:36 +08:00
    @night98 数据库性能瓶颈一般首先是 io,然后内存不够缓存也会导致大量 io 的
    likuku
        23
    likuku  
       2018-10-15 12:48:50 +08:00
    当前这台机器性能耗尽了么?已经耗尽的话,两个库都在同一个机器上,对提升效能没用。
    haozes
        24
    haozes  
       2018-10-15 12:55:03 +08:00
    有时有用。你想一下,假如有个表,没有索引,如果一张表有 1KW 条记录,拆开了,如果你知道在哪个表里,本来查要遍历 1KW,现在可能只要遍历 500W 条。你以前只能遍历 1KW
    flight2006
        25
    flight2006  
       2018-10-15 17:47:18 +08:00
    @haozes 知道在哪个表就是一个索引。。人肉索引
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3002 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:31 · PVG 08:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.