什么会更好:点击mysql或平面文件上的计数器?

时间:2013-11-09 21:19:56

标签: php mysql file counter

我始终确信使用平面文件存储实时访问/点击计数器数据会更好更快:在附加模式下打开文件,锁定它,放入数据然后关闭。然后在五分钟内通过crontab读取一次该文件,将内容存储到DB并截断文件以获取新数据。 但今天我的朋友告诉我,这是一种错误的方式。最好是拥有永久的MySql连接,并在每次点击时将数据写入数据库。首先,DB可以将结果存储到内存表中。其次,即使我们存储到位于磁盘上的表,然后该文件也会永久打开,因此无需在磁盘上找到它并在每次查询时反复打开。

你怎么看?

UPD:我们谈论的是高流量网站,每天大约有一百万。

2 个答案:

答案 0 :(得分:1)

你的朋友是对的。写入文件然后每5分钟发送一次cronjob到数据库?这听起来很复杂。我无法想象没有直接写入DB的充分理由。

此外,当您按照描述的方式写入文件时,操作将被序列化。在写入之前,用户必须等待另一个释放锁定。如果你需要它,那根本不会扩展。如果您总是写入同一行,则DB也会发生相同的情况,但您可以为同一个值创建多个行,写入随机值,并在需要总计时对它们求和。

在这种情况下使用内存表没有多大意义。如果您的数据不需要持久化,那么使用您可能已经拥有的内存缓存并简单地增加密钥的值就会简单得多。

答案 1 :(得分:1)

如果您使用数据库WITHOUT事务,您将获得与使用具有更高可靠性和更少编码的文件相同的基本性能。

写入数据库可能很重要 - 例如数据库可能位于不同的服务器上,因此您有网络流量,或者它可能是事务数据库,在这种情况下,每次写入至少有2次写入(如果涉及索引,可能会更多),但如果您知道所有这些内容然后你可以使用数据库,利用其他人数十年的工作,使你的编程任务变得简单。