如何优化MongoDB数据库?

时间:2017-06-10 13:46:39

标签: c# .net mongodb optimization database

问题:

我的数据库中有两个集合:

// UnifiedPost
public class UnifiedPost
{
    public UnifiedPost() { Id = ObjectId.GenerateNewId(); }

    [BsonId]
    public ObjectId Id { get; set; }

    public int OriginalId { get; set; }
    public string Thumbnail { get; set; }
    public string Preview { get; set; }
    [AlsoNotifyFor("IsVideo")]
    public string FullSized { get; set; }
    public char Rating { get; set; }
    public int Width { get; set; }
    public int Height { get; set; }
    public string Dimensions { get { return string.Format("{0}x{1}", Width, Height); } }
    public int Score { get; set; }
    [MongoDB.Bson.Serialization.Attributes.BsonIgnore]
    public string Tags { get; set; }
    public ICollection<ObjectId> TagIds { get; set; }
    public char Site { get; set; }

    public bool IsVideo { get { return FullSized.Contains(".mp4") || FullSized.Contains(".webm"); } }

    public string UniversalId { get; set; } // UNIQUE index (Site + Original id; fe. S3001)
}

// Tag
public class Tag
{
    public Tag() { }

    public ObjectId Id { get; set; }
    public string Name { get; set; }
}

截至目前,Posts集合中有大约400万个条目。 db.Posts.find()db.Posts.find( { "_id": ObjectId(xyz) } )db.Posts.find( { "UniversalId": "S3001" } )等查询将在几毫秒内返回结果。

另一方面,像.find( { "Site": "S" } ) or。查找({&#34; OriginalId&#34;:{$ lt:&#34; 25&#34;}})`这样的查询可能需要30秒才能完成

我已经拥有的东西:

我使用扩展方法向UniversalId属性添加/更新唯一键:

if (!createIndex)
{
    await postsColl.Indexes.AddOrUpdateAsync(new CreateIndexOptions() { Unique = true }, new IndexKeysDefinitionBuilder<UnifiedPost>().Ascending(o => o.UniversalId));
    createIndex = true;
}

我不确定:

  • 我不知道是否应该为任何其他字段使用索引,以及我应该使用哪种类型的索引。
  • Site拥有char值,截至目前,该集合中有大约6种可能性。它可能会或可能不会进一步增加。 * OriginalId只是int,代表原始网站上的帖子。这个ID并不是唯一的,因为大约有1个,2个,3个(等等),因为集合中有不同的网站。< / LI>

优化数据库的最佳方法是什么,以便我可以在合理的操作时间内根据这些属性查询帖子?

1 个答案:

答案 0 :(得分:1)

  

优化数据库的最佳方法是什么,以便我可以在合理的操作时间内根据这些属性查询帖子?

当然,在这些字段上添加索引。