V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
abcbuzhiming
V2EX  ›  数据库

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

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