如何只用LAMP有效地存储递增值?

时间:2016-11-08 08:21:00

标签: php mysql database lamp

我有一个统计部分显示一个计数器,其值每秒随机增加1000-10000,随机数随着数量变大而增加,因此将来可能会有10000-1000万。

如果出现问题并且服务器关闭我可以将此值恢复到上次停止的位置,我该如何存储?

最简单的方法是将它存储在MySQL中并每秒更新一次,但这会占用大量资源而且我认为它不是为了这个。

我知道Redis可以做到,但我处在一个我买不起另一个数据库的场景中。只有1个数字会不断增加,最有效的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用此方案:

创建一个InnoDB表和一个Memory表。您将在Memory表中保留一个条目,其中包含以下列:id,counter。 每次你必须增加计数器时,你会执行以下操作:

  • 更新内存表中的计数器
  • 在InnoDB表中添加新条目

如果发生故障,您将通过计算Memory表来初始化InnoDB表计数器(因为Memory表在服务器发生故障/重启时丢失了数据。)

为什么使用InnoDB进行日志?因为它具有行锁并且插入新数据不会锁定整个表(如MyIsam那样)。

为什么将内存表用于计数器而不是InnoDB?如果查询的查询太多,更新一行可能会因为行锁而遇到问题和性能问题。

您也可以使用Memcache代替Memory表。这种方法将避免使用mysql作为计数器,但也会在数据丢失时共享相同的问题(因此必须在发生故障时初始化数据)。