如何仅使用 LAMP 有效地存储增量值?
How to efficiently store incrementing value with only LAMP?
我有一个统计部分显示一个计数器,它的值每秒随机增加 1000-10000,随机数会随着数字变大而增加,所以将来它可能是 10000-100 万。
如果出现问题并且服务器关闭,我如何存储它以便我可以将这个值检索回上次停止的位置?
最简单的方法是将它存储在 MySQL 中并每秒更新一次,但这会占用大量资源,我认为它不适合此目的。
我知道 Redis 可以做到,但我处于无法负担另一个数据库的情况。只有1个数字会不断增加,最有效的方法是什么?
你可以使用这个场景:
创建一个InnoDB
table和一个内存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 作为计数器,但也存在数据丢失的相同问题(因此必须在失败的情况下初始化数据)。
我有一个统计部分显示一个计数器,它的值每秒随机增加 1000-10000,随机数会随着数字变大而增加,所以将来它可能是 10000-100 万。
如果出现问题并且服务器关闭,我如何存储它以便我可以将这个值检索回上次停止的位置?
最简单的方法是将它存储在 MySQL 中并每秒更新一次,但这会占用大量资源,我认为它不适合此目的。
我知道 Redis 可以做到,但我处于无法负担另一个数据库的情况。只有1个数字会不断增加,最有效的方法是什么?
你可以使用这个场景:
创建一个InnoDB
table和一个内存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 作为计数器,但也存在数据丢失的相同问题(因此必须在失败的情况下初始化数据)。