请教一个 web 接口设计

2022 年 6 月 15 日
 darnurash

现有一个基于 spring mvc 的独立 web 程序,无任何其他服务(数据库、redis 等统统没有) 需求是提供一个接口,返回一个大型 excel 文件中的内容。 因为文件比较大,读取的操作应该只能做一次 请问怎么高效实现这个接口

3627 次点击
所在节点    Java
20 条回复
rock123
2022 年 6 月 15 日
预先解析 excel ,整理分割,重新组织成便于读取的数据结构,保存到内存,数据库,redis ,等等地方,供接口读取。excel 有变化了,定时或手动重新解析,看你的实际场景
renmu123
2022 年 6 月 15 日
你要不说说有多大,你可以起个 sqlite
Ayanokouji
2022 年 6 月 15 日
没有复杂格式的话,可以考虑把 excel 转换成 csv ,直接内存应该就够了
maocat
2022 年 6 月 15 日
数据流的形式给前端,让前端解析,前端做不出来就是他不行 /dog
cco
2022 年 6 月 15 日
excel 能有多大,有行列限制的。 一股脑返回就行,压力给到前端。
Vegetable
2022 年 6 月 15 日
看大小,直接开局加载到 sqlite in memory ,后边就不管了。
rabbbit
2022 年 6 月 15 日
直接发给前端即可,前端抗议性能差就上 V2 发个帖子:
经过技术选型,我们放弃了 xxx,转向了 xxx.
tramm
2022 年 6 月 15 日
不考虑内存的话,启动时读取,存内存里.
rabbbit
2022 年 6 月 15 日
具体操作可以参考 https://www.v2ex.com/t/519999?p=3
rabbbit
2022 年 6 月 15 日
算了不开玩笑了
前端咋设计的,能分页吗?
到底有多大,能否全读到内存里,然后前端按分页的形式展示.
rabbbit
2022 年 6 月 15 日
其实如果用虚拟 Dom,前端抗个 1 万行 20 列没啥问题.加载速度大概在 2~3 秒吧.
tairan2006
2022 年 6 月 15 日
> 因为文件比较大,读取的操作应该只能做一次 请问怎么高效实现这个接口

文件大你不会分页么返回么,把 excel 转成 csv ,用 mmap 加载到内存里分段读取不就完了。
xiongxin8802
2022 年 6 月 15 日
如果很大的话使用 csv 格式,分段先写入文件,然后下载这个文件
DonaldY
2022 年 6 月 15 日
高效?
文件扔 oss 里,前端请求访问就下载呗。
superchrisliu
2022 年 6 月 20 日
@DonaldY
superchrisliu
2022 年 6 月 20 日
@tairan2006 10g 也能用 mmap 吗
tairan2006
2022 年 6 月 20 日
@superchrisliu 64 位机器肯定能映射 10g 的
superchrisliu
2022 年 6 月 21 日
@tairan2006 我刚去查了一下好像确实可以映射 10g ,最大值跟 Linux 内核参数有关?
tairan2006
2022 年 6 月 21 日
@superchrisliu

Although pointers are 64-bit wide, most processors do not actually support virtual addresses using the full 64 bits. To see what size virtual addresses your processor supports, look in /proc/cpuinfo (48 bits is typical).

grep "address sizes" /proc/cpuinfo

Additionally, half of the virtual address space is used by the kernel and not available to userspace - leaving 47 bits in the current Linux implementation.

48 位理论上最大支持 128TB
tairan2006
2022 年 6 月 21 日

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/859840

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX