如何仅使用 LAMP 有效地存储增量值?

How to efficiently store incrementing value with only LAMP?

我有一个统计部分显示一个计数器,它的值每秒随机增加 1000-10000,随机数会随着数字变大而增加,所以将来它可能是 10000-100 万。

如果出现问题并且服务器关闭,我如何存储它以便我可以将这个值检索回上次停止的位置?

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

我知道 Redis 可以做到,但我处于无法负担另一个数据库的情况。只有1个数字会不断增加,最有效的方法是什么?

你可以使用这个场景:

创建一个InnoDBtable和一个内存table。您将在 Memory table 中保留一个条目,其中包含以下列:id、counter。 每次您必须增加计数器时,请执行以下操作:

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

如果发生故障,您将通过对 InnoDB table 进行计数来初始化 Memory table 计数器(因为 Memory table如果服务器 fail/restart).

丢失了他们的数据

为什么使用 InnoDB 做日志? 因为它有行锁并且插入新数据不会锁定整个 table(就像 MyIsam 一样) .

为什么使用内存 table 作为计数器,而不是 InnoDB? 如果更新一行的查询并发过多,您可能会遇到问题和性能问题,因为行锁。

您也可以使用 Memcache 代替 Memory table。这种方法将避免使用 mysql 作为计数器,但也存在数据丢失的相同问题(因此必须在失败的情况下初始化数据)。