我有一个视频文档,每个视频都有一些特定的片段,根据视频的持续时间,它可能在100到5000之间。
videoModel = {
id: 'vid334',
codec: 'avc1.4d401e,mp4a.40.2',
resolution : { "width": 854, "height": 480 },
segments : [
{
segment : 1,
file : seg-1.ts
},
{
segment : 1,
file : seg-1.ts
},
....
]
}
创建每个视频后,无需更新视频或细分。
现在我想知道保存细分的最佳方法是什么?我应该在视频文档中嵌入片段还是将每个片段保存在单独的集合中?
答案 0 :(得分:3)
没有最佳方式;只有你可以决定。嵌入与引用没有规则,通常引用其他文档中的文档。但客观地考虑这个:
您最终遇到的问题是" 无界数组" - 嵌入式文档阵列的主要代码味道。在某些时候,有足够的细分和无限数量的细分。你将达到文件的大小限制。此时,您的应用将被有效打破,因为您无法存储其他细分。而且您需要重构代码(和模型)来处理这种情况。
如果您的细分数量有限,并且您确定自己不会超过单个文档的大小,那么无限数组条件(及相关风险)将不适用。
另一个问题是使用如此大的数组时的复制和性能。对于数组的每次添加,整个数组都包含在oplog中($push()
),因为oplog是 idempotent (您可以多次重放条目,结果相同)。因此,随着阵列的增长,oplog中条目的大小也会增加,复制可能会减慢并影响整体性能。