【问题标题】:How do I optimize my MongoDB Database?如何优化我的 MongoDB 数据库?
【发布时间】:2017-07-09 22:12:06
【问题描述】:

问题:

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

// 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.find( { "OriginalId": {$lt: "25" } })` 这样的查询可能需要 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 不是唯一的,因为集合中存在不同的站点,1s、2s、3s(等等)的数量大致相同。

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

【问题讨论】:

    标签: c# .net mongodb optimization database


    【解决方案1】:

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

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

    【讨论】:

    • 这样的? postsColl.CreateIndex(IndexKeys&lt;UnifiedPost&gt;.Ascending(o =&gt; o.Site));
    • @Reynevan:我不知道这方面的 c# 代码 :)
    • 好吧,我添加了这 3 个索引,现在插入数据非常慢,难以想象。可能做错了什么
    • @Reynevan:这就是索引的作用。它们加快查询速度并减慢写入速度。虽然如果它现在“慢得难以想象”,那么是的,也许你做错了什么。或者定义“难以想象的慢”(以毫秒为单位的多长时间,之前和之后的写入吞吐量等)
    • @Reynevan:是的,它不应该那么慢,即使在最古老的硬件上也是如此。
    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2012-07-07
    相关资源
    最近更新 更多