求助后端如何存取算法执行结果以及如何和前端交互

2023-10-20 20:11:28 +08:00
 doubleTrees
最近遇到一个业务场景,后端服务接入了一个算法, 算法跑出来的结果是一个时序数据,也就是给出每一个时间单位(可能是 1 秒或者 0.1 秒,是确定的)的整个系统的状态,整个结果可能是包含了几十分钟甚至几十个小时,整个算法结果很大( dump 成 json 字符串存到文件里可能有几百兆(几十分钟的),或者几个 G (几个小时的))
现在的业务需求是,需要在算法跑完之后把数据慢慢给前端展示,且还需要支持快进和到指定时间点。算法结果需要存储,随时可以“播放”。
其实整个需求和生成一个视频然后让前端播放差不多。
我的问题是:
1.后端怎么存算法结果,按秒存到数据库?这样的话读起来会不会数据库压力很大
2.怎么和前端交互效率高点(目前和前端商讨是让前端给定一个时间区间,然后直接返回这个时间区间内的所有数据)
3.怎么做快进

技术栈:
后端是 springboot ,postgre14 数据库,也有 redis
前端是 react
930 次点击
所在节点    程序员
4 条回复
dode
2023-10-21 00:11:11 +08:00
直接存本地文件
RedNax
2023-10-21 00:12:37 +08:00
你看视频是怎么做的:
每一段时间(比如一秒),有一个关键帧,里面是整个图像的信息;关键帧之间的帧,只记录和上一帧的差异,每一帧都是用上一帧算出来。

你们也可以这样搞:每隔段时间记录一个完整状态,之间只记录和上一个状态的 diff 。跳时间点只需要跳到最近的完整状态继续播放。

当然如果你们状态之间的差异极大,diff 不好用那当我没说。
doubleTrees
2023-10-21 00:45:54 +08:00
@RedNax 如果时间单位是 0.1 的话 diff 不是很大,如果时间单位是 1 的话,diff 会很大,diff 如果很大的话就很麻烦,存取都很麻烦
doubleTrees
2023-10-21 00:49:41 +08:00
@dode 之前存本地文件的话确实可以,可以完全参考视频的读取和传输流程,但是要完全自己实现流式传输和快进功能感觉难度有点大

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

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

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

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

© 2021 V2EX