为什么MongoDB更新字段是如此CPU密集型?

时间:2016-04-06 19:12:46

标签: c# mongodb

我有使用MongoDB WiredTiger(3.2.3)存储在C#中编写的社交帖子爬虫。

我在我的测试服务器中发布了带有400.000文档的文档集合,其中包含2核Xeon和7GB内存,Windows Server 2012.现在Mongod需要2.7 Gb的内存

文档看起来像:

public class Post
{
    public Guid Id { get; set; }

    public string SysId { get; set; }

    public Guid SiteId { get; set; }

    public DateTime Date { get; set; }

    public string Type { get; set; }
    public string Text { get; set; }

    public string ImageUrl { get; set; }

    public User User { get; set; }

    public bool IsApproved { get; set; }
}

带索引

{
    "SiteId" : 1,
    "IsApproved" : -1,
    "Date" : -1
}

在我的界面中,我使用以下代码批准了切换按钮:

    ....
    var collection = database.GetCollection<Post>("Posts");

    var postStatus = await collection.AsQueryable().Select(x => new { x.Id, x.IsApproved }).FirstOrDefaultAsync(x => x.Id == postId);

    if (postStatus == null)
          throw new EntityNotFoundException<Guid>(post.Id);

    var filter = Builders<Post>.Filter.Eq(post => post.Id, postId);
    var update = Builders<Post>.Update.Set(x => x.IsApproved, !postStatus.IsApproved);

    await collection.UpdateOneAsync(filter, update);

当我多次按下“批准”按钮时,我看到CPU 100%利用率,5秒后一切正常。为什么这么CPU操作最简单?看起来很糟糕......

0 个答案:

没有答案