我应该保留远程数据库的本地副本吗?
Posted
技术标签:
【中文标题】我应该保留远程数据库的本地副本吗?【英文标题】:Should i keep a local copy of remote database? 【发布时间】:2014-08-12 02:31:03 【问题描述】:我正在开发一个应用程序,它基本上允许人们创建、加入和管理其他人的群组。组内的人也可以互相发送消息。
我一直在想哪条路会更好:
-
保存一个包含所有信息的远程数据库,包括发送给用户和从用户发送的消息。并让应用程序在每次需要信息时查询服务器。甚至是它以前见过的信息。
保留一个包含所有信息的远程数据库,包括发送给用户和从用户发送的消息。还要保留远程数据库的本地副本,并使其与远程数据库保持同步。每当应用程序需要查询信息时,它都会查询本地表是否是最新的。如果它不是最新的,它会更新表并在本地表上运行查询。这样,它将保留本地副本,并且当远程表没有更新时,应用程序将进行快速查询。
移动应用程序和远程数据库通常会做什么? 如果我只做 1 号,会是“不好的做法”吗?【问题讨论】:
有趣的讨论。我会说在设备上缓存消息是个好主意。但是将数据库与设备同步可能不是很有可扩展性,因为它需要与许多用户一起保存太多信息。 【参考方案1】:在我看来,在大多数情况下,手机中的数据库只是真实数据库的缓存,即服务器中的数据库。因此,我的建议是将您需要与服务器同步的所有数据保存在本地。这使您即使在没有连接的情况下也可以显示信息,并在信息更新时向用户显示一些内容。
此外,由于本地数据存储在服务器中,因此这种方法使本地数据易失且无风险。所以:
所有信息都在服务器中 通过后台进程(服务、线程、intentservice,任何最适合您的方式),您可以将此信息与本地数据库同步 UI 始终显示来自本地数据库的信息当然,这是一种非常通用的方法,需要针对每种情况进行检查,因为不同的情况可能需要不同的方法。
【讨论】:
【参考方案2】:我的基本反应是,我会将数据保存在一个地方并远程访问它,除非有一个主要原因将其保存在本地。必须有情有可原的情况才能强制我在本地保留一份数据副本。只需确保您的查询准确而简洁。不要提取超出您需要的数据。但是,您可以将一部分数据保存在本地。特定于用户的项目(如消息),但保留不相关的数据只会增加开销和膨胀。
【讨论】:
为什么不将用户之间发送的消息保存在本地?不这样做是浪费带宽。 Whatsapp、Kik、Telegram 等所有大型消息应用程序都将消息保存在本地。 根据您移动的内容,您真的可以燃烧空间。在不知道您正在查看什么样的数据的情况下,很难给出具体的答案。如果您只是谈论存储与本地系统相关的信息,那么可以,但是如果您谈论的是一个完整的信息数据库,而其中只有一小部分被使用,那么您就是在浪费带宽和空间。此外,如果信息是由其他来源更新的,那么您将花费大量时间和精力来确保从移动设备的角度来看,这些信息在许多位置都是最新的。 很好的输入,我同意不应该将完整的数据库保存在本地。但是,这些消息可能根本不应该保存在服务器上。您可以通过服务器将消息转发给应用程序的不同用户而不保存它们(隐私问题)。然后,用户将拥有他们所交换消息的本地副本,他们可以随时查看。如果某个用户离线,您可以将消息临时缓存在服务器上。 在大多数情况下,合法性会说应该存储消息。根据您的行业,您必须注意这方面。是的,需要能够缓存消息并在重新连接时自动下载它们。 消息,是的。它们应该存储在本地。您甚至可以提供选择信息以在本地存储的功能,以防您处于网络访问受限的区域。但不是整个数据库。以上是关于我应该保留远程数据库的本地副本吗?的主要内容,如果未能解决你的问题,请参考以下文章
Gradle应该从mavenLocal()创建每个项目的JAR-s本地副本吗?
如何将远程 SQL Server Express 数据库的部分副本复制到本地 SQL Server Express 数据库?