【问题标题】:SQLite Database vs. File based Data storage from Battery Performance Impact perspective从电池性能影响的角度来看,SQLite 数据库与基于文件的数据存储
【发布时间】:2016-12-04 23:42:21
【问题描述】:

我有一个应用程序一直在后台服务中运行(仅在屏幕打开时),并定期(1-10 分钟)记录间隔时间有多长以及它是好是坏间隔。每天结束时,我都会统计这些好间隔和坏间隔,并将其记录到 csv 文件中。

For visual people like me:
           <--------------------------THE DAY --------------------->
minutes:    2m  1m    5m     3m    3m    3m    3m   1m  2m  1m  1m
          |----|---|-------|-----|-----|-----|-----|--|----|---|---|
              rec rec    rec   rec   rec   rec   rec rec  rec rec rec
       Record                                                     

目前我使用 SharedPreferences 来存储全天的好/坏计数,并在一天结束时将其写入文件,但我越来越担心 SharedPrefs 数据的持久性(我有一些它被我认为是操作系统清除我的应用程序缓存而随机擦除的情况)

我正在尝试在将这些临时计数记录在文件中与完全迁移到 SQLite 数据库结构并全天进行一致的写入和读取调用之间做出决定。

从电池性能的角度来看,每天进行多次写入和读取调用(约 500-5000 次操作)成本最低,为什么?

【问题讨论】:

  • Everything 存储在某种文件中。擦除应用的数据将擦除设置、数据库和所有其他文件,除非您将它们存储在外部存储中,这样更容易擦除。

标签: android performance sqlite service


【解决方案1】:

SQLite 数据库 == 基于文件的数据存储

SQLite 数据库只是存储在磁盘上的一个文件,性能差异将很小,SQLite 数据库唯一多做的事情就是在 CPU 上执行更多指令以最终将数据写入。

我不选择 SQLite 数据库的唯一原因是因为你只写数字,所以在设置方面可能有点过分。您可以做的是自己将文件写入存储/sdcard,并继续将数字附加到由换行符或其他 CSV 格式分隔的文件中。

【讨论】:

  • 好点,但是您不认为来自 SQL 端的附加抽象层会对性能产生影响,因为您访问的方式完全不同,不是吗? (即结构化查询和二进制读取与 ASCII 文件和基于文本的读取?)
  • 它们之间的性能差异很小,电池消耗将一样好。你应该选择 SQLite。
  • 有趣,如果您不介意,我想看看其他人在接受之前是否有其他理由或支持您的答案:)
【解决方案2】:

看起来基于文件的方法会比 sqlite 更好,但这取决于你如何处理文件

  1. SQLite 本身将数据存储在 db 文件中。它将拥有自己的数据库 管理成本但很小

  2. 每次应用插入或获取数据时,都必须打开数据库,这个 本身就是成本。如果应用程序保持打开,那也很昂贵

  3. 与 sq lite 相比,直接更新文件的 android API 层将更少

除了所有这些事实,测试这样的场景应该不成问题。我会写一个这样的测试用例

  1. 具有恒定的电池电量,即 100% 充满电

  2. 继续进行一些耗电量大的活动,例如播放视频、下载、运行程序,这些程序会持续写入文件(当前日期时间秒数)

  3. 将定期间隔减少到 10 秒(从 1-10 分钟)

  4. 每 5 分钟更新一次文件中的数据

  5. 2 小时后检查电池电量

重复测试,但在第 3 点更新数据库而不是文件

可能会有双重工作,因为您必须同时使用这两种方法,但我相信在 db 中更新不会有太多的编码工作

可能很少有人不喜欢 10 秒的间隔,因为在此期间不会发生重大变化,但这里的目标是进行尽可能多的迭代,在文件或数据库中更新它们并获取用于电池电量比较的统计信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2010-12-20
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多