【问题标题】:Does SQLite load whole db file into memory when connected?连接时 SQLite 是否将整个 db 文件加载到内存中?
【发布时间】:2013-01-04 12:02:10
【问题描述】:

我想知道在android设备中,如果数据库有很多项目,数据库效率更高还是只是一个普通的json文件。

【问题讨论】:

    标签: android database json sqlite


    【解决方案1】:

    不,Sqlite 将通过分页读取硬盘数据。 Sqlite 文档说: “为了将数据库中的数据返回给用户,例如作为 SELECT 查询的结果,SQLite 必须在某些时候从数据库文件中读取数据。通常,数据是以对齐的页面块从数据库文件中读取的——大小字节。"

    链接:https://www.sqlite.org/fileio.html

    【讨论】:

      【解决方案2】:

      当“连接”到 SQLite 数据库时,可以选择使用 memory 而不是 filesystem 作为存储。

      但它仅在创建新数据库时使用,因此内存数据库中的“新”将为空。当您想要利用 SQL(例如对大量数据进行索引和查询)时,这非常有用。

      不幸的是,从文件系统复制到内存(反之亦然)不是 SQLite 的功能。这是一个设计选择,因为 SQLite 文件必须由您(或其他人)锁定以进行并发控制。

      通常DSN 连接到 SQLite 数据库看起来像这样'sqlite:/path/to/file.sqlite'。对数据库的访问控制由访问文件系统权限提供。在内存数据库的情况下,DSN 看起来像这样'sqlite::memory'

      【讨论】:

      • 这并没有回答原始OP的问题,关于sqlite的内部架构,当数据库本身在使用时,它是否首先将整个文件读入内存?就像您使用 json/ini 文件时所做的那样,还是可以在不先将文件完全加载到内存的情况下修改文件的某些部分?
      猜你喜欢
      • 1970-01-01
      • 2012-05-07
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 2020-07-24
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多