Ios 当更新数据库后只有少量数据更改时,数据通常如何在设备上重新加载/显示?(概念上)

Ios 当更新数据库后只有少量数据更改时,数据通常如何在设备上重新加载/显示?(概念上),ios,arrays,database,core-data,Ios,Arrays,Database,Core Data,下面是我所说的一个例子: 以推特为例。每当你发tweet时,tweet都会被发送到数据库,然后它也会作为tweet列表的一部分显示在你的设备上 在发送一条tweet后,您在设备上看到的tweet列表是如何更新的?我想到了一些可能的方法,但我想要的是哪种方法是最好的: 在发送一条tweet后,整个最近tweet列表都会从远程Twitter服务器重新下载(我非常怀疑,因为这需要相对较长的时间,因为它实际上只是将一条tweet附加到显示的tweet数组中) 保存Tweet对象的本地数组与数据库分开更

下面是我所说的一个例子:

以推特为例。每当你发tweet时,tweet都会被发送到数据库,然后它也会作为tweet列表的一部分显示在你的设备上

在发送一条tweet后,您在设备上看到的tweet列表是如何更新的?我想到了一些可能的方法,但我想要的是哪种方法是最好的:

  • 在发送一条tweet后,整个最近tweet列表都会从远程Twitter服务器重新下载(我非常怀疑,因为这需要相对较长的时间,因为它实际上只是将一条tweet附加到显示的tweet数组中)
  • 保存Tweet对象的本地数组与数据库分开更新(例如,它更新数据库,然后使用发送到数据库的相同数据更新其数组,并且从不下载您刚刚发送的Tweet,因为您不需要下载,因为您已经在本地拥有它,因为您已经编写了它)
  • 核心数据是否能够在一个(或相对较少的)步骤中更新远程数据服务器和阵列?(很抱歉,如果这是显而易见的答案,如果听起来我没有研究它,但我确实阅读了有关核心数据的内容,并开始了一个教程。只是因为内容太多,我需要花一到两天的时间才能弄清楚它是否适合我的应用程序)
  • 是否有其他管理方法?
另外,如果是上面后两种想法之一,您是否能够更新表视图单元格,只需更新本地数组并从该数组中重新加载单元格,而无需从数据库加载一条tweet?我只是想知道最有效的方法是什么

同样,我的主要问题是:当你进行一次微小的更新(如发送推文)时,如何保持发送到远程数据库的数据与本地数据(存储在可变数组中)同步,而不必从数据库重新加载所有数据(当有其他内容[即其他推文])已加载。

(我知道,除了Twitter开发人员之外,没有人确切地知道Twitter实际上是如何工作的,但我只是以这个Twitter功能为例。同样的概念也可以应用于任何类似的应用。)

(此外,这是一个关于数据流的概念性问题,因此我不需要看任何代码,但建议使用不同的技术,如核心数据,或仅更新阵列,将不胜感激。)

(我一直在研究这一点,以及各种不同的方法,这变得非常耗时,所以我想问问你们这些有经验的人。此外,这可以帮助其他有类似问题的人。)

(很抱歉,如果我问了一大堆问题,但我基本上是以不同的方式问同一个问题,并提供可能的解决方案。)


非常感谢您的任何见解!

这简直是微不足道。您可以更新本地数据库,同时发送远程更新


您可以使用远程响应将本地记录标记为已同步,或稍后再次尝试更新。

不可变的消息(如tweets)实际上非常容易处理——服务器端和应用程序中

当您从客户端向服务器发送tweet时,您也会更新“主上下文”(请参阅“托管对象上下文”),后者会向控制器发送通知(请参阅
nsfetchedresultscoontroller
,后者会根据托管对象上下文中的本地模型更新表视图

从服务器更新只是将本地tweet与同时添加的新tweet合并

由于没有可变tweet,同步其实没什么大不了的。正如评论中提到的,如果有可变tweet(或任何类型的消息),同步将变得更加复杂


核心数据不会自动更新远程服务器。但有一些解决方案可以通过核心数据“查看”远程数据库-请参阅NSIncrementalStore和相关的第三方库(AFIncrementalStore)。

+1了解如何努力分析问题。好吧,这只是“可笑的小事”因为推特是不变的。否则,即使是整个公司(我是说苹果吗?)努力做到正确。@也许你在思考哲学问题,比如描述数据库的框架。但让所有推文确认最后一条推文是否已经到达的想法是可笑的。不,没有酸-但“最终一致”这就成为了推文在任何时候都可以被编辑的一个因素——也就是说,推文不是一成不变的。然后,同步就变得复杂了。