最佳练习以节省DB中非常忙碌的柜台



我正在开发一个非常繁忙的Web服务,该服务应每秒收到数千个请求。我希望每个请求都会更新一个计数器字段。我该怎么做?将计数器保存在数据库中非常重要,因此如果服务器死亡,我不会丢失信息。我尝试了以下代码,但这将是一个巨大的瓶颈,每秒需要数千个请求。你会怎么做?

public void Upload(int organizationId)
{
  try
  {
    lock (UpadateLock)
    {
       using (var db = new DbContext())
       {
         Counter counter = db.Counters.Where(c => c.OrganizationId == organizationId).FirstOrDefault();
         counter.count++;
         db.SaveChanges();
       }
     }
   }
   catch (Exception ex)
   {
   }
}

如果服务器死亡时绝对不会丢失数据,则必须写入每个增量的持久存储。

问题只是存储要使用。

您当然可以使用SQL进行。这样的简单查询并不太贵。您可以对此进行基准测试,以查看开销是否可以接受。测量Web服务器和SQL Server上的CPU使用率。还测量磁盘使用率和交易日志大小。

redis可能是一个非常好的数据库。已知它很快,并且支持服务器端增量。

您还可以通过将增量写入多个服务器(随机选择一个(来扩展此工作量。

您也可以使用任何其他数据存储。如果它不支持本地增量,则可以插入新行。然后,具有定期聚合这些行的背景过程,以免它们不断积累。

相关内容

  • 没有找到相关文章

最新更新