【问题标题】:SQLite or text files faster for storing sensor data in Android?SQLite 或文本文件可以更快地在 Android 中存储传感器数据吗?
【发布时间】:2019-04-09 17:34:40
【问题描述】:

我想实现一个应用,它存储来自多个传感器的数据,例如加速度、陀螺仪、环境光和触摸(压力、位置)。保存数据有两种可能。我可以使用 Android 提供的 SQLite 数据库或普通的 CSV 文件。我主要关心的是性能,因为传感器的采样率非常高。

是内置 SQLite 数据库还是 CSV 文件的性能更高?还是有其他提供更好性能的可能性?对于数据库,我可以为每个流使用一个数据库,或者为所有流只使用一个数据库,对于 CSV 文件,我会为每个流使用一个文件。

【问题讨论】:

  • 这个库真的很好很高效:realm.io/blog/realm-for-android
  • 对于少量数据,CSV 可能会更快,但是随着数据的增长,SQLite 的性能会更好。我肯定会使用数据库。
  • @m0skit0 我认为传感器数据将以例如 20 hz 的频率进行采样,因此数据会快速增长,但每个条目只有一个数字。如果我要使用数据库,您会设置什么事务限制(即在提交事务之前有多少条目)?
  • @machinery 我认为现在不重要,从任何数字开始,例如每秒一次(20 次插入)。如果您发现性能问题,则对其进行调整,但在发现任何性能问题之前不要尝试优化。

标签: android csv android-sqlite text-files


【解决方案1】:

根据使用方式的不同,SQLite 可能比直接文件系统 I/O 更快。 35% Faster Than The Filesystem.

从以上摘录(得出的结论):-

因此,让您的结论是:SQLite 的读/写延迟是 与磁盘上单个文件的读/写延迟具有竞争力。经常 SQLite 更快。有时 SQLite 几乎一样快。不管怎样,这 文章反驳了关系数据库的普遍假设 必须比直接文件系统 I/O 慢。

当然,这是只考虑原始数据访问,然后是 blob(这可能更有利也可能不会更有利)。当开始涉及索引时,基本上您正在添加必须更新的其他表。可能是一个公平的假设,即读数可能不止一个值,并且它们的读数类型(什么传感器进行读数)以及何时进行读数也将是记录值,因此这些额外的值需要认为它们可以很好地被索引(也许在需要时创建索引,然后在完成时删除它们可能是有益的)。

因此,很可能在某个阶段,如果对这些值进行索引,那么文件系统会更快。然而,这很可能是以更复杂和更慢的检索为代价的。

还有一些系统参数,例如 sqlite PRAGMA's (page size linked) 可以用来调整一些设置。

您可能不想包含 AUTOINCREMENT What are the overheads of using AUTOINCREMENT for SQLite on Android?

简而言之,随着时间的推移,您可能需要考虑性能平衡/优化/实验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-14
    • 2016-04-15
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多