当前位置:首页 > 科技数码

内存数据库 SQLite使用内存数据库

SQLite数据库通常存储在单个普通磁盘文件中。但是,在某些情况下,数据库可能存储在内存中。

强制SQLite数据库单纯的存在于内存中的最常用方法是使用特殊文件名“

:memory:

” 打开数据库。换句话说,不是将真实磁盘文件的名称传递给sqlite3_open(),sqlite3_open16()或 sqlite3_open_v2()函数之一,而是传入字符串“:memory:”。例如:

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

调用此接口完成后,不会打开任何磁盘文件。而是在内存中创建一个新的数据库。数据库连接关闭后,数据库就不再存在。每一个memory数据库彼此不同。因此,打开两个数据库连接,每个数据库连接的文件名为“:memory:”,将创建两个独立的内存数据库。

特殊文件名“:memory:”可用于允许数据库文件名的任何位置。例如,它可以被用作文件名中的ATTACH命令:

ATTACH DATABASE ":memory:" AS aux1;

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

使用URI文件名时,特殊的“:memory:”文件名也可以使用。例如:

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

要么,

ATTACH DATABASE "file::memory:" AS aux1;内存数据库和共享缓存

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

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

要么,

ATTACH DATABASE "file::memory:?cache=shared" AS aux1;

这允许单独的数据库连接共享相同的内存数据库。当然,共享内存数据库的所有数据库连接都需要在同一个进程中。当数据库的最后一个连接关闭时,将自动删除数据库并回收内存。

如果在单个进程中需要两个或多个不同同时可共享的内存数据库,则mode = memory查询参数可与URI文件名一起使用以创建命名的内存数据库:

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

要么,

ATTACH DATABASE "file:memdb1?mode=memory&cache=shared" AS aux1;

当以这种方式命名内存数据库时,它将仅与使用完全相同名称的另一个连接共享其缓存。

临时数据库

当传递给sqlite3_open()或 ATTACH的数据库文件的名称是空字符串时,则会创建一个新的临时文件来保存数据库。

rc = sqlite3_open("", &db);ATTACH DATABASE "" AS aux2;

每次都会创建一个不同的临时文件,因此就像使用特殊的“:memory:”字符串一样,两个到临时数据库的数据库连接都有自己的私有数据库。创建它们的连接关闭时,将自动删除临时数据库。

即使为每个临时数据库分配了磁盘文件,实际上临时数据库通常驻留在内存中的pager缓存中,因此“:memory:”创建的纯内存数据库与临时数据库之间的差别很小。由空文件名创建。唯一的区别是“:memory:”数据库必须始终保留在内存中,而如果数据库变大或SQLite受到内存压力,临时数据库的某些部分可能会刷新到磁盘。

前面的段落描述了默认SQLite配置下临时数据库的行为。如果需要,应用程序可以使用 temp_store编译指示和SQLITE_TEMP_STORE编译时参数来强制临时数据库表现为纯内存数据库。

1.《内存数据库 SQLite使用内存数据库》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《内存数据库 SQLite使用内存数据库》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/486924.html

上一篇

金立l7 中国联通与金立合作:全年销售1380万台定制终端

下一篇

msnspace 辉煌十年MSN转型失败 入土为安

tps 详解数据库三个核心性能指标--TPSQPSIOPS

tps 详解数据库三个核心性能指标--TPSQPSIOPS

概述今天主要介绍MySQL数据库,或者说所有数据库的三个关键性能指标:qps 每秒处理的查询数tps 每秒处理的事务数IOPS 每秒磁盘进行的I/O操作次数...

数据库建模工具 分享一款开源数据库建模工具--PDMan(可代替powerdesigner)

数据库建模工具 分享一款开源数据库建模工具--PDMan(可代替powerdesigner)

概述今天主要分享一款数据库建模工具--PDMan,这是一款开源免费的数据库模型建模工具,支持windows,mac,linux等操作系统,是PowerDesigner之外,更好的免费的替代方案。pdman具有颜值高,使用简单的特点。包含数据库建模,灵活自动的自动生成代码模板,自动生成文档等多种实用的功能。码云:https://gitee.com/...

分库分表 什么是数据库分库分表?

  • 分库分表 什么是数据库分库分表?
  • 分库分表 什么是数据库分库分表?
  • 分库分表 什么是数据库分库分表?
数据库语言 SQL语句分类

数据库语言 SQL语句分类

0. 说明今天遇到一个同学分不清楚SQL所属的分类,所以我才总结下SQL语句的分类,其实基本上教科书上都会有这个。SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。SQL语句分类简图1. 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块...

mysql和oracle的区别 MySQL、SQL Server、Oracle对比,你必须了解的三大数据库区别

  • mysql和oracle的区别 MySQL、SQL Server、Oracle对比,你必须了解的三大数据库区别
  • mysql和oracle的区别 MySQL、SQL Server、Oracle对比,你必须了解的三大数据库区别
  • mysql和oracle的区别 MySQL、SQL Server、Oracle对比,你必须了解的三大数据库区别
orm框架 从ORM框架,聊一聊数据库的设计

orm框架 从ORM框架,聊一聊数据库的设计

浅谈ORM只接触过EF和SqlSugar,正在做的项目用到的就是国产的SqlSugar,个人感觉写法还可以。现在的开发基本上很少还有写原生sql的了,因为ORM框架不仅能提高开发效率,而且还能支持各种数据库,避免了原生sql在更换数据库时的尴尬。但是说白了ORM框架最终也是将object转换成sql语句,不过感觉他应该不会给你优化sql吧。当遇到...

数据库基础 SQL基础语法

数据库基础 SQL基础语法

数据库:结构化查询语言(Structured Query Language)简称SQL;数据库管理系统(Database Management System)简称DBMS;数据库管理员(Database Administration)简称DBA,功能是确保DBMS的正常高效运行;数据库分体验版(一般只安装库文件和服务)和正式版(授权使用);在正式...

数据自动备份 如何进行异地自动备份数据库

  • 数据自动备份 如何进行异地自动备份数据库
  • 数据自动备份 如何进行异地自动备份数据库
  • 数据自动备份 如何进行异地自动备份数据库