有没有办法与原始内存块或二进制文件进行 DBMS 通信

有没有办法与原始内存块或二进制文件进行 DBMS 通信

我正在尝试numerical matrix operations library与任何人进行类似 LAPACK 的交流DBMS.

是否可以将send/receive矩阵作为二进制或直接内存指针来完成以处理它们(它将是这样的:外部库处理存储在 DBMS 中的数据,然后计算一些巨大的矩阵内容,然后通过内存块或二进制 DBMS 从库中获取结果)?

主要目的是提高速度并避免通过平面文件,最后但并非最不重要的是,使用库有效地执行一些 DBMS 未设计的操作。

* Is it possible that Oracle, SQL Server, MySQL support this technique?.

答案1

Oracle 支持矩阵运算,包括 LAPACK 兼容命令。

查看 Oracle 包UTL_NLA为您提供一个起点。我认为您最好考虑使用数据库工具,或者完全放弃数据库 - 您似乎想要采用的方法实际上并不是 RDBMS。

答案2

不,不可能,也不明智。数据库数据是事务性的,而执行事务性共享内存简直是人间地狱。绝对不是“处理指针”。有可能,但你需要客户端库非常好/受控制,否则会运行大量开销,这意味着不能再试了。

看来您的要求完全不匹配。RDBMS 和标准产品并未针对您的工作类型进行优化。

你所能做的最好的事情就是:

  • 将文件存储在 BLOBS 中。
  • 使用 SQL Server
  • 使用基于 FILE 的 BLOB 存储

然后,您可以通过文件共享访问 blob,文件共享应允许内存映射文件。不是导出 - 它们是文件。每次提交都会生成一个具有不同名称的新副本。您可以从数据库中获取 sql 中的名称(它是一个 GUID)。

这可能是解决这个问题最有效的方法。

答案3

如果数据自上次访问后没有发生变化,您可以在本地存储数据的缓存副本,以避免再次传输。这将完全在 DBMS 之外进行编码。

相关内容