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
neroanelli
V2EX  ›  MySQL

几千列数据高速插入数据库设计

  •  
  •   neroanelli · 2019-06-27 22:54:41 +08:00 · 6575 次点击
    这是一个创建于 1980 天前的主题,其中的信息可能已经有所发展或是发生改变。

    近期有一个项目,需要大量数据的高速存储。希望大家能提供一些思路。 要求: 1、数据的采集速度是 10ms 一次; 2、每次采集的数据大概有 4000 列,数据类型为双精度浮点。 我们现在使用的是 MySQL5.8,windows 平台。

    第 1 条附言  ·  2019-06-28 09:14:54 +08:00
    先感谢各位。
    昨天太匆忙,没有描述清楚。我们的应用场景如下:
    1、数据采集是有一套专用高速高精度的工业设备,设备采集到的数据通过 TCP 发送给我;
    2、设备每 50ms 给我发送一包数据,每包数据有 5 行,每行大概 4000 列,也就是 5 组 10ms 的数据;
    3、每行数据中,有一列是时间戳( 10ms 间隔),其余全是双精度浮点( 8 个字节);
    4、数据采集设备一般会运行几个小时,24 小时左右。不会连续运行多天。
    5、数据后期会检索和导出。
    第 2 条附言  ·  2019-06-28 09:48:11 +08:00
    感谢各位,关于平台,已经被指定了 Windows Server 2016。
    28 条回复    2019-06-28 16:41:33 +08:00
    lhx2008
        1
    lhx2008  
       2019-06-27 23:06:11 +08:00 via Android   ❤️ 1
    4000 列,大概也不会查,主 key 几个单列几列,其他插一列文本就行。
    另外,没有试过列数对 mysql 影响大不大,如果从索引角度来讲,影响是不大的
    sun522198558
        2
    sun522198558  
       2019-06-27 23:15:05 +08:00   ❤️ 1
    5.8 支持 json 的吧,不常用的字段可以用 json
    samwalt
        3
    samwalt  
       2019-06-27 23:20:22 +08:00   ❤️ 1
    一次采集到的数据有多少条?
    est
        4
    est  
       2019-06-27 23:22:31 +08:00   ❤️ 1
    myisam 可破。
    opengps
        5
    opengps  
       2019-06-28 00:09:50 +08:00 via Android   ❤️ 1
    列这么多合适吗?
    misaka19000
        6
    misaka19000  
       2019-06-28 00:55:35 +08:00 via Android   ❤️ 1
    elasticsearch 非常适合高速写入的场景
    shiny
        7
    shiny  
       2019-06-28 01:12:53 +08:00   ❤️ 1
    可以补充下读取的需求。
    MoHen9
        8
    MoHen9  
       2019-06-28 06:01:16 +08:00 via Android   ❤️ 1
    数值型,时序数据库?
    polymerdg
        9
    polymerdg  
       2019-06-28 08:45:59 +08:00   ❤️ 1
    myisam 很容易
    feiyunruyue
        10
    feiyunruyue  
       2019-06-28 09:10:41 +08:00   ❤️ 1
    听着适合时序数据库普罗米修斯( prometheus ),安装简单,我做的一个监控系统就是用这个,挺好用
    qilishasha
        11
    qilishasha  
       2019-06-28 09:18:09 +08:00
    4K 列,如果行数一多,想想都头疼,我要提前下班休息一下
    wccc
        12
    wccc  
       2019-06-28 09:37:40 +08:00   ❤️ 2
    时序数据库吧 不要为难 mysql 了
    realpg
        13
    realpg  
       2019-06-28 09:41:12 +08:00
    就算你用 mysql,也扔了 windows 先
    各种莫名其妙无解问题
    realpg
        14
    realpg  
       2019-06-28 09:45:36 +08:00   ❤️ 1
    没打完就发出去了
    就这数据量 单录入而论,只要你的磁盘写入性能够,只要不检索,单纯写入性能是没问题的。不要用各种 GUI client 做写入结果验证,select 返回结果会让你死掉的

    更好的选择是扔了 mysql 换时序数据库
    nooper
        15
    nooper  
       2019-06-28 10:04:27 +08:00
    扔了 win。不扔不做。
    lastpass
        16
    lastpass  
       2019-06-28 10:07:49 +08:00 via Android
    使用一种 mq 做个缓存吧。
    比如加个 kafka 当中间件+缓存+备份。
    防止你的数据库炸掉。
    sarices
        17
    sarices  
       2019-06-28 10:09:33 +08:00
    如果不是需要实时,可以放到缓存,异步写入 mysql
    realpg
        18
    realpg  
       2019-06-28 10:38:14 +08:00
    @neroanelli
    血泪经验告诉你 如果锁定了 windows,那就开个虚拟机吧 要么就直接开个 sql server

    当然这是你不用专门为你这个场景设计的时序数据库的前提下

    这并不是运维天成鄙视 windows

    windows 的 mysql 确实会有各种奇奇怪怪的性能问题,别说解决,连发现真正的问题在哪都做不到 而且各种偶然各种莫名其妙

    而且这是我们有专业的 windows 高级工程师+MYSQL 工程师的运维团队排查的情况下 显然一般用户并没有这种分析实力更显得莫名其妙
    neroanelli
        19
    neroanelli  
    OP
       2019-06-28 11:15:05 +08:00
    @realpg
    恩,谢谢。我也想用 Linux,但是服务器还有其他 windows 程序需要跑。我打算用时序数据库,influxdb 或 elasticsearch,现在正在测试。
    MySQL 测试情况很不理想,列太多了。。。
    CallMeReznov
        20
    CallMeReznov  
       2019-06-28 11:18:13 +08:00   ❤️ 1
    这种情况肯定用时序库,influxdb 有 WINDOWS 单机版 绿色运行一键启动,支持 API 里打 SQL
    必须要用 MYSQL 的话那就用 JSON 吧.
    ziding
        21
    ziding  
       2019-06-28 11:19:44 +08:00   ❤️ 1
    @neroanelli 你这个需求,上 timescaledb,分析起来方便
    leorealman
        22
    leorealman  
       2019-06-28 11:40:50 +08:00
    建议上时序数据库推荐 InfluxDB,10ms 写一次数据点,1 小时就是 360000
    shawshi
        23
    shawshi  
       2019-06-28 12:11:28 +08:00
    kafka + elasticsearch
    iexplorer
        24
    iexplorer  
       2019-06-28 12:34:57 +08:00
    上消息队列
    Asice
        25
    Asice  
       2019-06-28 12:53:37 +08:00
    4000 列,这表设计就有问题
    插入没有马上查询的需求,直接队列就行了
    dt2vba
        26
    dt2vba  
       2019-06-28 13:18:23 +08:00 via Android
    我用 goroutine 和 go-nsq,一个小时轻松插入百万条数据。很稳定。当然表的字段只有 11 个。
    swulling
        27
    swulling  
       2019-06-28 13:47:43 +08:00 via iPhone
    这个用时序数据库
    shiny
        28
    shiny  
       2019-06-28 16:41:33 +08:00
    反正只运行几个小时,也不需要实时读取,只需要后期导出。所以只要保证写入速度就可以。
    硬件上确定下写入 io 不是瓶颈就无问题,时序数据库对这种场景优化较好。
    如果真的无法突破 io 瓶颈,还有别的办法,简单的就是写入内存,再慢慢刷入 db ;复杂的可以是多台机器承担写入压力。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4168 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:22 · PVG 13:22 · LAX 21:22 · JFK 00:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.