上传1000+;是否将记录发送到还包含iOS/Android应用程序中每条记录的图像的服务器?

上传1000+;是否将记录发送到还包含iOS/Android应用程序中每条记录的图像的服务器?,android,ios,database,architecture,server,Android,Ios,Database,Architecture,Server,我有一个离线工作的应用程序。假设在此期间以及建立连接时,在每条记录中创建了1000多条记录,其中包含图像。将所有1000多条记录发送到服务器的方法应该是什么,该服务器还可以处理网络调用或API故障响应之间的任何中断 我假设我必须批量发送记录,但如何处理中断、保持一致性以及防止任何类型的数据丢失。我建议使用Firebase数据库API。 它有很好的离线/在线/同步实现 并且可以使用Admin SDK为您的NodeJS服务器读/写数据: 将记录保存在本地数据库中,并使用ORMs。使用为Webser

我有一个离线工作的应用程序。假设在此期间以及建立连接时,在每条记录中创建了1000多条记录,其中包含图像。将所有1000多条记录发送到服务器的方法应该是什么,该服务器还可以处理网络调用或API故障响应之间的任何中断


我假设我必须批量发送记录,但如何处理中断、保持一致性以及防止任何类型的数据丢失。

我建议使用Firebase数据库API。 它有很好的离线/在线/同步实现

并且可以使用Admin SDK为您的NodeJS服务器读/写数据:


将记录保存在本地数据库中,并使用ORMs。使用为Webservice调用提供onSuccess和onFailure方法的改进。要定期向服务器发送数据,可以使用同步适配器。

  • 首先,我需要知道你是如何在本地数据库中保存图像的
  • 您需要创建一个服务来捕获连接状态。每次建立连接时,您都以多部分类型提交记录。您可以修改/异步任务
  • 每个改造/异步任务只需提交一条记录,它使您能够处理每条记录的成功/失败
  • 您可以运行单个或多个改装/异步任务来提交一个或多个记录,这取决于您自己
  • 若ur数据有映像,在服务器端,您必须处理从ur服务器到第三服务器(保存映像的服务器)的过程

    • 这是一个非常广泛的问题,它涉及到架构、UI体验、限制等

      这似乎是一种同步模式,用户可以在本地和脱机情况下与数据交互,但在某些情况下,您需要将本地数据与服务器端同步,反之亦然

      我认为最好从后台服务开始(Android,不确定iOS上是否有类似的方法)。本质上,无论Android应用程序是否正在运行,该服务都必须在后台处理所有同步、中断和故障

      如果是本地数据库,那么您需要适当地管理打开和关闭数据库,我建议使用一个字段来标记任何同步记录,以便在某些记录失败时,您可以在另一点重试。 此外,您还可以将记录转换为json数组,然后执行post请求。 至于上传图片,如果有很多图片,肯定需要批量上传,但也要确保跟踪哪些图片上传了,哪些没有上传

      如果您支持来自不同设备和平台的同步,您将遇到的一个问题是,您将在后端同步冲突的数据。你需要处理这个案子,否则,它可能会非常混乱,很可能会引起很多奇怪的问题


      希望这在较高的层次上有所帮助:)

      要采用简单的方法,请在数据对象[NSManagedObject]类中设置一个标记为sync。在创建新对象/修改现有对象时,将sync标记更改为false

      筛选同步值为false的数据对象

      let unsyncedFilter = NSPredicate(format: "sync = %@", @(false))
      
      现在,您将拥有一个要与服务器同步的对象数组。如果您在请求中逐个发送对象。
      成功时,将同步标志更改为true,否则每当在应用程序启动/可达性状态更新时再次执行您的功能时,它将再次过滤掉未同步的数据并开始同步。

      您可以使用分而治之的方法将任务划分为小任务并将数据上载到服务器。 1.采用以false开头的布尔标志“isFinishData”。 2.正在开始将服务器上的数据从0上载到100条记录。 3.下一条记录从100发送到200。 4.此进程一直运行,直到最后一条记录(1000)未发送为止。 5.在上次记录更新中,将布尔变量设置为true并退出循环


      这种逻辑在IOS/android系统中都可以正常工作

      我想最好的方法是分别发送每个记录(如果它们彼此不相关)

      如果您有媒体附件,如果您以~2 MB/s的速度通过移动互联网上传,则发送每条记录平均需要2秒。如果您要通过每个请求发送大量记录,则必须具有长期稳定的连接

      您可以将每条记录作为多部分请求发送,其中部分是记录的正文和媒体附件

      此外,您无需检查internet连接,也无需使用接收器捕捉连接状态的变化。您只需使用此库来触发同步请求:


    • 正如其他人提到的,这是一个相当广泛的问题。这在很大程度上取决于接收数据的服务器的体系结构以及应用程序的体系结构

      如果您可以控制后端的实现,我建议您实现一个允许暂停和恢复传输的存储解决方案。谷歌云存储和亚马逊S3都提供类似的功能

      这种方法背后的想法是能够从停止上传的地方获取上传。如果应用程序崩溃或互联网连接出现问题,您不必从头开始重新启动。 在您的情况下,我仍然会为每个记录分别开始上传,并存储它们的上传进度

      在这里,您可以找到如何使用Amazon上的移动SDK使用暂停/恢复方法的示例


      编辑添加对Amazon iOS SDK的引用,

      最好的方法是将文件分成100个文件块,每隔一段时间或在应用程序空闲时上载。

      我不知道这是不是一个好建议,为什么不将这些记录转换为文件(CSV)然后上传到服务器,服务器处理其余的。@jagapathi和图像呢?那么您就有了fo