1

上一次我涉足 php 是在 2004 年,当时 nukephp 的日子里,可以在脚本读取文件、增加文件并将其写回的地方创建计数器。那时,当我编写这些类型的脚本时,我并不担心锁定文件并在下一个请求 die() 时如果它无法获得锁定。

现在我。我相信你们中的很多人都是。那么当代现代 Web 开发人员如何处理这个问题呢?是否有新的系统方法来解决它?据我所知,Ajax 本身并没有提出解决此问题的方法。它似乎只是关于异步请求,没有关于服务器应该如何处理两个客户端同时使用两个单独的值更新文件。

无论如何,在 PHP 的世界中,有没有机制、模型、模式、架构可以让我回到我曾经感觉到的原子性的幻觉?如果我想更现代地创建诸如 stackexchange/utube 评论之类的 Web 服务,我应该使用任何资源吗?

编辑:如何使用 php 中的框架创建一个简单的计数器脚本,该框架提供无锁货币,并且不依赖数据库来处理协调事务,以及可以处理文件系统上的数据的东西(此数据是非结构化的,不需要在数据库中)。

4

1 回答 1

1

呃......不想打破它,但寻求“无锁并发平面文件更新”就像试图在地狱中寻找飞猪溜冰一样。

解决方案lock files在过去 8 年中没有改变,而且很可能永远不会改变。这是根本。要么使用锁,要么使用数据库。数据没有结构并不重要,您可能已经在使用数据库,因此要么在某处的表中创建一个字段,要么创建一个更健壮的结构,以允许您比一个更深入地研究您的数据简单地统计自任意日期以来的所有点击量。

TABLE Articles
  ID INT PK
  ...

TABLE Viewcount
  Date        DATE  PK
  Article_ID  INT   PK
  NumViews    INT

INSERT INTO Viewcount (Date, Article_ID, NumViews)
  VALUES(TODAY(), 12345, 1)
  ON DUPLICATE KEY UPDATE NumViews=NumViews+1

需要注意的是,如果您使用像 C 这样的编译语言,您可以编写一个守护程序来坐在该文件上并增加它,但您基本上只是将锁定文件移动到位于 RAM 中某处的布尔值。

于 2013-01-08T16:23:12.833 回答