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

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

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

  • 本文向大家介绍分享20个数据库设计的最佳实践,包括了分享20个数据库设计的最佳实践的使用技巧和注意事项,需要的朋友参考一下 数据库设计是整个程序的重点之一,为了支持相关程序运行,最佳的数据库设计往往不可能一蹴而就,只能反复探寻并逐步求精,这是一个复杂的过程,也是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。下面给出了20个数据库设计最佳实践,当然,所谓最佳,还是要看它是否适合你的程