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

mysql10 分钟采集一百万条?要如何实现?

  •  
  •   xbdsky ·
    xbdsky · 2018-11-23 14:11:05 +08:00 · 4112 次点击
    这是一个创建于 2191 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在太慢了
    25 条回复    2018-11-29 20:30:08 +08:00
    largecat
        1
    largecat  
       2018-11-23 14:15:04 +08:00 via Android
    你带宽多大
    KingEngine
        2
    KingEngine  
       2018-11-23 14:18:26 +08:00
    集群 各种优化 各种**
    xbdsky
        3
    xbdsky  
    OP
       2018-11-23 14:19:05 +08:00
    服务器配置 2 核 4G 3M 带宽 Windows 2008
    brucedone
        4
    brucedone  
       2018-11-23 14:27:02 +08:00
    建议还是以 csv 或者其它的文件形式批量导入
    cyhulk
        5
    cyhulk  
       2018-11-23 14:32:14 +08:00
    1.不要索引
    2.数据引擎使用 MyISAM,不要用 innodb
    3.批量提交,节约带宽
    danielmiao
        6
    danielmiao  
       2018-11-23 14:42:29 +08:00
    分表,不要建不必要的索引,10 分钟 100W 条,一秒才 1667 条,4C8G 的 mysql 5.5 innoDB 之前测试差不多 1 秒 3000 条
    auxox
        7
    auxox  
       2018-11-23 15:05:01 +08:00
    曾经在一个配置很一般的容器上做过测试,开多线程,批量插入的话,mysql 的插入速度能达到 5000 条 /S
    find456789
        8
    find456789  
       2018-11-23 15:29:39 +08:00
    搭车问问,postgresql 10, 我有个表, 其中 5 个字段,设置了唯一 unique (听说设置了唯一,就会自动建立索引)

    如果我把另外 4 个字段的 唯一 unique 取消,只能下一个字段设置 unique,是不是插入性能会更高?

    谢谢
    alex321
        9
    alex321  
       2018-11-23 15:58:06 +08:00
    redis 或者 es 先扛一扛,然后再进 mysql ?
    wispx
        10
    wispx  
       2018-11-23 16:02:48 +08:00
    用队列
    petelin
        11
    petelin  
       2018-11-23 16:24:19 +08:00
    @alex321 明显应该用 kafka 抗啊.为什么要用 ES 和 Redis
    opengps
        12
    opengps  
       2018-11-23 16:34:22 +08:00
    每秒写入 1667。这个数据量,我问下楼主是不是在做某种终端采集数据?
    我做 gps 平台时候,最大的数据库压力就是并发写入巨大,做过类似压测,1667 这个数,是不是那 ssd 的云服务器自建的数据库?
    如果以上推测准确或者接近,那么我给楼主的建议是:
    1,是时候考虑分多个数据库了,及时单机性能还能提高一倍,但也仅仅是一倍,瓶颈还是很低
    2,合并写入。数据库这东西,1k 大小写入 1000 行,跟 1M 大小写入 1 行,相同时间写入总量上是有提升的。试试一次写入 100 条能提高多少 io 上限
    3,数据库优化角度:精简规则,借助聚集索引保证写入数据是“物理顺序”,减少这个表的读出场景,尽量使用单一的查询条件取数拿到其他表再加工。
    alex321
        13
    alex321  
       2018-11-23 16:42:24 +08:00
    @petelin #11 看设计结构和使用目的吧,现在不清楚 po 主的目的。
    前两天生产环境,渣渣性能机器上,70w 多数据推进 es,5min 多点。es 有各种现成的好工具哈哈,Redis 当缓存呀。

    po 主这个机器性能和带宽都有影响。
    NotNil1
        14
    NotNil1  
       2018-11-23 16:46:27 +08:00
    换时序数据库?上 MQTT?
    petelin
        15
    petelin  
       2018-11-23 17:25:11 +08:00
    @alex321 对 ES 没 kafka 熟练, kafka 有一种连接器, 可以配置一下就把数据导入到 MySQL 中...ES 吃内存速度确实很快.
    keakon
        16
    keakon  
       2018-11-23 17:44:06 +08:00
    我 5 年前的笔记本电脑都能每秒插 1 万条到 innodb,不知道你们给这么多优化建议干啥…

    楼主合并一下需要提交的记录,然后一起插入就行了。
    gtlions
        17
    gtlions  
       2018-11-23 18:07:02 +08:00 via iPhone
    批量加载;现在虚拟机一般的配置 4Core/8GB 加载 3w 不到一秒钟,这个速度不是单次而是持续在跑的
    ccnccy
        18
    ccnccy  
       2018-11-23 20:43:03 +08:00 via iPhone
    合并一起不就行,优化一下
    moult
        19
    moult  
       2018-11-23 20:48:01 +08:00
    关索引、关约束、关 binlog、多个 insert 合并成一个 insert 插入。
    xbdsky
        20
    xbdsky  
    OP
       2018-11-24 09:49:52 +08:00
    谢谢大家
    br00k
        21
    br00k  
       2018-11-24 10:31:23 +08:00 via iPhone
    ELK ?
    xipushi
        22
    xipushi  
       2018-11-24 10:32:55 +08:00 via iPhone
    用 insert values(),(),()可以搞定,不要 update。数据再多,考虑换列数据库。我们用的那个,秒秒钟存几千万。把数据整理归集下,减少存的数据。
    realpg
        23
    realpg  
       2018-11-24 11:17:35 +08:00
    删索引 ARCHIVE 引擎 批量插入 硬盘 IO 要够高
    另外 windows 什么鬼
    wwww961h
        24
    wwww961h  
       2018-11-24 18:10:01 +08:00 via iPhone
    一秒才 1000 多条,太简单了,没难度,楼上的建议完全够用
    l0wkey
        25
    l0wkey  
       2018-11-29 20:30:08 +08:00
    时序数据?这种情况
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1581 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 00:01 · PVG 08:01 · LAX 16:01 · JFK 19:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.