大文档与许多文档

时间:2011-06-30 11:18:51

标签: database couchdb

只是想要一个观点,或者至少是一个经验法则,在CouchDB的数据库结构中哪个更好。将一个项目的所有相关数据放在一个文档中,或者将所有项目的一部分放在许多文档中是否更好?

让我举一个例子来说明我的意思。我目前记录来自我们系统的4个事件,间隔1分钟,我们称之为event_1,event_2,event_3和even_4。无论价值如何,都会为4个事件中的每个事件存储数据(即使一切正常,您也总能得到一个值)。

选项1:对事件进行分组,并将新的时间戳/值附加到文档...

{
    event_1: [ 
        { timestamp, value },
        { timestamp, value },
        { timestamp, value },
        ...etc
    ]
},
{
    event_2: [ 
        { timestamp, value },
        { timestamp, value },
        { timestamp, value },
        ...etc
    ]
},
{
    event_3: [ 
        { timestamp, value },
        { timestamp, value },
        { timestamp, value },
        ...etc
    ]
}
...etc

选项2:保留一个庞大的文档列表,其中包含最新值(实际上是如何从系统中传递的)?

{
    timestamp: {
        { event_1, value },
        { event_2, value },
        { event_3, value },
        { event_4, value }
    }
},
{
    timestamp: {
        { event_1, value },
        { event_2, value },
        { event_3, value },
        { event_4, value }
    }
},
{
    timestamp: {
        { event_1, value },
        { event_2, value },
        { event_3, value },
        { event_4, value }
    }
}
...etc

我目前正在使用第二种选择,但只是好奇地看到人们对什么是最佳做法的看法......我开始认为选项1可能会更好,就像我报告的方式一样,结果按事件分组(显示在每个事件的折线图中)。

1 个答案:

答案 0 :(得分:8)

我绝对更喜欢你的选项2.

由于CouchDB保留了其文档的所有修订版,因此使用选项1会占用大量内存。因此,对于每个新值,您可以存储新值以及旧值的副本。使用选项2,您只能存储新值而不会触及旧值。