我的应用程序有时需要与web服务器同步,并提取移动sqlite数据库中的数据以供离线使用,因此数据库大小呈指数级增长
我想知道像whatsapp、hike、evernote等专业应用程序是如何管理他们的离线sqlite数据库的
请建议我解决这个问题的步骤。
附言:我问的是脱机数据库(即同步后的大小增加)管理,不要将其与数据库与web服务器同步混淆
我不知道你的数据大小有多大。但是,我认为将相当大的数据存储到应用程序的内部内存应该不会有问题。内部内存在所有应用程序之间共享,因此它可以增长,直到存储空间被填满。
在我看来,如果数据库表没有正确的索引,那么这里的主要问题是查询时间。否则,将数据库保存在内部存储中是完全可以的,我认为您不必担心应用程序内部存储中可以存储的数据量,因为较新的Android设备提供了更好的存储能力。
因此,如果你的数据库真的很大,不适合内部内存,你可能会考虑只使用频繁使用的数据,否则就会删除。这在很大程度上取决于应用程序的用例。
在我开发的一个应用程序中,我将一些大型数据库存储在外部存储器中,并在必要时将其复制到内部存储器中。不过,将数据库从外部存储复制到内部存储需要一些时间(几秒钟)。然而,一旦数据库被复制,我就可以高效地运行查询。
如果你需要任何帮助或澄清一些问题,请告诉我。我希望这对你有帮助。
对于最大大小的数据库。AFAIK你不想松开设备上的东西,然后强行重新加载。
当一个简单的alter-table-add列可以工作时,确保你不会在每次新发布的应用程序中删除数据库。
存档和从设备中删除的操作为用户提供了一种在后台加载的方式。
可能有一些应用程序/数据库可以在其中找到文档,但这种情况可能是有限的,也是一个例外
因此,要确切了解发生了什么,您需要创建一些数据库的快照。你可以只从一个应用程序开始,也可以直接用几个应用程序来做,但如果不进行分析,你就无法得到可靠的声明
每个应用程序的原因可能会有所不同,因为数据库和应用程序功能也自然不同。
比传入内容量更快的大小增长可能与缓存表或搜索索引有关,但可能还有其他原因。如果没有验证和一些重要的基本信息,就不可能告诉你详细的原因
数据库的表名可能已经给出了一些提示,但如果表名甚至字段只是使用了无意义的字符串,则必须分析其中的数据,包括快照之间的变化。
以下链接将有助于了解Whatsapp到底在使用什么,https://www.quora.com/How-is-the-Whatsapp-database-structured
不确定你是否必须将所有数据一直存储在设备上,但如果你有选择,你可以随时使用云服务(如FCM、AWS)来存储或备份大部分数据。如果你需要将所有数据保存在设备上,那么一种方法可能是在你的应用程序中使用缓存机制。
例如,使用LRU(最近最少使用)将您需要的数据缓存/存储在设备上,同时将其余数据存储在云上,并从设备中删除不需要的数据。如果需要,您可以随时按需检索数据(即,如果用户试图拉取以刷新或执行其他操作),并在不使用数据时将其删除。