当前位置: 首页 > 后端技术 > Node.js

前后端开发的数据大小限制

时间:2023-04-03 15:14:09 Node.js

背景在编程过程中存储用户数据时,会遇到数据存储大小的限制。经常遇到的限制可以分为三个方面:用户端、服务器端和数据库。按照过程可分为五个阶段,如图所示。作为开发人员,您需要了解这些限制并避免碰壁。第一种wall-client:浏览器限制用户通过http请求提交数据。http请求本身没有数据大小限制,只是浏览器限制了URI的长度。浏览器限制的是URI的长度,而不是你的请求参数。浏览器限制大小(字符)IE2083Chrome8182curl8167汉字:utf-8编码3字节,gbk编码2字节,英文1个字符或1个字节超过限制长度,返回错误码414。第二墙-服务器:服务器限制服务器的数据处理能力,提交的数据限制能力也不同。不同的服务器对请求有不同的限制。会有两个限制:URI长度限制(以Node为例)数据包大小限制(以post请求为例)NodeNode对URI的大小有一定的限制,最大值为8kb(8*1024),一般情况下如果程序想单独限制一个大小,可以通过中间件来限制。req.on('data',function(chunk){received+=chunk.length;if(received>bytes)req.destroy();});如果要修改最大尺寸,只能更改源代码文件http_parser.h。POSTserverlimitsize(character)apache8192IIS16384nginx8kb补充:get请求是幂等操作,所以可以用缓存处理,post请求不是幂等的,所以不能应用缓存的第二堵墙——数据库代理:DBProxy会部署几个数据库在网络环境中。通常,DBProxy会作为代理来实现负载均衡、IP地址过滤、数据库分表等操作。常见的数据库代理mycat/mybuh/dbproxy等,不同的数据库代理默认数据大小不同。例如,在一些公司,DBProxy的最大代理设置大小为150kb。第三面墙——max_allowed_pa??cket在实际读写数据库的时候,数据库本身会有一个容量限制。mysql中的max_allow_packet是第三面墙。max_allow_pocket是数据库对单个数据包的大小限制。参数大小默认大小为64M(v>=8.0.3)/4M最大值为1G第四面墙——数据库本身的大小限制每条数据在数据库中都有对应的字段,每个字段都有一个相应的sizelimit,所以写数据库的时候也有相应的sizelimit。下面以mysql数据库为例进行说明:mysql数据库类型分为五类:数字类型、日期类型、字符串类型、特殊类型、JSON类型数字类型存储(位)unsignedrangesignedrangedefaultvalueTINYINT1-128~1270~255SMALLINT2-32768~327670~65535MEDIUMINT3-8388608~83886070~16777215INT4-2147483648~21474836470~4294967295BIGINT8-2of63~2of63squares-10?~1如何处理在严格模式下,会直接报错。在非严格模式下,将显示范围的边界。比如你要存储9223372036854775808的值,它会显示9223372036854775807,因为有符号整数的最大值是9223372036854775807,如果要显示这样的值怎么办?使值有符号,或使用字符串。其他基本数据类型和大小不在此处描述。查看详情JSON类型对于JSON数据类型,可以通过JSON_STORAGE_SIZE获取可以存储的JSON数据的大小总结本文的目的不是让你记住这些限制,而是让你知道哪些地方存在数据存储限制,当出现问题时,知道去哪里进行故障排除。参考资料JSONMERGEFUNCTION非常形象的理解GET和POSTURL长度限制如何选择合适的数据库代理美团点评的DBProxy常见Mysql数据库类型长度限制推荐面试JSON_STORAGE_SIZE()