android - 使用Android内置的SQLite存储来存储并发数据可以吗?

标签 android sqlite android-sqlite

我正在编写一个 Android 应用程序,它将包含

  1. 后台服务 1,它定期读取传感器值(例如程序每五分钟读取一次传感器值 30 秒,在测量期间每秒读取两次值),
  2. 后台服务 2,它分析传感器值并从中计算一些指标,
  3. 后台服务 3,每 3-7 天运行一次,并从数据库中删除旧数据(传感器值和指标)和
  4. 一个 GUI Activity ,如果用户打开应用程序并按下某个按钮,它会显示一些传感器值和/或指标。

将有 2 个表 - SensorDataMetrics。后台服务 1 将写入 SensorData。后台服务 2 将从 SensorData 读取并写入 Metrics。后台服务 3 将从两个表中删除行。 GUI Activity 将从两个表中读取。

我在考虑如何为传感器值和指标实现线程安全存储。

一个明显的解决方案是使用内置的 SQLite 数据库。

我有以下问题:

  1. 在这种情况下使用安全吗?
  2. Android 的 SQLite 是否可以每秒处理两次写入两个数值(longdouble)?
  3. 它是否支持并发访问(当 GUI Activity 对 SensorData 发出查询并且后台服务 1 尝试同时写入同一个表时会发生什么)?

最佳答案

  1. 通过将SQLiteOpenHelper 用作单例,您是线程安全的。 SQLiteOpenHelper 处理 sqlite 数据库的锁定(这是处理并发读/写的 sqlite 机制)。
  2. 这是要测试的东西。但是,一般来说,您需要经常写入数据库吗?您可以将数据缓存在内存中,然后以较慢的速度将它们刷新到数据库中。
  3. 简短的回答是“是的,它支持并发访问”。有关详细信息,请查看此 sqlite document , android sqlite 只是对此的包装。阅读本文档后,您可以将其配置为按照您认为合适的方式运行。

关于android - 使用Android内置的SQLite存储来存储并发数据可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17164013/

相关文章:

java - 我可以安全地将一个完全随机的字符串(任何 16 位值)存储到 SQLiteDB 中吗?

java - 从 Google Play 获取 versionCode 和 VersionName

sqlite - 如何在 sqlite 中列出数据库的所有触发器?

android - Kotlin-将ksoap2作为协程vs异步运行-哪个更好?

mysql - 什么是独立于数据库(适用于 mysql 和 sqlite3)的解决方案来计算 SQL 中两个日期之间的天数?

SQLite 修剪字符串中的结尾字符

android - 使用 cursor.getCount() 获取计数或在 SQL 子句上使用 COUNT 执行 rawQuery?

android - 要在android中删除的子查询

java - 检查插件本应使用 "compile files"时是否使用了 "provided"

java - 如何清理 SQLite 并设置默认值?