1

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

你怎么看待这件事?

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

4

2 回答 2

1

你的朋友是对的。写入文件,然后每 5 分钟将 cronjob 发送到数据库?这听起来很令人费解。我无法想象不直接写入数据库的充分理由。

此外,当您以您描述的方式写入文件时,操作将被序列化。用户在写入之前必须等待另一个人释放锁。如果您需要它,那根本无法扩展。如果您总是写入同一行,DB 也会发生同样的情况,但是您可以有多个相同值的行,写入一个随机的行并在需要总数时将它们相加。

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

于 2013-11-09T21:26:24.687 回答
1

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

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

于 2013-11-10T00:13:54.890 回答