将磁盘数据库直接加载到内存中

问题描述 投票:0回答:1

使用 C# 和

System.Data.SQLite.dll
.NET 包装器 (v1.0.117.0)。这支持 SQLite 3.40.0。数据库文件通常小于 50 MB,我想将其加载到内存中。标准文件支持的连接字符串可能是:

Data Source=C:\path\to\myDB.db;Version=3;

将数据库文件加载到内存中可以分几个阶段完成:

  1. 使用连接字符串创建一个空白数据库:

    Data Source=:memory:;Version=3;New=True;
    
  2. 打开到磁盘文件的辅助连接(使用标准连接)。

  3. 从辅助连接读取表和表架构。

  4. 创建内存数据库中的所有表。

  5. 将数据从辅助连接复制到内存数据库表中。

  6. 关闭辅助连接。

这可行,但很复杂。我错过了一些简单的技巧吗? 有关内存数据库的 SQLite 文档 并不清楚如何将数据库文件直接加载到内存中。是否可以一步将“这个数据库文件”直接加载到内存中?

c# sqlite system.data.sqlite
1个回答
1
投票

我已经解决了。

  1. 设置两个连接。

  2. 内存数据库 (CONNECTION_1) 的连接字符串将为

    FullUri='file::memory:?cache=shared';

  3. 物理磁盘数据库 (CONNECTION_2) 的连接字符串将为

    Data Source=C:\\path\\to\\yourDB.db;Version=3;

  4. 打开两个连接。

  5. 在 CONNECTION_2 上执行命令

    VACUUM INTO 'file::memory:?cache=shared';

  6. 关闭 CONNECTION_2。

连接关闭时,内存数据库将被删除,因此请暂时保持 CONNECTION_1 打开。

© www.soinside.com 2019 - 2024. All rights reserved.