CNode

大量post 请求 restful接口怎么做合适

问答
Oouyangxuanyun发布于9 年前最后回复9 年前13 回复6215 浏览0 收藏

现在有很多条数据要插入数据库, 用post的方式通过resful 接口调用api 进行数据入库, 数据总量10万条,也就是连续post 10万次目前数据的入库速度大概每秒100条左右,这么大量的post请求node可以处理吗? 新手还希望大家帮忙解答

查看回复

回复 (13)

E
eggggger#1·9 年前
引用 AnzerWall@hyj1991 kiil 9 PID你怎么办,发生了类似的情况呢,

@AnzerWall 实时性要求不高的话,数据库扛不住的情况感觉可以加个消息队列

N
nprog#2·9 年前

每秒100条不叫大量,node+mongodb最普通的开发机都承受的住了,连redis都不用上

H
hyj1991#3·9 年前

虽然看起来请求多,但是不管是接收post请求还是入库操作都是网络IO,这恰恰是node最擅长的,性能肯定没啥问题。 其次,你要做进一步的优化的话,可以考虑设置一个全局的批插入数组做缓存:

  • 收到post请求组装要插入的数据,push进该全局数组
  • 设置一个定时器,比如30s检测一次这个数组,满10000条的时候把前10000条记录移除掉并执行一次数据库的批插入操作

这样子你的十万数据只要进程10次插入操作就行了

A
AnzerWall#5·9 年前

连续post 十万次是因为逻辑上限制必须分开post吗,如果不是,是否可以转化成一次post,然后到达后台再批量插入,sql,nosql都支持批量插入的操作。mongo好像单次tcp是1000还是10000一次多了驱动会自动拆成多次。。。。。

L
libook#6·9 年前

node没问题,node擅长高并发。

RESTful API好像可以声明资源的复数形式,用以批量插入,如: POST /user 插入一个用户 POST /users 插入多个用户

然后就是mongodb的insert是支持传入数组批量插入的,你可以研究一下文档。

有顾虑的话可以先在测试环境进行压测,遇到问题再说。

H
hyj1991#8·9 年前
引用 hyj1991@@AnzerWall 拦截SIGPUB或者SIGTERM就行了,做一个异常退出前的钩子 来自酷炫的 CNodeMD

@hyj1991 我这只是一个大概的优化思路,想做性能优化肯定要仔细推敲细节

来自酷炫的 CNodeMD

E
eggggger#9·9 年前

可以参考 Google 的 Batching Requests

A
AnzerWall#10·9 年前
H
hyj1991#11·9 年前
引用 AnzerWall@hyj1991 kiil 9 PID你怎么办,发生了类似的情况呢,

@AnzerWall kill-9那也是信号量啊,总有办法做钩子的

来自酷炫的 CNodeMD

O
ouyangxuanyun#12·9 年前

谢谢各位的解决方案,逻辑上没有限制必须分开post,数据库是pgsql,所以可以像4楼说的那样做。 还有一个问题就是多大的数据量对于node算是大量呢?

I
iyuq#13·9 年前

怕丢数据可以用redis缓存数据,完美解决服务器挂了丢数据的问题

来自酷炫的 CNodeMD

参与回复
登录后即可参与回复。登录