[问题] api连数据库的问题

楼主: PowerKid (暴力小孩)   2018-07-08 21:05:03
目前我用servlet写了一个api 类似/api/getinfo?para=X
但是目前遇到一个问题
因为数据库允许session连线数大概最多500而已
但可能有同时读取这个api 30000次(1秒内有30000次的呼叫)
(这边计算的方式不知道有没有算错
我的算法是假设X是1~10000
那用POST呼叫
POST 127.0.0.1/api/getinfo?para=1
POST 127.0.0.1/api/getinfo?para=2
.............
POST 127.0.0.1/api/getinfo?para=10000
这样算呼叫10000次吧?
)
但这会造成把这个数据库塞满 后面的API都读取不到内容
如果我用同步的方式 是可以的 但读取api时间又过久
(一分钟只完成18个thread的读取)
不知道有没有什么好方法
谢谢
作者: jej (晃奶大馬桶)   2018-07-08 21:20:00
这是架构的问题吧 先不考虑数据库 同时1万笔网络 可以算ddos先让consumer 和producer 分离吧
楼主: PowerKid (暴力小孩)   2018-07-08 22:26:00
J大请问是什么意思那如果来源都是同一个IP tomcat会算同个thread还是不算
作者: iFEELing (ing)   2018-07-08 23:41:00
你的API做什么事做完不放掉CONNECTION?查的资料异动不大的话打个CACHE在中间挡吧
楼主: PowerKid (暴力小孩)   2018-07-09 07:52:00
做完有放掉 但是因为同时10000个进来 造成数据库连线直暴增到一万 如果是非同时 做完关掉 后面的再进就不会有问题了cache 是只放在数据库还是程式?
作者: ssccg (23)   2018-07-09 09:12:00
数据库通常会用connection pool,设定上限,不会同时开一万
作者: jej (晃奶大馬桶)   2018-07-10 18:48:00
连线和资料处理没分离 采取串联的方式只要其中一个慢 整个都会慢不知道系统限制是什么 若能直接用procedure解决 10万笔算小咖不能用procedure 就看client是不是要即时回应结果若是client要知道结果 可以分析是否可以先给局部结果这样分析就可以知道接下来要怎么加速这个系统了举一个例子 若可以使用mq 资讯可以在queue中排队资料的处理只剩下程式码的优化 或加开服务器

Links booklink

Contact Us: admin [ a t ] ucptt.com