php - 只用LAMP如何高效存储增量值?

标签 php mysql database lamp

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

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

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

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

最佳答案

你可以使用这个场景:

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

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

如果发生故障,您将通过对 InnoDB 表进行计数来初始化 Memory 表计数器(因为 Memory 表会丢失数据,以防万一服务器故障/重启)。

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

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

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

关于php - 只用LAMP如何高效存储增量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40482082/

相关文章:

mysql - **[错误]1416 : GEOMETRY field in DB Query

sql - 同一张表的一对多关系

php - CodeIgniter 中的 Foreach

sql - 在 JOIN 中获得最高结果

mysql - 加快 MySQL 连接检查重复项

mysql - 选择timestampdiff超过1天并且有一些null的地方

php - PHP 中是否有可选链接?

PHP Gmail API : can send email but how to add recipient email

php - 如何在命令行中使用composer安装最新版本的软件包?

php - SQL 打印出行两次?