加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SQLite使用内存数据库

发布时间:2019-08-15 20:31:28 所属栏目:编程 来源:底层软件架构
导读:SQLite数据库凡是存储在单个平凡磁盘文件中。可是,在某些环境下,数据库也许存储在内存中。 逼迫SQLite数据库纯真的存在于内存中的最常用要领是行使非凡文件名 :memory: 打开数据库。换句话说,不是将真实磁盘文件的名称转达给sqlite3_open(),sqlite3_

SQLite数据库凡是存储在单个平凡磁盘文件中。可是,在某些环境下,数据库也许存储在内存中。

SQLite行使内存数据库

逼迫SQLite数据库纯真的存在于内存中的最常用要领是行使非凡文件名“ :memory: ” 打开数据库。换句话说,不是将真实磁盘文件的名称转达给sqlite3_open(),sqlite3_open16()或 sqlite3_open_v2()函数之一,而是传入字符串“:memory:”。譬喻:

  1. rc = sqlite3_open(“:memory:”,&db); 

挪用此接口完成后,不会打开任何磁盘文件。而是在内存中建设一个新的数据库。数据库毗连封锁后,数据库就不再存在。每一个memory数据库互相差异。因此,打开两个数据库毗连,每个数据库毗连的文件名为“:memory:”,将建设两个独立的内存数据库。

非凡文件名“:memory:”可用于应承数据库文件名的任何位置。譬喻,它可以被用作 文件名中的ATTACH呼吁:

  1. ATTACH DATABASE ':memory:' AS aux1; 

请留意,为了应用非凡的“:memory:”名称并建设纯内存数据库,文件名中不能有其他文本。因此,可以通过添加路径名在文件中建设基于磁盘的数据库,如下所示: "./:memory:"。

行使URI文件名时,非凡的“:memory:”文件名也可以行使。譬喻:

  1. rc = sqlite3_open(“file :: memory:”,&db); 

要么,

  1. ATTACH DATABASE 'file::memory:' AS aux1; 

内存数据库和共享缓存

假如行使URI文件名打开内存数据库,则应承它们行使共享缓存。假如行使未加修饰的“:memory:”名称来指定内存数据库,那么该数据库始终具有专用高速缓存,而且仅对最初打开它的数据库毗连可见。可是,可以通过两个或多个数据库毗连打开沟通的内存数据库,如下所示:

  1. rc = sqlite3_open("file::memory:?cache=shared", &db); 

要么,

  1. ATTACH DATABASE 'file::memory:?cache=shared' AS aux1; 

这应承单独的数据库毗连共享沟通的内存数据库。虽然,共享内存数据库的全部数据库毗连都必要在统一个历程中。当数据库的最后一个毗连封锁时,将自动删除数据库并接纳内存。

假如在单个历程中必要两个或多个差异同时可共享的内存数据库,则mode = memory查询参数可与URI文件名一路行使以建设定名的内存数据库:

  1. rc = sqlite3_open("file:memdb1?mode=memory&cache=shared", &db); 

要么,

  1. ATTACH DATABASE 'file:memdb1?mode=memory&cache=shared' AS aux1; 

当以这种方法定名内存数据库时,它将仅与行使完全沟通名称的另一个毗连共享其缓存。

SQLite行使内存数据库

姑且数据库

当转达给sqlite3_open()或 ATTACH的数据库文件的名称是空字符串时,则会建设一个新的姑且文件来生涯数据库。

  1. rc = sqlite3_open("", &db); 
  2. ATTACH DATABASE '' AS aux2; 

每次城市建设一个差异的姑且文件,因此就像行使非凡的“:memory:”字符串一样,两个到姑且数据库的数据库毗连都有本身的私稀有据库。建设它们的毗连封锁时,将自动删除姑且数据库。

纵然为每个姑且数据库分派了磁盘文件,现实上姑且数据库凡是驻留在内存中的pager缓存中,因此“:memory:”建设的纯内存数据库与姑且数据库之间的不同很小。由空文件名建设。独一的区别是“:memory:”数据库必需始终保存在内存中,而假如数据库变大或SQLite受到内存压力,姑且数据库的某些部门也许会革新到磁盘。

前面的段落描写了默认SQLite设置下姑且数据库的举动。假如必要,应用措施可以行使 temp_store编译指示和SQLITE_TEMP_STORE编译时参数来逼迫姑且数据库示意为纯内存数据库。

【编辑保举】

  1. SQLite3的数据范例-动态数据范例
  2. 怎样通过机能调优打破MySQL数据库机能瓶颈?
  3. 浅谈数据库同步和迁徙
  4. SQLite,多个应用措施可以同时会见单个数据库文件吗?
  5. 四种漫衍式数据库场景选型、优弱点比拟说明和将来瞻望
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读