我正在尝试测试一种在 .NET 和 R 之间共享大型数据集的方法。我目前的想法是
- 从 .NET 打开 SQLite 数据库连接;
- 将我在.NET中生成的所有数据写入这个数据库;
- 使用 R.NET 中的 REngine在同一进程中运行 R,并使用 RSQLite连接到打开的 SQLite 连接。
我已经有了一个原型,它通过写入位于硬盘上的临时文件中的 SQLite 数据库来工作。将 5000 万行每行有 6 列从 .NET 传输到 R 大约需要 15 分钟。但是,我想通过使用内存或临时 SQLite 数据库来提高性能。我尝试使用以下连接字符串在 .NET 中启动 SQLite 内存数据库
FullUri=file::memory:?cache=shared
:然后在同一进程中启动 R。以下代码在 R.NET 的 REngine 中执行,以尝试连接到相同的内存数据库。但是,我随后意识到它是一个新的内存数据库,而我最初使用 .NET 保存的表在这个新连接中不可用。所以我要问的问题是我是否可以使用“cache=shared”连接到共享的内存 SQLite 数据库SQLite 的文档?
library(RSQLite)
sqlite = SQLite(shared.cache=TRUE)
conn = dbConnect(sqlite, dbname = ':memory:')
dbListTables(conn)
补充一点:我在一个独立的 R 实例中使用了以下代码,我发现即使使用桌面 R,我也无法启动两个共享同一个内存数据库的连接。例如,下面的 conn2 中没有任何表。
library(RSQLite)
sqlite = SQLite(shared.cache=TRUE)
conn = dbConnect(sqlite, dbname = ':memory:')
dbWriteTable(conn, name="Test", test)
dbListTables(conn)
conn2 = dbConnect(sqlite, ':memory:')
dbListTables(conn2)