只是想要一个观点,或者至少是一个经验法则,在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可能会更好,就像我报告的方式一样,结果按事件分组(显示在每个事件的折线图中)。
答案 0 :(得分:8)
我绝对更喜欢你的选项2.
由于CouchDB保留了其文档的所有修订版,因此使用选项1会占用大量内存。因此,对于每个新值,您可以存储新值以及旧值的副本。使用选项2,您只能存储新值而不会触及旧值。