安卓数据存储 - 文件 vs SQLite

14
我正在开发一个应用程序,它会定期向外部服务器发送信息。为了备份目的,我会创建数据的本地副本。
就电池寿命而言,最好的数据存储选项是什么?每个数据提交都是一个序列化对象(该类具有5个字段,包括日期、数字和字符串),大约5K-10K。
还有什么其他想法吗?
3个回答

16

我认为使用SQLite还是文件并不重要,因为SQLite数据库只是系统上的一个文件(存储在/data/data/<your_package>/databases/)。你需要在正确的时机提交到数据库,就像你需要在正确的时机将文件保存到硬盘一样。换句话说,无论哪种方法,你都会使用同样多的硬盘写入。

我认为你选择使用什么取决于你要保存的数据类型。如果你需要数据库提供的功能(例如查询),那么请务必使用SQLite。但是,如果你不需要数据库,或者你有各种各样变化的数据(无法轻松地设置关系型数据库),那么我会选择文件。

我可以肯定告诉你的是,如果你选择这条路,则不应使用序列化来保存文件。Android的序列化速度很慢,并且会创建大文件。出于性能原因,最好编写自己的XML或JSON格式。


14

我不清楚电池续航方面的直接影响,但一个标准是哪种更容易管理?较少的数据操作意味着较少的 CPU 循环,从而延长电池寿命。

我认为 SQLite 选项更简单。您可以在 SQLite 表中放置一个日期列,用于存储数据,这使得删除不再需要的旧提交非常容易 - 并且所有处理都通过本地 SQL 库进行。使用自己的 Java 代码管理整个文件负载 - 或者更糟糕的是单个文件 - 将需要更多的工作。

此外,您可以将数据写入数据库并忘记它,直到您需要再次读取它。如果您将数据存储在文件中,则需要在 Android 应用程序生命周期方面确定何时应读取和写入文件。如果您担心电池寿命,您可能不希望更频繁地写入文件,并在内存中缓存数据,但您需要确保在暂停或销毁应用程序时不会丢失任何数据。在我看来,使用 SQLite 数据库更容易,不需要担心这些问题。


谢谢您的评论,看起来非常合理。您知道数据库是否始终在后台运行(像传统数据库一样),还是仅在应用程序使用它时才运行?我的意思是说,如果“SQLite服务器”(如果Android中存在这样的进程)仅因为我的应用程序而启动...也许这不是一个好主意。 - Guido
10
据我所知,SQLite只是一个文件,你可以通过库来访问它,没有运行的数据库服务器。 - tosh

4

您的应用程序是否是多线程的?如果有多个线程访问数据存储,则建议使用SQLite。让SQLite处理锁定问题。


2
警告,SQLite 在某些平台上不支持多线程(Xamarin)。 - nVentimiglia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接