我有一个统计部分显示一个计数器,它的值每秒随机增加 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/