在mongodb中建模大型文档

时间:2016-09-01 20:59:51

标签: mongodb pymongo

我怀疑在mongodb中建模集合。

我正在开发一个生成大矩阵m x m的科学应用程序,大约有13,000列和行。您可以在下面的示例中看到矩阵:

|----------------|----------------|----------------|----------------|   
|                |    Attribute1  |   Attribute2   |   Attribute3   |
|----------------|----------------|----------------|----------------|
| **Attribute1** |       1        |   -0.398482    |    0.384382    |
| **Attribute2** |   -0.398482    |       1        |    -0.48327    |
| **Attribute3** |    0.384382    |   -0.48327     |        1       |
|----------------|----------------|----------------|----------------|
不幸的是,数组的大小太大,数组无法完全存储在单个文档中。我想将整个数组存储在一个文档中,因为文档不会被更新,只需要插入和find_one命令就可以应用整个文档,从而大大方便了工作。

有谁知道如何解决这个问题?

我想通过在每个文档中一次只存储一行来分割数组。如下例所示:

{ 
  {'row_number':1},
  {'attribute': 'attribute1'},
  {'values': [1,-0.398482,0.384382]}
}

它是否有意义,或者有其他更好的解决方案?

非常感谢!

1 个答案:

答案 0 :(得分:0)

由于您按属性名称引用行和列,我认为它可能是对象的对象:

{
  Attribute1: {
    Attribute1: 1,
    Attribute2: -0.398482,
    Attribute3: 0.384382
  },
  Attribute2: {
    Attribute1: -0.398482,
    Attribute2: 1,
    Attribute3: -0.48327
  },
  Attribute3: {
    Attribute1: 0.384382,
    Attribute2: -0.48327,
    Attribute3: 1
  }
}

集合中的每个项目都是13,000个属性的对象,每个属性将拥有13,000个属性,在展平时会产生1.69亿个疯狂的属性。

你的方法会将大小增加一个常数,但我不确定它是否会增加任何值,因为当你可以通过行号而不是属性名称引用向量时我无法看到任何情况

如果您认为您更有可能针对列而不是针对行运行操作,也可以转置此对象。