问题一:是否有专门的数据库来存储密集和稀疏矩阵?我搜索了一下,但没有找到…
有问题的矩阵很大(10^5乘10^5),但它是稀疏的,这意味着它的大多数值是零,我只需要存储非零值。所以我想做一张这样的桌子:

   2D Matrix
---------------
  X   Y   val
---------------
  1   2    4.2
  5   1    91.0
  9   3    139.1

等等。三列,两列表示坐标,第三列表示稀疏矩阵中该单元格的值。问题2:这是存储稀疏矩阵的最佳方法吗?我也考虑过MongoDB,但似乎为矩阵的每个单元格生成一个文档的开销太大了。面向表的数据库速度很慢,但我可以使用voltdb:)side node:我想到了redis散列,但无法使其成为二维(找到了序列化2d矩阵并使其成为1d的方法,这样我就可以存储在redis散列甚至列表中)
问题3:voltdb每行使用多少字节?坐标将是0到10^5之间的整数,可能更多,单元格的值将是浮点数。

最佳答案

关于问题3,根据您的示例,x和y列可以是voltdb中的整数数据类型,即4字节。值列可以是浮点数据类型,即8字节。
因此,每条记录将是16字节,因此内存中的标称大小将是16字节*行计数。一般来说,您需要增加30%的开销,然后为每台服务器增加1GB的堆大小,以确定所需的总内存。有关更多详细信息,请参阅下面的参考资料。
您可能需要为该表编制索引,因此,假设您需要(x,y)的复合索引,那么大小如下:
树索引:
(列大小之和+8+32)*行数
哈希索引:
((2*行计数)+1)*8)+((列大小之和+32)*行计数)
(x,y)的列大小之和为8字节。
参考文献:
可用的数据类型在使用voltdb的附录A中列出:
http://community.voltdb.com/docs/UsingVoltDB/ddlref_createtable#TabDatatypes
估计内存大小的准则和公式见voltdb规划指南:
http://community.voltdb.com/docs/PlanningGuide/ChapMemoryRecs

关于sql - 存储二维稀疏数组(二维稀疏矩阵)的最佳方法是什么? VoltDB中将有多少大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10872769/

10-11 19:52