当代PHP模式处理并发性,或者这不是一个问题?

当代PHP模式处理并发性,或者这不是一个问题?,php,concurrency,Php,Concurrency,我上一次接触php是在2004年,那是nukephp的时代,当时可以创建计数器,脚本在其中读取文件、递增并写回。当时,当我编写这些类型的脚本时,我并不担心锁定文件,如果下一个请求无法获得锁,就让它死掉() 现在我是。我相信你们中的许多人都是。那么,当代网络开发者如何处理这个问题呢?有没有新的系统化方法?据我所知,Ajax本身并没有提出解决这个问题的方法。这似乎只是关于异步请求,而不是关于服务器应该如何处理两个客户机同时请求使用两个单独的值更新文件 不管怎样,在PHP的世界中,有没有机制、模型、模

我上一次接触php是在2004年,那是nukephp的时代,当时可以创建计数器,脚本在其中读取文件、递增并写回。当时,当我编写这些类型的脚本时,我并不担心锁定文件,如果下一个请求无法获得锁,就让它死掉()

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

不管怎样,在PHP的世界中,有没有机制、模型、模式、体系结构可以让我回到原子性的幻觉中去,哪怕只是我在早些时候曾经感觉到的原子性?如果我想更现代地创建stackexchange/utube comments等web服务,我应该使用哪些资源


编辑:我如何使用php中的框架创建一个简单的计数器脚本,该框架提供无锁货币,不依赖数据库来处理交易对账,并且可以处理文件系统上的数据(这些数据是非结构化的,不需要在数据库中)。

Uhh。。。我不想破坏它,但寻求“无锁并发平面文件更新”就像是在地狱里寻找一只滑冰的飞猪

解决方案“锁定文件”在过去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中某个位置的bool即可。

Uhh。。。我不想破坏它,但寻求“无锁并发平面文件更新”就像是在地狱里寻找一只滑冰的飞猪

解决方案“锁定文件”在过去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中某个位置的布尔即可。

您能提供一个简短的编码示例,说明您认为存在的问题吗?我正在努力理解您正在解决的并发问题,我给出了一个问题示例。基于SQL的解决方案是最简单的。只要使用AUTO_INCREMENT field和LAST_INSERT_ID(),每次都会得到新的ID。使用文件并不是那么糟糕,因为大多数文件系统访问都是由操作系统缓存的。PHP有一些加速器可以用来存储自定义变量,比如xcache或eaccelerator。而且信号量始终是一个选项。编辑:memcache也被广泛使用,特别是在多服务器方法中。您能否提供一个简短的编码示例,说明您认为存在的问题?我正在努力理解您正在解决的并发问题,我给出了一个问题示例。基于SQL的解决方案是最简单的。只要使用AUTO_INCREMENT field和LAST_INSERT_ID(),每次都会得到新的ID。使用文件并不是那么糟糕,因为大多数文件系统访问都是由操作系统缓存的。PHP有一些加速器可以用来存储自定义变量,比如xcache或eaccelerator。而且信号量始终是一个选项。编辑:memcache也被广泛使用,特别是在多服务器方法中。