记一次http发送数据大小超限+插入数据库超量

384 阅读3分钟

背景

后台业务,每次修改白名单都全量把数据另一个后台应用,用户一次导入20W+数据,加上已有的几百个数据,于是一次过全量发送20W+数据过去,提示发送失败,对方没收到请求。

问题&解决

经排查,两个问题:

请求方式

用的是get请求,发送数据太大,发不过去 解决:改成了POST请求,虽然可以发更多的数据了,但是依然不能一次发20W+个数据。 另外,关于GET和POST的请求方式: get 是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系。很多文章都说GET方式提交的数据最多只能是1024字节,而 实际上,URL不存在参数上限的问题,HTTP协议规范也没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制 是2083字节(2K+35字节)。对于其他浏览器,如FireFox,Netscape等,则没有长度限制,这个时候其限制取决于服务器的操作系统。即 如果url太长,服务器可能会因为安全方面的设置从而拒绝请求或者发生不完整的数据请求。

post 理论上讲是没有大小限制的,HTTP协议规范也没有进行大小限制,但实际上post所能传递的数据量大小取决于服务器的设置和内存大小。因为我们一般 post的数据量很少超过MB的,所以我们很少能感觉的到post的数据量限制,但实际中如果你上传文件的过程中可能会发现这样一个问题,即上传个头比较 大的文件到服务器时候,可能上传不上去,以php语言来说,查原因的时候你也许会看到有说PHP上传文件涉及到的参数PHP默认的上传有限定,一般这个值是2MB,更改这个值需要更改php.conf的post_max_size这个值。这就很明白的说明了这个问题了。       

插入数据库      

一次过插入1W条数据,Laravel 的 orm提示操作失败

laravel没有提示插入失败,只是提示某个框架文件报错,但是如果插入的数据缩小到15000左右就不会报错,除了可能存在部分数据字符有异常的问题外,也有可能是一次性插入太多字符到数据库了 。(个人感觉单次插入15000也不多,怎么就超量了,这点还没搞懂)

总之,可以查服务器和数据库一次最多容纳多少字符,但是总的来说,面对插入大数据,最好用分段操作吧。