SQLite数据库成为内存中数据库(三)

news2024/11/27 14:50:55

  返回:SQLite—系列文章目录   

 上一篇:SQLite使用的临时文件(二)

下一篇:SQLite中的原子提交(四)

​​

SQLite数据库通常存储在单个普通磁盘中文件。但是,在某些情况下,数据库可能存储在内存。
强制SQLite数据库纯粹存在的最常见方法在内存中是使用特殊文件名打开数据库“:内存:”。换句话说,而不是传递将真实磁盘文件放入sqlite3_open()、sqlite3_open16()或sqlite3_open_v2()函数之一,传入字符串“:memory:”。为例:

rc = sqlite3_open(":memory:", &db);

完成此操作后,不会打开任何磁盘文件。相反,将创建一个新数据库纯粹在内存中。一旦数据库停止存在,数据库就不再存在连接已关闭。每个:memory:数据库都不同于其他。因此,打开两个数据库连接,每个连接都使用文件名“:memory:”将创建两个独立的内存数据库。
特殊文件名“:memory:”可以在数据库的任何位置使用允许使用文件名。例如,它可以用作ATTACH命令中的文件名:

ATTACH DATABASE ':memory:' AS aux1;

注意,为了应用特殊的“:memory:”名称,并且创建一个纯内存数据库,在文件名。因此,可以通过在文件中预先添加来创建基于磁盘的数据库路径名,如下所示:“./:memory:”。
特殊的“:memory:”文件名在使用URI文件名时也有效。例如:

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:”字符串,两个数据库连接到临时每个数据库都有自己的私有数据库。临时数据库是当创建它们的连接关闭时自动删除。
即使为每个临时数据库分配了一个磁盘文件,在练习临时数据库通常驻留在内存寻呼机缓存中因此,纯内存数据库之间几乎没有区别由“:memory:”创建,以及由空文件名创建的临时数据库。唯一的区别是“:memory:”数据库必须保留在内存中在任何时候,临时数据库的某些部分都可能被刷新到磁盘如果数据库变大或SQLite处于内存压力之下。
前面几段描述了临时数据库的行为在默认的SQLite配置下。应用程序可以使用temp_store编译指示和SQLITE_TEMP_STORE编译时参数来如果需要,强制临时数据库的行为为纯内存中数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1556683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫基础------函数

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

打工人神器! Raccoon 代码小浣熊

继这三个之后,今天又来了一个 [ Raccoon代码小浣熊 ] 核心精要与产品特点 全面支持多种编程语言和IDE:「代码小浣熊」支持超过90种主流编程语言,包括但不限于Python、Java、JavaScript、C、Go和SQL等。同时,它集成了市面上主流的…

电脑换屏总结——关于我把电脑砸了这件事!

大家好,我是工程师看海,很高兴和各位一起分享我的原创文章,喜欢和支持我的工程师,一定记得给我点赞、收藏、分享哟。 加微信[chunhou0820]与作者进群沟通交流。 【淘宝】https://m.tb.cn/h.5PAjLi7?tkvmMLW43KO7q CZ3457 「运放秘…

【ENSP】交换机和交换机之间实现静态路由

1.概念 三层交换机只能在Vlanif逻辑口配置iP地址 2.实现方法 交换机允许对应vlan通行,配置vlanif的ip地址,做静态路由 3.静态路由配置方法 ip route-static 目的网段 子网掩码 下一跳设备 LSW1三层交换机配置 u t m sys vlan batch 10 20 …

一文彻底搞懂并发容器

文章目录 1. 什么是并发容器2. 并发容器的分类 1. 什么是并发容器 并发容器是一种用于多线程环境的数据结构,它们能够有效地处理并发访问和修改的问题。在多线程应用程序中,多个线程可能会同时访问和修改共享的数据结构,这可能会导致数据不一…

npm卸载不掉的解决方案

不管怎么重装重启都报错 真服了,npm卸载不掉绝对是有缓存存在,用where npm查到d盘 实际上根本不在这个地方,这个是我安装的6.14.12版本的npm的地方,我说我怎么怎么重装怎么导包都不行呢,偷偷隐藏在这个目录里面&#…

vue3路由代码示例

路由简单分三步吧 第一定义路由&#xff1a; 包括访问地址&#xff0c;对应组件 第二使用&#xff1a;在index.html中使用它 下面是代码示例&#xff1a; components/Person.vue <template><router-link to"/test/hello">跳转</router-link>&…

简易TCP服务器通信、IO多路复用(select、poll、epoll)以及reactor模式。

