V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
netStand
V2EX  ›  MySQL

mysql 问个问题。大神们请不吝赐教。

  •  
  •   netStand · 2018-07-25 13:30:53 +08:00 via iPhone · 4509 次点击
    这是一个创建于 2341 天前的主题,其中的信息可能已经有所发展或是发生改变。
    针对短时间内大量更新 mysql 数据库一张表的同一行,qps 每秒上千,有啥解决方案吗。。。。
    20 条回复    2018-07-26 08:30:31 +08:00
    opengps
        1
    opengps  
       2018-07-25 13:44:57 +08:00 via Android
    必须用数据库吗?这个频率适合放在内存里。每秒上千次更新,这个应该接近普通机械硬盘的极限 iops 了
    sparrww
        2
    sparrww  
       2018-07-25 13:45:04 +08:00
    为啥不用缓存
    t6attack
        3
    t6attack  
       2018-07-25 13:50:52 +08:00
    mysql 有个存储引擎叫 MEMORY
    liprais
        4
    liprais  
       2018-07-25 14:20:24 +08:00
    为啥你要这样做
    zhangsen1992
        5
    zhangsen1992  
       2018-07-25 15:14:04 +08:00
    redis
    lovedebug
        6
    lovedebug  
       2018-07-25 15:19:21 +08:00 via Android
    这种热数据 redis 更合适吧。当然保险起见可以周期性写库。
    netStand
        7
    netStand  
    OP
       2018-07-25 15:29:36 +08:00
    @opengps 成本太大了吧。
    est
        8
    est  
       2018-07-25 15:37:34 +08:00
    @t6attack 不要被这名字误导了。这款引擎最大的主打特性是所有操作都会锁表。

    @netStand 你可以试试 handlersocker,5.6/5.7 里叫 memcached 接口。可以把一个 InnoDB 的表映射成兼容 memcached 协议 get/set 命令,百万 qps 不是梦。
    est
        9
    est  
       2018-07-25 15:37:58 +08:00
    handlersocket 打错。
    ppyybb
        10
    ppyybb  
       2018-07-25 17:18:30 +08:00 via iPhone
    必须是同一行吗?这些操作实时性要求高吗(能否排队处理?)在更新期间是否有大量读操作(如果有是否要求一定是最新数据?)

    如果你的场景是类似大量商品秒杀的这种场景,且必须立刻返回结果的话,且有大量读操作,且必须保证读的数据是最新的话……
    我感觉就不应该使用 mysql....,这似乎到了单机处理能力的极限,而且还会有严重的竞争。
    如果读操作可以不那么精确(允许一点溢出或者业务上做分段的模型处理),且拒绝使用缓存的话,那么可以尝试进行分段处理,把一行分散到多行,读的时候全部加起来返回(同时记得关掉 mysql 的 cache..)

    具体业务情况不了解,以上都是我瞎想的 23333333
    nullen
        11
    nullen  
       2018-07-25 17:20:12 +08:00
    这么多请求全部打到 MySQL ?我想先问问你的具体场景。
    liuxu
        12
    liuxu  
       2018-07-25 17:35:15 +08:00
    同一行,解决个 P。。。行锁都能锁死你。。。
    airdge
        13
    airdge  
       2018-07-25 17:36:03 +08:00
    mysql+redis/memcache
    hosaos
        14
    hosaos  
       2018-07-25 17:41:46 +08:00
    应该先说明下是什么业务场景 应该有可以替代数据库的方案
    owenliang
        15
    owenliang  
       2018-07-25 18:23:37 +08:00
    更新需要锁行,所以大概有 3 个优化方向:
    1 )能不能减少 update,比如提前聚合一下。
    2 )能不能用批量 insert 取代批量 update,这个是设计上的改变。
    3 )能不能用 LSM 类型的存储取代 mysql。
    x7395759
        16
    x7395759  
       2018-07-25 18:45:35 +08:00
    楼上都说了,
    1 是改程序逻辑合并数据库操作,

    2 是把数据库当数据库用不要当缓存用,

    3 是多看一点书多学习一下程序设计,毕竟这是一个不应该出现的问题
    realpg
        17
    realpg  
       2018-07-25 19:57:53 +08:00
    这业务场景不就是标准的 RAM based NoSQL 的最佳场景么 然后异步线程持久化到 MYSQL 即可
    或者干脆用 NoSQL 自带的持久化
    jmone
        18
    jmone  
       2018-07-26 00:34:41 +08:00
    队列写合并
    yujieyu7
        19
    yujieyu7  
       2018-07-26 00:57:20 +08:00 via iPhone
    数据库尽力了,还是把这个量级的并发数交给应用程序吧
    guanhui07
        20
    guanhui07  
       2018-07-26 08:30:31 +08:00
    redis 或 memcache 吧 更新 db 时候顺便更新缓存
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2604 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:19 · PVG 23:19 · LAX 07:19 · JFK 10:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.