ToB企服应用市场:ToB评测及商务社交产业平台
标题:
SQLite数据库成为内存中数据库(三)
[打印本页]
作者:
半亩花草
时间:
2024-6-25 20:48
标题:
SQLite数据库成为内存中数据库(三)
返回: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编译时参数来如果须要,强制临时数据库的举动为纯内存中数据库。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4