任何 DBMS 都可以发送/接收巨大的矩阵吗?

Posted

技术标签:

【中文标题】任何 DBMS 都可以发送/接收巨大的矩阵吗?【英文标题】:Can any DBMS send/receive huge matrices? 【发布时间】:2011-03-18 03:45:58 【问题描述】:

我正在尝试与 LAPACK 库和 .net 通信,以便我可以在 DBMS 之外进行一些处理。

是否可以将send/receive 完整的矩阵作为二进制或作为直接内存指针来处理它们?主要目的是速度和避免通过平面文件。

Oracle, SQL Server, mysql 是否支持这种技术? LAPACK 这样的库怎么样,我们可以将二进制文件或其他东西导出到.netc# 吗? (全部通过原始内存指针或二进制文件)

【问题讨论】:

【参考方案1】:

我从未使用过它,但 Oracle 的包 UTL_NLA 据说可以在单个 VARRAY 中存储多达 100 万个条目的矩阵,然后可以相对容易地将其传递给其他系统。

来自文档:“UTL_NLA 包公开了对表示为 VARRAY 的向量和矩阵的 BLAS 和 LAPACK(版本 3.0)操作的子集。”

【讨论】:

这里很好阅读oracledmt.blogspot.com/2007/04/… 并且...所有处理都在数据库中完成。据我所知,没有传递给客户。【参考方案2】:

“巨大”有多大?

您可以将二进制数据存储为 BLOB。它可用于图像、音频、视频、文档。不知道是否有适合 lapack 的“本机”格式。

您无法提供内存地址,因为数据来自磁盘,并且无法保证 Oracle 会将它们放入进程内存还是共享内存,无论哪种方式,它都可能随时回收该内存或用其他东西覆盖它。

如果您说的是 C#/.Net,那么您可能说的是 Windows,它实际上不允许在不同进程之间共享内存。当然,如果 Oracle 服务器与 .Net 位于不同的机器上,那么无论如何您都无法从远程机器访问内存。

【讨论】:

当提到巨大时,我的意思是做一些处理,DBMS 不是为这些处理而设计的。那么,正如您所描述的,有什么技术可以解决这个问题吗? 如果使用 Linux,有没有办法共享内存或二进制文件? 外部程序可以做到。 download.oracle.com/docs/cd/B14117_01/appdev.101/b10795/…【参考方案3】:

简短的回答是不,你不能。 SQL 数据库,Oracle 包括返回数据集,它们可以在该集的列中包含二进制数据。在这样的 blob 中可以是几乎任何大小的任何格式。客户端需要做什么处理? 如果这是某种统计分析,请检查 Oracle 分析功能。它们非常强大,任何客户都很难击败它。

【讨论】:

是的,目的是做统计分析。但如果是这样,您将如何有效地将 DBMS 与一些数学库进行通信以进行处理,甚至并行化某些进程,然后在 DBMS 中获取结果(DBMS 并非旨在做一些像统计这样的事情)? 也许您应该发布一个新问题,解释您的数据以及要对其执行的分析。数据在 rdbms 中,Oracle 也在该数据上使用了大量的并行性。它节省了大量的网络往返。这里有几个例子 psoug.org/reference/analytic_functions.html>。还要寻找有效地为您提供类似电子表格计算的模型子句。非常强大。

以上是关于任何 DBMS 都可以发送/接收巨大的矩阵吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 MPI_Send 和 MPI_Recv 未正确接收矩阵

题目1193:矩阵转置-----------------------题目的意思是不用任何其他的矩阵,只有一个用于接收的矩阵

python中巨大矩阵的点积的行和

如何从一个巨大的(scipy.sparse)矩阵计算对角矩阵?

创建巨大矩阵的相关矩阵时出现错误的解决方法? [复制]

如何分割成块(子矩阵),或处理一个巨大的矩阵,在 numpy 上产生内存错误?