前端万级数据量的图表中,数据应该怎么获取?

2022-05-05 13:29:55 +08:00
 kiritoxf

数据量大概两三万左右,前端是 react + echarts (或者 d3 ),后端是 java

由于业务需求,这些数据都是有意义的,要都显示出来

我的想法是调一个接口一次性把所有数据全返回来

但是后端说微服务不能这么干,内存也装不下什么的,让我 500 条一次,手动依次获取全部数据

我就很迷茫了,以前也没这么做过不知道对不对

2572 次点击
所在节点    前端开发
30 条回复
itsme001
2022-05-05 15:12:42 +08:00
散点图 点超过一定量 后浏览器端会卡的。具体是多少忘了,以前遇到过。
没超过这个量让后端写个接口一次返回。
超过这个量考虑
1.做同含义的展示。后端做对应聚合。
2.server side render ,后端根据前端传参直接返回 png 。
这个问题 pyviz ,holoviz 有一篇文章写的很好。是关于大量数据展示的聚合、采样、渲染的。

我不太清楚前端情况,几个可视化库应该是有 server side render 方面的内容的。不知道具体 api 。你可以用这个关键词去搜。

可以问问做可视化的前端或者做 python 数分的。
netnr
2022-05-05 17:18:49 +08:00
@falcon05 #18 你可以对比一下
zhangleshiye
2022-05-05 17:46:35 +08:00
不是 如果不是实时性的 之间让后端弄个 redis 做缓存啊 存硬盘怎么失效呢
haah
2022-05-05 17:55:17 +08:00
按照“日期范围”获取呀!一页一天不行么?
potatowish
2022-05-05 19:59:31 +08:00
后端如果是 Java 可以考虑 ResponseBodyEmitter ,前端只需一次请求,后端每查询出一页数据就写入到响应,直到响应完成。并且服务端内存最多只需占用一页的数据。
night98
2022-05-05 21:19:50 +08:00
websocket 或者 ssr ,你这需求一看就不靠谱,3 万数据正常屏幕平均十个点显示一个元素?抽样做吧,参考类似贝壳找房地图找房功能
dcsuibian
2022-05-05 21:46:11 +08:00
楼上的学到了^_^
最近正好也有做大量数据展示,我怎么就一直没想到分块查询的思路呢。。。
dqzcwxb
2022-05-05 21:47:45 +08:00
分页查询是利好前端的,你要是不想做后端巴不得不搞
dcsuibian
2022-05-05 22:05:59 +08:00
没画过散点图,我这边 ECharts 画折线图,20000+数据也是秒画。卡顿主要是后台数据库查询了。

你可以先试试看一次查询的,性能问题最忌讳虚空打靶。
看看后端 Java 、数据库、网速、体积、内存、js 、ECharts 到底哪个占了最大头的部分。这样才能针对性优化。
500 条数据感觉属实有点少了,跟 #13 说的至少加个 0 ,现在计算机的性能真的挺强、挺快的。

再者说也不用等返回完了再画出来吧,如果每条数据是独立的,那完全可以有的部分先画出来。我记得 ECharts 对过渡动画和在线数据更新也支持得不错的。
kiritoxf
2022-05-06 09:48:29 +08:00
感谢大家的回复,大家提出的建议都有参考价值。

我的情景比较特殊,应该只有 5000 一次分页的可以用,因为所有的数据都取出来后还要跑另一个东西去算横纵坐标,但是试了下非常耗时间,得放弃这么做了。

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

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

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

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

© 2021 V2EX