GET请求数据量大造成的问题
在实际的开发过程中,我们偶尔或者遇到过要导出列表中所有的数据。假设列表中有十万条数据,那么导出所有,意味着要大批量的走查询接口,通常我们的后台的API接口GET请求支持的查询长度不得大于1000,(比如我根据一千个用户id查询用户的真实姓名),那么GET请求显然不太支持,解决办法可以使用Post请求。当然如果不改的话其实也有笨方法。如果在实际开发过程中能帮助你解决问题实在是很高兴。解决方法如下。
- 我们可以把接口请求GET 改为Post ,使用@RequestBody传递参数。
- 我们可以使用递归的方式进行分批查询。也是解决的方法之一。具体实现如下
封装了一个工具类
UserInfoManager
定义了一个常量 一次性查询3000条
private final Double SEPARATE = 3000D;
public Map<String, UserInfoDto> getByUserIds(List<String> userIds) {
if (CollectionUtils.isEmpty(userIds)) {
return Maps.newHashMap();
}
if (userIds.size() <= SEPARATE) {
return getgUserMapByIds(userIds);
}
Map<String, UserInfoDto> all = new HashMap<>(16);
double x = Math.ceil(userIds.size() / SEPARATE);
int start = 0;
int end = 0;
for (int i = 0; i < x; i++) {
end = (int) ((i + 1) * SEPARATE);
end = end > userIds.size() ? userIds.size() : end;
all.putAll(getgUserMapByIds(userIds.subList(start, end)));
start = end;
}
return all;
}
public Map<String, DaPengUserResource> getgUserMapByIds(List<String> userIds) {
// 根据userIds查询user微服务
List<UserInfoDto> userLists = userClient.getUserByIds(userIds);
if (!CollectionUtils.isEmpty(userLists )) {
return a.stream().collect(Collectors.toMap(UserInfoDto::getUserId, c -> c));
} else {
return Maps.newHashMap();
}
}
GET请求数据量大造成的问题的更多相关文章
- 分布式系统中我们会对一些数据量大的业务进行分拆,分布式系统中唯一主键ID的生成问题
分布式全局唯一ID生成策略 https://www.cnblogs.com/vandusty/p/11462585.html 一.背景 分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订 ...
- 关于dedecms数据量大以后生成目录缓慢的问题解决
四月份的时候博客被封.我不知情.因为一直很忙,没有来得及看.前两天来看以后,发现居然被封,吓傻了我. 赶紧找原因,原来是转载了某个人的博文,被他举报了,然后就被封了. 觉得很伤心,毕竟这个博客陪伴了我 ...
- 使用POI导出EXCEL工具类并解决导出数据量大的问题
POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...
- 【解决方案】客户端请求数据较大时,nginx返回数据被截断
[问题描述]:客户端使用curl命令向nginx请求数据,当返回数据量较大时,数据被截断,客户端无法获取完整的数据. [问题原因]:nginx配置文件中包含了proxy_buffer_size.pro ...
- DataTable 数据量大时,导致内存溢出的解决方案
/// <summary> /// 分解数据表 /// </summary> /// <param name="originalTab">需要分 ...
- Thinkphp解决phpExcel导出数据量大导致内存溢出
工作需要导出几万的数据量.操作比较频繁.之前数据在七八千是数据导出很慢.phpExcel是方便但是性能一般.现在改为使用csv导出数据:可以缓解内存压力,一次导出两三万是没问题的.当然服务器内存给力, ...
- post请求数据量过大,提交失败
HttpRuntimeSection.MaxRequestLength 属性,请求的最大大小(以千字节为单位). 默认大小为 4096 KB (4 MB) <system.web> < ...
- sklearn 增量学习 数据量大
问题 实际处理和解决机器学习问题过程中,我们会遇到一些"大数据"问题,比如有上百万条数据,上千上万维特征,此时数据存储已经达到10G这种级别.这种情况下,如果还是直接使用传统的方式 ...
- ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
- MVC学习笔记---MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
随机推荐
- 干货满满的 Zookeeper 学习笔记
读完< ZooKeeper : Wait-free coordination for Internet-scale systems > 论文的一些笔记,记录下来,方便以后查看 在读论文的时 ...
- 【论文笔记】FCN全卷积网络
全卷积网络(FCN)是用于图片语义分割的一种卷积神经网络(CNN),由Jonathan Long,Evan Shelhamer 和Trevor Darrell提出,由此开启了深度学习在语义分割中的应用 ...
- 获取Excel列标
/// <summary> /// 获取Excel列标 A B C...Z等 /// </summary> /// <param name="col" ...
- Spring IOC官方文档学习笔记(十一)之使用JSR 330标准注解
1.使用@Inject和@Named进行依赖注入 (1) Spring提供了对JSR 330标准注解的支持,因此我们也可以使用JSR 330标准注解来进行依赖注入,不过,在此之前,我们得先使用mave ...
- C++练习2 强制类型转换
const可以把有关的数据定义为常量. const类型可以修饰:对象,指针,引用 使用const_cast为强制类型转换,将常量强制转换非常量. 1 #include <iostream> ...
- Spring框架-AOP核心
Spring AOP AOP (Aspect Oriented Programming) 面向切面编程 OOP(Object Oriented Programming)面向对象编程,用对象的思想来完善 ...
- python 中常用可视化工具库
python 中常用可视化工具库 a.Numpy常用属性及方法 为什么用它:它可以方便的使用数组,矩阵进行计算,包含线性代数.傅里叶变换.随机数生成等大量函数(处理数值型的数组) import num ...
- TCP/IP协议(9): UDP(User Datagram Protocol) 协议 —— 最简单的传输层协议
TCP/IP协议(9): UDP(User Datagram Protocol) 协议 -- 最简单的传输层协议 关于用户数据报协议(User Datagram Protocol, UDP)协议 UD ...
- 【USACO 2021 January Contest, Platinum】Problem 1. Sum of Distances
\(\text{Solution}\) 一个性质:两个 \(K\) 元组有边相连当且仅当每个点在对应的图中到 \(1\) 有奇偶性相同的路径 那么我们就可以预处理每个图中的点到 \(1\) 的奇偶最短 ...
- 【NOIP2013提高组】华容道
分析 一个比较显然的方式是 设 \(f_{i,j,x,y}\) 表示达到空格所处位置为 \((i,j)\) 且特殊格位置为 \(x,y\) 的状态的最少步数 一次可以交换空格和相邻格,代价为 \(1\ ...