我有一个统计部分显示一个计数器,其值每秒随机增加1000-10000,随机数随着数量变大而增加,因此将来可能会有10000-1000万。
如果出现问题并且服务器关闭我可以将此值恢复到上次停止的位置,我该如何存储?
最简单的方法是将它存储在MySQL中并每秒更新一次,但这会占用大量资源而且我认为它不是为了这个。
我知道Redis可以做到,但我处在一个我买不起另一个数据库的场景中。只有1个数字会不断增加,最有效的方法是什么?
答案 0 :(得分:0)
您可以使用此方案:
创建一个InnoDB
表和一个Memory表。您将在Memory
表中保留一个条目,其中包含以下列:id,counter。
每次你必须增加计数器时,你会执行以下操作:
如果发生故障,您将通过计算Memory
表来初始化InnoDB
表计数器(因为Memory
表在服务器发生故障/重启时丢失了数据。)
为什么使用InnoDB进行日志?因为它具有行锁并且插入新数据不会锁定整个表(如MyIsam
那样)。
为什么将内存表用于计数器而不是InnoDB?如果查询的查询太多,更新一行可能会因为行锁而遇到问题和性能问题。
您也可以使用Memcache
代替Memory
表。这种方法将避免使用mysql作为计数器,但也会在数据丢失时共享相同的问题(因此必须在发生故障时初始化数据)。