Java 通过rest传输大量数据

Java 通过rest传输大量数据,java,spring,hibernate,rest,Java,Spring,Hibernate,Rest,我目前正在处理两台服务器之间的rest服务。X应用程序向Y发送一个对象,但该对象包含数百个或数千个子对象。X应用程序收集所需数据,然后转换为dto,并将此dto发送给Y应用程序 比如, A / \ B B / \ C C /\ /\ D E D E 一个对象可能包含数百个B 每个B对象可能包含几十个C 每个C对象可能包含数百个D和几十个E等等 我的问题是, 通过rest传输

我目前正在处理两台服务器之间的rest服务。X应用程序向Y发送一个对象,但该对象包含数百个或数千个子对象。X应用程序收集所需数据,然后转换为dto,并将此dto发送给Y应用程序

比如,

        A
       / \
      B   B
     /     \
    C       C
   /\       /\
  D  E     D  E
  • 一个对象可能包含数百个B
  • 每个B对象可能包含几十个C
  • 每个C对象可能包含数百个D和几十个E等等
我的问题是,

  • 通过rest传输所有这些数据可靠吗
  • Y应用程序使用Hibernate。Hibernate运行选择查询 在插入数据之前,这会导致大量的工作负载。我怎么能 防止这种情况
  • 在我看来,把所有这些数据交织在一起是很脆弱的 也不是真正可靠的。我能做什么

  • 您认为我要实现的整个过程的最佳方法是什么?

    就REST上的海量数据而言,我提供以下方法

  • 正如Boris先生所建议的,您可以在Rest中采用反应流概念
  • 如果数据有点大,建议不要通过rest以Json或Xml的形式发送所有数据。您可以将限制条件作为参数,以便按照限制发送数据。考虑一种情况,您正在向github查询所有现有存储库,每个存储库可能有多个文件,在这种情况下,您可以使用limit作为请求参数
  • 如果您认为要通过Rest发送的数据较大或中等,但不是太大,那么可以在通过Rest发送数据时使用gzip压缩(接受编码:gzip,deflate内容编码:gzip

  • 除此之外,我看到您有数据的分层模型,最好对每个类别进行分类,并为每个类别设置一个单独的Rest端点,并且有限制。为了使其更具体,如果A是一种类别,则使用具有特定限制的类别类型获取所需的数据,对于其他类别也是如此

    就REST上的海量数据而言,我提供以下方法

  • 正如Boris先生所建议的,您可以在Rest中采用反应流概念
  • 如果数据有点大,建议不要通过rest以Json或Xml的形式发送所有数据。您可以将限制条件作为参数,以便按照限制发送数据。考虑一种情况,您正在向github查询所有现有存储库,每个存储库可能有多个文件,在这种情况下,您可以使用limit作为请求参数
  • 如果您认为要通过Rest发送的数据较大或中等,但不是太大,那么可以在通过Rest发送数据时使用gzip压缩(接受编码:gzip,deflate内容编码:gzip

  • 除此之外,我看到您有数据的分层模型,最好对每个类别进行分类,并为每个类别设置一个单独的Rest端点,并且有限制。为了使其更具体,如果A是一种类别,则使用具有特定限制的类别类型获取所需的数据,对于其他类别也是如此

    使用REST是一种不错的攻击,HTTP是一种流协议;主要问题是1)当连接在发送过程中部分断开时会发生什么,2)将所有内容加载到内存中。如果要正确使用Hibernate,使用查询游标可以通过流式传输查询结果来避免2)。修复1)需要摆脱休息。如果你抛弃了所有这些,Hibernate,REST等等,使用一个现代的、反应式的通信协议,那么这两个问题都会自行解决。有什么替代方案?根据可靠性,REST并不比RMI好或坏。如果您需要传输如此数量的数据,我会质疑原因。问题或映射,对于更新,您首先需要手头的对象。因此选择。但是这些都可以通过Hibernate使用漂亮的连接(如果您使用渴望加载)快速完成。更大的问题是在主内存中创建的对象数量,并将这些对象与从其他服务器复制的结构进行比较。。。听起来很像是系统中的逻辑和数据冗余使用REST是一种不错的攻击,HTTP是一种流协议;主要问题是1)当连接在发送过程中部分断开时会发生什么,2)将所有内容加载到内存中。如果要正确使用Hibernate,使用查询游标可以通过流式传输查询结果来避免2)。修复1)需要摆脱休息。如果你抛弃了所有这些,Hibernate,REST等等,使用一个现代的、反应式的通信协议,那么这两个问题都会自行解决。有什么替代方案?根据可靠性,REST并不比RMI好或坏。如果您需要传输如此数量的数据,我会质疑原因。问题或映射,对于更新,您首先需要手头的对象。因此选择。但是这些都可以通过Hibernate使用漂亮的连接(如果您使用渴望加载)快速完成。更大的问题是在主内存中创建的对象数量,并将这些对象与从其他服务器复制的结构进行比较。。。听起来很像是系统中的逻辑和数据冗余。谢谢你的回答。对象是一个复杂的产品。我需要A的每个细节。每个产品的数据传输只发生一次。如果产品需要更新、删除或新添加,A、B、C、D、E、object中的每一个都有自己的rest服务,这些操作可以通过自己的rest服务完成。这里的主要问题是第一次发送对象A及其所有子对象。我必须确保所有数据都成功发送并保存到target。是的@mnesimi,我理解你的问题,你这样认为产品类型是手机,每部手机有n种类型的手机,如LG、三星、苹果等,而且每一家手机公司都有m nu