如何管理移动应用程序中不断增加的 sqlite 大小?
Posted
技术标签:
【中文标题】如何管理移动应用程序中不断增加的 sqlite 大小?【英文标题】:How to Manage increasing size of sqlite in Mobile App? 【发布时间】:2018-04-09 17:07:05 【问题描述】:我的应用有时需要与网络服务器同步,并在移动 sqlite 数据库中提取数据以供离线使用,因此数据库大小一直呈指数增长。 我想知道 whatsapp、hike、evernote 等专业应用程序如何管理他们的离线 sqlite 数据库。 请建议我解决此问题的步骤。
PS:我问的是离线数据库(即同步后大小增加)管理不要与数据库与网络服务器同步混淆。
【问题讨论】:
您可能想阅读以下内容:***.com/a/53839382/10498828 @forpas 我的数据没有按照您建议的方式删除 【参考方案1】:以下链接将有助于了解 Whatsapp 到底在使用什么, https://www.quora.com/How-is-the-Whatsapp-database-structured
不确定您是否必须始终将所有数据保存在设备上,但如果您可以选择始终使用云服务(如 FCM、AWS)来存储或备份大部分数据。如果您需要将所有数据保留在设备上,那么一种方法可能是在您的应用程序中使用缓存机制。
例如 - 使用 LRU(最近最少使用)在设备上缓存/存储您需要的数据,同时将其余数据存储在云端,并从设备中删除不需要的数据。如果需要,您始终可以按需检索数据(即,如果用户尝试拉动刷新或执行其他操作)并在不使用时将其删除。
【讨论】:
谢谢@Ahmed 您的回答与我的问题相关,但您提供的链接与我的问题无关。 感谢@Ajeetyadav。这只是为了解释 WhatsApp 的作用。我不能给你一个确切的想法,但该链接是为了让你了解他们如何使用以及使用什么。它可能对你没有帮助,但对其他人有帮助 @Ahmed,可能不需要,但updating and compacting sqlite database in android 说了一点。哦,检查 auto_vacuum 和 incremental_vacuum here(如果我没记错的话,如果使用 SQLiteOpenhelper 子类,请在 onConfig 方法中执行此操作)【参考方案2】:我不知道您的数据量有多大。但是,我认为将相当大的数据存储到应用程序的内部存储器中应该不是问题。内部内存在所有应用程序之间共享,因此它可以增长直到存储空间被填满。
在我看来,这里的主要问题是如果您没有对数据库表进行适当的索引,则查询时间会很长。否则,将数据库保存在您的内部存储中是完全可以的,我认为您不必担心可以存储在应用程序内部存储中的数据量,因为较新的 Android 设备提供了更好的存储能力。
因此,如果您的数据库非常大,无法放入内存,您可以考虑只保留经常使用的数据,否则删除。这在很大程度上取决于您的应用程序的用例。
在我开发的一个应用程序中,我在外部存储器中存储了一些大型数据库,并在需要时将它们复制到内部存储器中。不过,将数据库从外部存储复制到内部存储需要一些时间(几秒钟)。但是,一旦数据库被复制,我就可以高效地运行查询。
如果您需要任何帮助或澄清某些问题,请告诉我。我希望这对你有帮助。
【讨论】:
【参考方案3】:对于最大大小的数据库。 AFAIK 您不想松开设备上的内容并强制重新加载。
确保在应用简单的 alter table add column will work. 时不会随应用的每个新版本删除数据库
您所做的存档和从设备中删除的操作为用户提供了一种在后台加载它的方法。
【讨论】:
【参考方案4】:可能有一些应用程序/数据库可以在其中找到文档,但这种情况可能是有限的并且是一个例外。 因此,要准确了解发生了什么,您需要创建一些数据库快照。您可以只从一个应用程序开始,也可以直接从多个应用程序开始,但不分析您将无法获得可靠的说法。 每个应用程序的原因可能甚至不同,因为数据库和应用程序功能自然也不同。
大小增长快于传入内容的数量可能与缓存表或搜索索引有关,但也可能存在其他原因。如果没有验证和一些重要的基本信息,就不可能告诉你详细的原因。 可能数据库的表名已经给出了一些提示,但是如果表名甚至字段只是使用无意义的字符串,那么您必须分析其中的数据,包括快照之间的变化。
【讨论】:
以上是关于如何管理移动应用程序中不断增加的 sqlite 大小?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ubuntu 15.04 上安装带 JSON 支持的 SQLite 3.9