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

2020-05-03 21:33:24 +08:00
 Trinity888

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

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

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

4129 次点击
所在节点    程序员
39 条回复
martinqian
2020-05-04 09:03:45 +08:00
就题主的数据类型和机器配置,100 万条那都不是事。你得先分析问题出在哪里,是网络原因(题主提到本地访问速度可以)?程序逻辑方面的原因(比如有并发就慢了很多)?数据库方面的原因(索引、关联)? API 进出打下日志看下时间耗费; MySQL 查看下日志,看一下耗时比较高的 SQL 执行花了多久,花在了哪些地方。把问题圈定在尽量小的范围内,这样才好想对策,V 友才能帮你。
Varobjs
2020-05-04 09:08:26 +08:00
8h16g,上亿数据也没卡啊
zjqzxc
2020-05-04 09:24:48 +08:00
盲猜:楼主没命中索引导致频繁扫表了
sadfQED2
2020-05-04 09:58:51 +08:00
一万多条数据,就算全表扫我觉得慢不到哪里去吧,可能根本不是数据库的问题,贴 sql ?慢日志?
xizismile
2020-05-04 10:36:12 +08:00
自己先界定一下问题的范围,你这是让人大海捞针呀
daozhihun
2020-05-04 11:04:30 +08:00
什么叫做卡了?是单条 sql 执行过长还是别的地方占了 CPU ?
你这提问不像是程序员
rogwan
2020-05-04 11:34:56 +08:00
毫无疑问是程序写的有问题,这机器应付这点数据量毛毛雨
angryfish
2020-05-04 17:07:27 +08:00
你说,你是不是偷偷在程序里写了几个 sleep,每次反馈卡就减少一个
Trinity888
2020-05-04 21:51:27 +08:00
@martinqian 您好 V 友,目前我们有个表:存的是告警数据(多个设备的告警数据,每个设备的告警用户是不同的)。
1 )告警数据是由另一个终端插入进去的;
2 )我这边是服务端: 需要查表才能知道,有新的告警数据了(且表中有原来已有的 3 种告警级别的 数据)再加上新插入的告警
3 ) 我要遍历表,才能知道:现有总共有多少条告警,紧急级别的数量是多少,一般级别的数据是多少,普通级别的数量是多少。

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

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

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

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


请问像这种的有更好的设计,能否告诉一二,会认真学习地,谢谢
luckylo
2020-05-04 22:39:27 +08:00
对于你这个,不就是 group by 一下就好了么?很好奇你是怎么实现的? select * from xx,然后一把拿到内存,然后循环在内存搞?
wqhui
2020-05-05 10:56:04 +08:00
1W 多数据正常来讲不会卡的啊,我试过查几百万数据的表,用索引查也是毫秒级的响应时间。1W 多数据就算没索引应该也用不了 1 秒,界面响应时间长就要看看每个步骤的耗时是多少了,可能是 SQL 有问题,也可能是程序有问题。看你这需求也不是很复杂的东西,根本花不了什么时间。
hbolive
2020-05-05 11:42:12 +08:00
@Trinity888 以前搞过电信设备的告警监控显示,数据量比你这个大多了,因为当时不是码代码的,所以具体表结构没去分析过,但是大概的流程知道(系统为 C/S 结构)。
有新的告警(暂且称客户端吧),直接将告警推送到某个地方(比如 MQ ),显示告警的服务端读取 MQ 数据显示并删除。客户端推数据的同时,将对应告警数据写入表。
至于显示告警列表,不管是统计各类告警的数量 count(*) where level=,还是显示告警列表,就你这个配置,几百万数据都不是问题,常规操作就是。
yinzhili
2020-05-05 17:15:25 +08:00
我觉得,你这样的硬件配置,单表 100w 条数据都不至于卡。如果卡,说明程序写得有问题。
mosliu
2020-05-06 10:34:24 +08:00
@Trinity888
1. 建好索引
2. 记录一个当前 id (考虑自增主键), 下次按 id 查询增加
3. 告警条数,经常使用可以考虑单独存在另一张表里面。每次入库时更新,减少扫全表。
mosliu
2020-05-06 10:34:57 +08:00
电脑配置,感觉撑到百万没问题。
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 >= ? 嘎巴一下就出来了啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/668329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX