我使用mongodb作为我的后端。我有电影,音乐,书籍等数据,我将其存储在一个集合中。每个bson条目的必填字段是“_id”,“name”,“category”。其余字段取决于条目所属的类别。 例如,我有一个存储的电影记录,如。
{
"_id": <some_id>,
"name": <movie_name>,
"category": "movie",
"director": <director_name>,
"actors": <list_of_actors>,
"genre": <list_of_genre>
}
对于音乐,我有,
{
"_id": <some_id>,
"name": <movie_name>,
"category": "music"
"record_label": <label_name>
"length": <length>
"lyrics": <lyrics>
}
现在我有12个不同的类别,其中只有_id,name和category是常见字段。对于不同的类别,其他字段都是不同的。我决定将所有数据存储在一个单独的集合中,或者我应该为每个类别制作不同的集合。
答案 0 :(得分:1)
如果您要搜索不同的类别,则最好使用单个集合。拥有单个集合可能会降低插入的性能,但如果您没有高写入需求,则无关紧要。
答案 1 :(得分:1)
MongoDB允许您将任何字段结构存储在文档中,即使每个文档都不同,因此这不是问题。通过拥有这3个一致的字段,您可以将它们用作索引的一部分并处理您的查询。这是无模式数据库帮助的一个很好的例子,因为您可以将所有内容存储在单个集合中。
以这种方式使用单个集合没有任何性能损失。实际上,实际上有一个好处,因为您可以在以后将shard集合作为缩放策略。分片在集合级别上完成,因此您可以根据_id字段进行分片以均匀分布,或者使用类别字段为每个分片创建特定类别,甚至组合。
有一点需要注意的是未来的查询要求。如果您确实需要索引其他字段,那么您可以使用sparse indexes,这意味着没有索引字段的文档将不在索引中,因此不会占用索引中的任何空格;一个方便的优化。
如果您进行了更新,还应该be aware of growing the documents。这确实会对性能产生重大影响。