当前位置: 首页 > 知识库问答 >
问题:

在数据库中保存繁忙计数器的最佳实践

季炯
2023-03-14

我正在开发一个非常繁忙的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)
   {

   }
}

共有1个答案

宋明亮
2023-03-14

如果您绝对不能在服务器终止时丢失数据,那么您必须为每个增量写入一个持久性存储。

问题是使用什么商店。

当然可以用SQL来实现。这样一个简单的查询并不太昂贵。您可以对此进行基准测试,看看开销是否可以接受。测量web服务器和SQL服务器上的CPU使用率。还要测量磁盘使用率和事务日志大小。

Redis可能是一个非常好的数据库。众所周知,它速度很快,并且支持服务器端增量。

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

您也可以使用任何其他数据存储。如果它本身不支持递增,你可以插入新的行。然后,让一个后台进程定期聚合这些行,这样它们就不会不断累积。

 类似资料:
  • 问题内容: 我上了一堂课,想跟踪学生的统计数据。我打算稍后制作一个GUI来处理这些数据。 我的主要问题是:保存和以后检索此数据的最佳方法是什么? 我已经读过关于pickle和JSON的文章,但是我并没有真正了解它们的工作方式(尤其是关于它们如何保存数据的信息,例如哪种格式和位置)。 问题答案: 对于持久性数据(存储有关学生的信息),数据库是一个不错的选择。如前所述,Python附带了Sqlite3

  • 我开始创建一个系统,我(作为目前唯一的用户)将加载一个动态创建的PHP页面,该页面具有

  • 问题内容: 在MySQL数据库中存储IP地址的最佳字段类型和长度是什么? IPv6呢? 问题答案: 将IP存储为,然后使用和功能存储/检索IP地址。 样例代码:

  • 问题内容: 我想知道是否存在某种“标准”用于在数据库中存储美国地址?看来这是一项常见的任务,应该有某种标准。 我正在寻找的是数据库表应如何工作和交互的 特定 模式,已经是第三种标准形式,包括数据类型(MySQL)。一个好的UML文档将起作用。 也许我只是在偷懒,但这是一个非常常见的任务,而且我确信有人发布了在某处进行此操作的有效方法。我只是不知道在哪里寻找,而Google并没有帮助。请指出我的资源

  • 最近我考虑了在MySQL数据库中存储历史数据的最佳实践。目前,每个可版本表都有两列-和,都是类型。具有当前数据的记录的填充了其创建日期。当我更新此行时,我将填充更新日期,并使用添加新记录,与前一行中的相同-简单的操作。但是我知道这个表会非常大,非常快,所以获取数据会非常慢。 我想知道您是否有存储历史数据的实践?

  • 问题内容: 我有一些将数据存储在页面中的表格。我想找到一种方法来临时保存用户在导航中输入的数据,并保持到确认订单为止。谁能帮我? 问题答案: 这正是会议的目的