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

SpringMVC 项目, MySQL 数据库,在这种配置的机器上,最多能承受多少条数据?

  •  
  •   Trinity888 · 2020-05-03 21:33:24 +08:00 · 4306 次点击
    这是一个创建于 1669 天前的主题,其中的信息可能已经有所发展或是发生改变。

    计算机配置: Windows10 企业版 处理器: Intel(R) Core(TM) i5-7500 CPU @ 3.4GHz 3.41GHz 内存 : 16GB 系统类型: 64 位

    有的界面:当数据库表中,达 1 万 6 千多数据,界面就卡了。

    大家谁知道,除了优化程序代码、优化数据表查询效率外,这样的配置,能支撑多少条数据,有一范围就行

    39 条回复    2020-05-08 11:29:28 +08:00
    youxiachai
        1
    youxiachai  
       2020-05-03 21:37:40 +08:00   ❤️ 1
    1w 多数据就卡了。。。。你这程序得多烂啊。。
    看着明显内存泄漏了啊。。
    youxiachai
        2
    youxiachai  
       2020-05-03 21:40:35 +08:00
    不过话说回来。。。
    如果硬盘不是 ssd 的话。。卡的话,其实很正常。。。
    mosliu
        3
    mosliu  
       2020-05-03 21:43:37 +08:00   ❤️ 1
    一条数据 1k 大小 和一条数据 10M 大小完全不一样啊
    Trinity888
        4
    Trinity888  
    OP
       2020-05-03 21:55:56 +08:00
    @youxiachai 老兄,一般我们项目安装在阿里云服务器上,但现在这个 kh 是在一个计算机电脑上,我这程序优化、表查询索引等都优化了,如果他不听建议,硬要安装在这上面,数据量大概能支撑多少条呀?
    Trinity888
        5
    Trinity888  
    OP
       2020-05-03 21:56:55 +08:00
    @mosliu 普通的一条告警数据,仅文字。1 条数据很小
    mosliu
        6
    mosliu  
       2020-05-03 22:01:01 +08:00
    linux ? windows ?
    按 1k 一条计算 1.6w 条 mysql 放在内存里面也才 16M 算上多种索引 也就 30M?
    这个数据量。感觉真的太小了。。。
    建议直接把数据加进内存里面 从内存内部计算得了。。。怎么会这么慢。
    dingyaguang117
        7
    dingyaguang117  
       2020-05-03 22:11:01 +08:00
    什么叫界面就卡了?
    nieqibest
        8
    nieqibest  
       2020-05-03 22:39:45 +08:00 via Android
    界面卡确定是卡数据库吗?哪个语句?
    PIAPIAPIA
        9
    PIAPIAPIA  
       2020-05-03 22:47:39 +08:00 via Android
    接口响应 5 秒以上吗
    Trinity888
        10
    Trinity888  
    OP
       2020-05-03 22:48:01 +08:00
    @dingyaguang117 kh 说在他们内网访问时卡,关键我现在在本地访问速度可以。
    @nieqibest 告警列表功能,打开后有个按告警类型统计、告警级别统计,下面是告警列表数据( 2 表关联)
    Trinity888
        11
    Trinity888  
    OP
       2020-05-03 22:49:31 +08:00
    @PIAPIAPIA @nieqibest
    @dingyaguang117 我在造数据看看。就是不清楚这种配置到底多少条数据可以支撑呀,假如客户要求 100w 数据,这种配置可以吗?
    hangszhang
        12
    hangszhang  
       2020-05-03 22:55:57 +08:00
    不科学,直接查库呢?跳过 server,我感觉你都没定位问题
    PIAPIAPIA
        13
    PIAPIAPIA  
       2020-05-03 23:00:56 +08:00 via Android
    @Trinity888 我本地 i58g,只测过 10 来万的数据,接口返回差不多 5 秒,没测并发的情况
    yongjing
        14
    yongjing  
       2020-05-03 23:13:42 +08:00
    @PIAPIAPIA 贴 sql
    nockyQ
        15
    nockyQ  
       2020-05-03 23:42:52 +08:00
    “卡了”。这描述也太模糊了,建议先找到症结再来发帖询问。
    fixend
        16
    fixend  
       2020-05-04 00:26:25 +08:00 via Android
    这种机器,撑几千万条数据肯定没问题的,关键还是你程序怎么写的
    sprite82
        17
    sprite82  
       2020-05-04 03:29:27 +08:00 via Android
    是不是客户把服务器当个人电脑使用?我第一家公司,公司配的电脑是机械盘,本地数据库,ide 启动,页面 jsp,渲染挺慢的,但是数据库如果连到其他同事电脑上就快了很多。
    cian
        18
    cian  
       2020-05-04 07:08:46 +08:00
    设计合理 ,亿级别的数据都没问题
    shakoon
        19
    shakoon  
       2020-05-04 08:40:53 +08:00
    amd athlon 240,4g ddr2 内存,十几年前的机器,现在最大的表有两千万数据,几年重启一次。总结:你的代码太烂
    lg106
        20
    lg106  
       2020-05-04 08:54:12 +08:00
    数据库用的是阿里云的 rds 吗?如果不是地址换成 127.0.0.1 看看
    martinqian
        21
    martinqian  
       2020-05-04 09:03:45 +08:00
    就题主的数据类型和机器配置,100 万条那都不是事。你得先分析问题出在哪里,是网络原因(题主提到本地访问速度可以)?程序逻辑方面的原因(比如有并发就慢了很多)?数据库方面的原因(索引、关联)? API 进出打下日志看下时间耗费; MySQL 查看下日志,看一下耗时比较高的 SQL 执行花了多久,花在了哪些地方。把问题圈定在尽量小的范围内,这样才好想对策,V 友才能帮你。
    Varobjs
        22
    Varobjs  
       2020-05-04 09:08:26 +08:00 via Android
    8h16g,上亿数据也没卡啊
    zjqzxc
        23
    zjqzxc  
       2020-05-04 09:24:48 +08:00
    盲猜:楼主没命中索引导致频繁扫表了
    sadfQED2
        24
    sadfQED2  
       2020-05-04 09:58:51 +08:00 via Android
    一万多条数据,就算全表扫我觉得慢不到哪里去吧,可能根本不是数据库的问题,贴 sql ?慢日志?
    xizismile
        25
    xizismile  
       2020-05-04 10:36:12 +08:00 via Android
    自己先界定一下问题的范围,你这是让人大海捞针呀
    daozhihun
        26
    daozhihun  
       2020-05-04 11:04:30 +08:00
    什么叫做卡了?是单条 sql 执行过长还是别的地方占了 CPU ?
    你这提问不像是程序员
    rogwan
        27
    rogwan  
       2020-05-04 11:34:56 +08:00 via iPhone
    毫无疑问是程序写的有问题,这机器应付这点数据量毛毛雨
    angryfish
        28
    angryfish  
       2020-05-04 17:07:27 +08:00 via iPhone
    你说,你是不是偷偷在程序里写了几个 sleep,每次反馈卡就减少一个
    Trinity888
        29
    Trinity888  
    OP
       2020-05-04 21:51:27 +08:00
    @martinqian 您好 V 友,目前我们有个表:存的是告警数据(多个设备的告警数据,每个设备的告警用户是不同的)。
    1 )告警数据是由另一个终端插入进去的;
    2 )我这边是服务端: 需要查表才能知道,有新的告警数据了(且表中有原来已有的 3 种告警级别的 数据)再加上新插入的告警
    3 ) 我要遍历表,才能知道:现有总共有多少条告警,紧急级别的数量是多少,一般级别的数据是多少,普通级别的数量是多少。

    本人确实经验不足,也感觉 V 友们给提的建议
    请问像这种的有更好的设计,能否告诉一二,会认真学习地,谢谢
    Trinity888
        30
    Trinity888  
    OP
       2020-05-04 21:51:57 +08:00
    @mosliu 您好 V 友,目前我们有个表:存的是告警数据(多个设备的告警数据,每个设备的告警用户是不同的)。
    1 )告警数据是由另一个终端插入进去的;
    2 )我这边是服务端: 需要查表才能知道,有新的告警数据了(且表中有原来已有的 3 种告警级别的 数据)再加上新插入的告警
    3 ) 我要遍历表,才能知道:现有总共有多少条告警,紧急级别的数量是多少,一般级别的数据是多少,普通级别的数量是多少。

    本人确实经验不足,也感觉 V 友们给提的建议
    请问像这种的有更好的设计,能否告诉一二,会认真学习地,谢谢
    Trinity888
        31
    Trinity888  
    OP
       2020-05-04 21:52:29 +08:00
    @PIAPIAPIA 您好 V 友,目前我们有个表:存的是告警数据(多个设备的告警数据,每个设备的告警用户是不同的)。
    1 )告警数据是由另一个终端插入进去的;
    2 )我这边是服务端: 需要查表才能知道,有新的告警数据了(且表中有原来已有的 3 种告警级别的 数据)再加上新插入的告警
    3 ) 我要遍历表,才能知道:现有总共有多少条告警,紧急级别的数量是多少,一般级别的数据是多少,普通级别的数量是多少。

    本人确实经验不足,也感觉 V 友们给提的建议
    请问像这种的有更好的设计,能否告诉一二,会认真学习地,谢谢
    Trinity888
        32
    Trinity888  
    OP
       2020-05-04 21:55:04 +08:00
    V 友们,谢谢大家回复我,我的情况具体是这样的,希望能看到的朋友,帮我看下怎么设计合理些,本人确实经验不足,也感觉 V 友们可以回复给个建议。

    目前我们有个表:存的是告警数据(多个设备的告警数据,每个设备的告警用户是不同的)。
    1 )告警数据是由另一个终端插入进去的;
    2 )我这边是服务端: 需要查表才能知道,有新的告警数据了(且表中有原来已有的 3 种告警级别的 数据)再加上新插入的告警
    3 ) 我要遍历表,才能知道:现有总共有多少条告警,紧急级别的数量是多少,一般级别的数据是多少,普通级别的数量是多少。


    请问像这种的有更好的设计,能否告诉一二,会认真学习地,谢谢
    luckylo
        33
    luckylo  
       2020-05-04 22:39:27 +08:00 via Android
    对于你这个,不就是 group by 一下就好了么?很好奇你是怎么实现的? select * from xx,然后一把拿到内存,然后循环在内存搞?
    wqhui
        34
    wqhui  
       2020-05-05 10:56:04 +08:00
    1W 多数据正常来讲不会卡的啊,我试过查几百万数据的表,用索引查也是毫秒级的响应时间。1W 多数据就算没索引应该也用不了 1 秒,界面响应时间长就要看看每个步骤的耗时是多少了,可能是 SQL 有问题,也可能是程序有问题。看你这需求也不是很复杂的东西,根本花不了什么时间。
    hbolive
        35
    hbolive  
       2020-05-05 11:42:12 +08:00
    @Trinity888 以前搞过电信设备的告警监控显示,数据量比你这个大多了,因为当时不是码代码的,所以具体表结构没去分析过,但是大概的流程知道(系统为 C/S 结构)。
    有新的告警(暂且称客户端吧),直接将告警推送到某个地方(比如 MQ ),显示告警的服务端读取 MQ 数据显示并删除。客户端推数据的同时,将对应告警数据写入表。
    至于显示告警列表,不管是统计各类告警的数量 count(*) where level=,还是显示告警列表,就你这个配置,几百万数据都不是问题,常规操作就是。
    yinzhili
        36
    yinzhili  
       2020-05-05 17:15:25 +08:00
    我觉得,你这样的硬件配置,单表 100w 条数据都不至于卡。如果卡,说明程序写得有问题。
    mosliu
        37
    mosliu  
       2020-05-06 10:34:24 +08:00
    @Trinity888
    1. 建好索引
    2. 记录一个当前 id (考虑自增主键), 下次按 id 查询增加
    3. 告警条数,经常使用可以考虑单独存在另一张表里面。每次入库时更新,减少扫全表。
    mosliu
        38
    mosliu  
       2020-05-06 10:34:57 +08:00
    电脑配置,感觉撑到百万没问题。
    heavyrainn
        39
    heavyrainn  
       2020-05-08 11:29:28 +08:00
    遍历表?为啥要遍历表?你的告警级别应该是一个单独的字段吧?正常来说一个 sql 就出来的东西啊。举个例子,select count(*) as total_alert,sum(case when alert_level = '1' then 1 else 0 end) lvl1_alert,sum(case when alert_level = '2' then 1 else 0 end) lvl2_alert from your_table where timestamp >= ? 嘎巴一下就出来了啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1238 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:04 · PVG 02:04 · LAX 10:04 · JFK 13:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.