Php MYSQL事务替代方案?

Php MYSQL事务替代方案?,php,mysql,transactions,Php,Mysql,Transactions,使用PHP/MYSQL,我试图为我的网站创建一个简单的搜索。我在mytable中有所有页面数据,我正在按此顺序处理数千行: 1. Query for 1 row with a particular id in `mytable` with column `status=0` 2. Using that id do something in `other` table(s) 3. When done, update `mytable` with`status=1` 已编辑 在步骤2中,我

使用PHP/MYSQL,我试图为我的网站创建一个简单的搜索。我在
mytable
中有所有页面数据,我正在按此顺序处理数千行:

 1. Query for 1 row with a particular id in `mytable` with column `status=0`
 2. Using that id do something in `other` table(s) 
 3. When done, update `mytable` with`status=1`
已编辑

在步骤2中,我处理步骤1中的所有数据,例如

  • 标记每个单词并处理数据
  • 获取所有链接和流程数据
  • 获取所有图像和过程数据等
为了加快进程,我想运行多个脚本,以便更快地处理所有行,但后来我了解了并发性问题。我读过Mysql
TRANSACTION
,这个过程是
TRANSACTION
的经典例子

对于记录,所有表都是
INNODB
,因此我可以使用
TRANSACTION/LOCK
。如果我使用
TRANSACTION
,那么问题是每个脚本都会等待一个完整的行处理(步骤2需要更长的时间),然后该处理所用的时间与一次处理一行所用的时间相同

有人可以建议,我如何处理
TRANSACTION
LOCK
或其他一些表结构的其他替代方案,以便通过多次同时运行相同的PHP脚本,更快/同时处理
mytable
中的每一行


我已经尝试过
SOLR
LUCENE
SPHINX
了,很抱歉,但这些都太专业了,我无法使用,很抱歉我这边的限制:(.

在“other”表中执行的操作。根据您是否需要外部计算,您可以通过一个带有子选择的查询来完成这一切。如果计算基于两个表中的数据,您可能可以这样编写。SQL在大多数情况下不需要迭代,而是直接作用于j的每个叉积元组相互依赖的关系

简而言之,告诉我们更多关于你在步骤1和2中所做的事情,然后我们就可以看到了


(或者,您可以切换到支持存储过程的数据库并以这种方式运行。)

您可以将
事务隔离级别设置为
读取未提交的
以最小化锁定。在php脚本中将其设置为会话级别

InnoDB默认具有
可重复读取
隔离级别

SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
SET SESSION tx_isolation='READ-UNCOMMITTED'; 

要了解更多有关隔离级别的信息,请检查

我不确定是否理解您的确切问题,但我尝试一下

你喜欢这样:

 1. Query for 1 row with a particular id in `mytable` with column `status=0`
 2. Using that id do something in `other` table(s) 
 3. When done, update `mytable` with`status=1`
你不能这样做吗

 1. Query for all rows in `mytable` with column `status=0`
 2. Save those rows in a temporary table
 3. Iterate the temporary table to do some things in `other` table(s) 
 4. When done, update all rows that should be affected in `mytable` with`status=1` (with TRANSACTIONS)
这样,您只需在更新时使用事务。我认为这种方法会快得多,因为您只需执行单个查询进行选择

更新

您总是可以这样做来创建id为且状态为零的临时表:

(首先手动创建一个名为tentable的表)


我能想到的事务的第一个替代方案是无事务。只要你准备好失去事务保证的数据完整性,你就可以提高速度。你在第二步到底想做什么?你真的需要PHP在其他表中做其他事情吗?是的@bestprogrammerintheworld我需要PHP来处理你可以把这个问题看作是我在JayHaJe.com上之前提到的问题的扩展——我读了Queston,但是我不理解在步骤2中你想做什么。你的意思是你需要一些与Word文档相关的东西吗?你能给出一个具体的例子吗?MySQL确实支持在临时选项卡上从来没有工作过的存储过程。le直到现在,将学习并恢复,问题是我不确定Temopry表是否可以容纳如此大的数据。在任何情况下,我可以为临时表选取几行,然后继续循环。让我尝试一下,并感谢您的指导。@jahajee.com-使用具有如此大数据量的临时表没有问题。限制在存储范围内(硬盘)。
DROP temptable;
INSERT INTO `temptable`( mytable_id )
SELECT  id FROM `mytable`WHERE status = 0