首页   注册   登录
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
宝塔
V2EX  ›  MySQL

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

  •  
  •   neroanelli · 146 天前 · 3781 次点击
    这是一个创建于 146 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    这并不是运维天成鄙视 windows

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

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