网络编程学习 简单TCP服务器通信TCP三次握手和四次挥手三次握手&#xff08;如下图&#xff09;常见问题&#xff1f; 四次挥手 client和server通信写法server端client端 通信双方建立连接到断开连接的状态转换怎么应对多用户连接&#xff1f;缺点 IO多路复用select优缺点 poll…

Linux---命令行参数

一、命令行参数 在介绍命令行参数前&#xff0c;我想问大家一个问题&#xff0c;在以前写C/C时&#xff0c;main 函数可不可以带参数&#xff1f; 答案是可以带的&#xff0c;int main(int argc, char* argv[]){}&#xff0c;但平时写代码时也证明了&#xff0c;main 函数的参…

Gradle连接超时问题connect time out

出现这样的问题不要慌张&#xff0c;可能是你配置gradle的问题一步一步来解决就完事了 1. 出现这样的问题首先我们先检查配置 首先我们先看到的标出来的地址可以看到&#xff0c;我们需要下载的是这个链接里面的压缩包数据&#xff0c;查看版本以及这个链接是不是错误的 2. 第…

[OpenCV学习笔记]Qt+OpenCV实现图像灰度反转、对数变换和伽马变换

目录 1、介绍1.1 灰度反转1.2 图像对数变换1.3 图像伽马变换 2、效果图3、代码实现4、源码展示 1、介绍 1.1 灰度反转 灰度反转是一种线性变换&#xff0c;是将某个范围的灰度值映射到另一个范围内&#xff0c;一般是通过灰度的对调&#xff0c;突出想要查看的灰度区间。 S …

大创项目推荐 深度学习 opencv python 实现中国交通标志识别_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

Windows下载使用nc(netcat)命令

‘nc’ 不是内部或外部命令&#xff0c;也不是可运行的程序&#xff1f; 点击链接地址&#xff0c;下载压缩包。 完成后解压 使用方式&#xff08;三种&#xff09;&#xff1a; 1、直接双击exe使用 2、把这个exe放到cmd启动的默认路径下 放到默认路径下&#xff0c;使用nc&a…

【Deep Learning 11】Graph Neural Network

&#x1f31e;欢迎来到图神经网络的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年3月20日…

openLooKeng开发环境搭建

文章目录 搭建OpenLooKeng开发环境要求 以下是搭建OpenLooKeng开发环境的基本步骤&#xff1a;1、从OpenLooKeng的GitHub仓库克隆代码&#xff1a;2、 构建OpenLooKeng生成IntelliJ IDEA项目文件 airbase构建项目过程中出现的问题checkstyle错误版本冲突问题hetu-heuristic-ind…

辽宁政府采购网怎么入驻?

辽宁政府采购网的入驻流程包括以下几个主要步骤&#xff1a; 注册账号&#xff1a;在辽宁政府采购网上商城注册账号。CA证书领取&#xff1a;注册成功后&#xff0c;需要领取CA证书以登录网上商城。搭建自营商城&#xff1a;因为后期需要和辽宁政府采购网上商城进行入驻&#…

执行 kubeadm join 报错ERROR FileAvailable--etc-kubernetes-kubelet.conf

执行 kubeadm join 报错ERROR FileAvailable–etc-kubernetes-kubelet.conf [rootk8snode2 ~]# kubeadm join apiserver.demo:6443 --token c4nezq.ecv2kg9ok6gsresw --discovery-token-ca-cert-hash sha256:be1a55bea6b5bb5c8810434d3905a9cd0bbc33181862f7ad601346e1ab0…

.NET CORE 分布式事务(二) DTM实现TCC

目录 引言&#xff1a; 1. TCC事务模式 2. TCC组成 3. TCC执行流程 3.1 TCC正常执行流程 3.2 TCC失败回滚 4. Confirm/Cancel操作异常 5. TCC 设计原则 5.1 TCC如何做到更好的一致性 5.2 为什么只适合短事务 6. 嵌套的TCC 7. .NET CORE结合DTM实现TCC分布式事务 …

wireshark创建显示过滤器实验简述

伯克利包过滤是一种在计算机网络中进行数据包过滤的技术&#xff0c;通过在内核中插入过滤器程序来实现对网络流量的控制和分析。 在数据包细节面板中创建显示过滤器&#xff0c;显示过滤器可以在wireshark捕获数据之后使用。 实验拓扑图&#xff1a; 实验基础配置&#xff1…

计算机专业在找工作时的注意事项

目录 说在前面关于我一些忠告关于简历关于银行写在最后 说在前面 满满的求生欲。我不是什么大佬&#xff0c;更没有能力教大家什么。只是看到有不少学弟学妹&#xff0c;还在为找一份工作焦头烂额&#xff0c;却没有努力的方向。所以这里斗胆给计算机相关专业的学弟学妹们的一…