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

关于高频读写 mysql 数据库的设计

  •  1
     
  •   wsldl123292 · Dec 31, 2019 · 7750 views
    This topic created in 2504 days ago, the information mentioned may be changed or developed.

    有一个需求,是从 kafka 读取数据入 mysql,数据要保证实时性,要及时入库和查询, 现在是的数据量大概每天 30 万,基本是每秒 4 条的频率 现在的问题是在写入的同时再去查库,会导致查询变慢,有什么好的方案吗?

    由于硬件限制,只有台 8g 的机器,没有办法分布式多节点

    Supplement 1  ·  Dec 31, 2019
    一台机器,8g 内存,要部署 kafka,mysql,web 应用
    Supplement 2  ·  Dec 31, 2019
    机器加不了,客户要求,没办法
    29 replies  •  2019-12-31 18:25:05 +08:00
    netnr
    netnr
    Dec 31, 2019
    1
    当天 30 万的数据用内存,隔天(半天、小时)入库
    wsldl123292
    wsldl123292
    OP
    Dec 31, 2019
    2
    @netnr 我要实时查询的
    wsldl123292
    wsldl123292
    OP
    Dec 31, 2019
    3
    一台机器,8g 内存,要部署 kafka,mysql,web 应用
    opengps
    opengps
    Dec 31, 2019
    4
    每秒 4 条,写入压力并不大,但是大量读取,你得用从库了
    opengps
    opengps
    Dec 31, 2019❤️1
    5
    缓存解决,把最新数据留在内存里,查询时候不用去硬盘
    kop1989
    kop1989
    Dec 31, 2019
    6
    写库 30 万条还算可以,关键是查询压力如何?查询跨度如何?得说明白才好分析。
    widdy
    widdy
    Dec 31, 2019
    7
    内存表。
    wsldl123292
    wsldl123292
    OP
    Dec 31, 2019
    8
    @kop1989 做了分表处理,主表基本会保持在 2000w 左右的数据,查询是跨 3 到 4 张表
    lhx2008
    lhx2008
    Dec 31, 2019 via Android
    9
    一次拿多条,一条语句插完全没有问题,查询看你是索引还是文本,查的量有多少,我建议写多一份 redis 或者是 LSM Tree 的数据库。kafka 的数据等 mysql 落库再删。
    wsldl123292
    wsldl123292
    OP
    Dec 31, 2019
    10
    @lhx2008 数据还有各种查询条件,还要做到实时展示,不好弄 redis
    optional
    optional
    Dec 31, 2019
    11
    每秒 4 条并不算高,看过查询计划哪一步比较慢吗?理论上并不会慢,调个参数试试?
    encro
    encro
    Dec 31, 2019
    12
    查询慢 explain 看看结果?
    确定查询满是因为写导致的吗?
    encro
    encro
    Dec 31, 2019
    13
    每天 30 万真的不多。
    阿里云最便宜的 rds,也可以支持每天 30 万订单(订单明细,日志等加起来肯定不止 30 万)。
    wsldl123292
    wsldl123292
    OP
    Dec 31, 2019
    14
    @encro 大部分的 sql 都看过了,都走了索引,把写停掉就能快不少
    p23XnFNH1Wq953rV
    p23XnFNH1Wq953rV
    Dec 31, 2019
    15
    读写分离
    encro
    encro
    Dec 31, 2019
    16
    @wsldl123292
    写是无序的( innodb 主键不连续)导致索引重建或者锁表?

    1,开启慢日志吧;
    2,然后 show full processlist,看处于什么状态。
    authony2020
    authony2020
    Dec 31, 2019
    17
    30 万不大吧,配置确实有点低
    sudoz
    sudoz
    Dec 31, 2019
    18
    每秒 4 条插入,不是常规理解的“高频写”
    wsldl123292
    wsldl123292
    OP
    Dec 31, 2019
    19
    @encro 应该是,主键是 uuid
    encro
    encro
    Dec 31, 2019
    20
    @wsldl123292
    主键不能是 UUID,会导致索引重排(除非你 UUID 是递增的参考另外一个帖子使用 SnowFlake )
    wangyzj
    wangyzj
    Dec 31, 2019
    21
    这个配置,每天 30w,如果你不是一次读这么多的话应该足以
    zunceng
    zunceng
    Dec 31, 2019
    22
    有硬件限制 不建议搞什么主从了 可以做一些索引的优化

    就像 @encro 提到的用 snowflake ( int64 ) 做主键 不要用 string
    wsldl123292
    wsldl123292
    OP
    Dec 31, 2019
    23
    @wangyzj 就是每次读一天的,当然是分页
    fancy111
    fancy111
    Dec 31, 2019
    24
    我有台 1H2G 的机器也想这么做。。。
    aloyuu
    aloyuu
    Dec 31, 2019 via Android
    25
    内存临时存储数据,宕机时,内存数据如何挽救?
    wysnylc
    wysnylc
    Dec 31, 2019
    26
    让你客户去屎吧
    wangyzj
    wangyzj
    Dec 31, 2019
    27
    @wsldl123292 spa 全读出来然后前端分页?
    luozic
    luozic
    Dec 31, 2019
    28
    读取的是啥内容?
    jimrok
    jimrok
    Dec 31, 2019
    29
    分表,因为更新的时候,会加锁限制读到脏数据,分表可以避免不相关的加锁,同时索引更新会更快。或者你允许客户脏读。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   688 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 18:04 · PVG 02:04 · LAX 10:04 · JFK 13:04
    ♥ Do have faith in what you're doing.