java - 在休息时传输大量数据
问题描述
我目前正在开发两台服务器之间的休息服务。X 应用程序向 Y 发送一个对象,但该对象包含成百上千个子对象。X 应用程序收集所需的数据然后转换为 dto 并将此 dto 发送给 Y 应用程序。
例如;
A
/ \
B B
/ \
C C
/\ /\
D E D E
- 一个对象可能包含数百个 B
- 每个 B 对象可能包含几十个 C
- 每个 C 对象可能包含数百个 D 和数十个 E 等等
我的问题是;
- 在休息时传输所有这些数据是否可靠?
- Y 应用程序使用 Hibernate。Hibernate 在插入数据之前运行选择查询,这会导致大量工作负载。我怎样才能防止这种情况?
- 在我看来,将所有这些数据交织在一起是脆弱的,并不真正可靠。我能做些什么?
您认为完成我想要实现的整个过程的最佳方法是什么?
解决方案
就 REST 上的海量数据而言,我提供以下方法。
- 正如 Boris Sir 所建议的,您可以在 Rest 中采用 Reactive Stream 概念。
- 如果数据有点大,不建议将所有数据都以 Json 或 Xml 形式发送。您可以将限制条件作为参数,以便根据限制发送数据。考虑一种情况,您正在向 github 查询所有现有存储库,并且每个存储库可能有多个文件,在这种情况下,您可以使用 limit 作为请求参数。
- 如果您认为要通过 Rest 发送的数据很大或中等大小但不会过大,您可以在通过 Rest 发送数据时使用 gzip 压缩(Accept-Encoding: gzip,deflate , Content-Encoding: gzip)。
除了我看到你有数据的分层模型之外,最好有分类和每个类别的单独休息端点有限制。更具体地说,如果A是一种类别,则获取具有一定限制的A类别类型的所需数据,其他类似。
推荐阅读
- android - 在 Playstore 中上传应用程序,但我的应用程序未显示在某些设备中?
- javascript - ESRI Leafet ImageryLabels BasemapLayer 未显示 - 所有平铺宽度设置为 0
- ios - VNCoreMLModel 启动时间慢
- angularjs - ng-change 不适用于自定义 ui-grid
- algorithm - 视频中图像差异中的边界框
- php - mysql SELECT * FROM 和 SELECT TIME_FORMAT 在 1 个查询中
- gem5 - gem5:X86 KVM 全系统支持 readfile 伪指令
- python - 可执行构建闪烁并终止
- variables - 是否可以在“route.params”的末尾使用变量。捕捉其他几个“router.params”?
- python - 替换文件夹名称的多个字符