0

我使用 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 是公共字段。其余的字段对于不同的类别都是不同的。我是决定将所有数据存储在一个集合中,还是应该为每个类别制作不同的集合。

4

2 回答 2

1

如果您要跨类别搜索,最好使用单个集合。拥有单个集合可能会降低插入性能,但如果您没有很高的写入需求,那应该没关系。

于 2012-08-30T15:05:00.740 回答
1

MongoDB 允许您在文档中存储任何字段结构,即使每个文档都不同,所以这不是问题。通过拥有这 3 个一致的字段,您可以将它们用作索引的一部分并处理您的查询。这是无模式数据库提供帮助的一个很好的例子,因为您可以将所有内容存储在一个集合中。

以这种方式使用单个集合不会影响性能。事实上,实际上有一个好处,因为您可以稍后将集合分片作为扩展策略。分片是在集合级别完成的,因此您可以基于 _id 字段进行分片以使它们均匀分布,或者使用您的类别字段为每个分片设置某些类别,甚至组合使用。

要注意的一件事是未来的查询要求。如果您确实需要索引其他字段,那么您可以使用稀疏索引,这意味着没有索引字段的文档不会在索引中,因此不会在索引中占用任何空间;一个方便的优化。

如果您进行了更新,您还应该注意增加文档。这确实会对性能产生重大影响。

于 2013-02-23T13:55:32.177 回答