确保审计 table 不会影响应用程序使用的 RAM

make sure audit table doesn't affect RAM used by application

我尽量简化了我的情况,所以看起来不太真实,抱歉。但它是基于一个真正的关注。

让我们假设我有一个小型 Android 应用程序向用户显示当前温度。温度每秒都在变化,应用程序一直在工作。

该应用程序还有一个 "audit" 数据库 table:

CREATE TABLE TemperatureAudit (
secondsFrom1970 INTEGER not null,
temperature INTEGER not null);

此应用程序工作一年后,审核 table 将相当大。让我们想象一下,如果不是真的有必要,我不想截断它。

那么对于那些了解 sqlite 如何在 Android 上工作的人来说,问题是:我应该担心吗?

  1. 当我不使用它时,sqlite 会尝试在 RAM 中加载这么大的 table 吗?例如,当我 select 来自不同的 table.
  2. 如果我尝试 "select count from TemperatureAudit where temperature > 0",sqlite 会一个接一个地加载这么大的 table 部分吗?或者它会把整个 table 加载到 RAM 中吗?
  3. 如果sqlite对内存分配不是太吝啬怎么办?将此 table 移动到另一个数据库有助于解决第一个问题吗? table 分区对第二个有帮助吗?

SQLite 加载所有 table 的元数据,但不加载任何不需要的实际数据。

所有对数据库的访问都是通过页面完成的,页面大小为几KB;当前未使用的任何页面都不需要在内存中。所以扫描 table 只需要很少的内存。