0

有没有人有任何建议如何实施?

table1 将不断被INSERT编入。这需要 table2 上的每一行都UPDATE在每个 table1 上INSERT。此外,我不知道 MySQL 是否最能负责的算法(相对于 PHP 计算速度)也必须应用于 table2 的每一行。

我想让 PHP 在用户执行的时候处理它INSERT,但是我发现 PHP 页面在为用户提供连接后不是持久的(或者我明白,请告诉我这是错误的,所以我可以走那条路)。

所以现在我的问题是,如果我UPDATE在 a 中使用一个总表TRIGGER,我将拥有大量锁(或者我从 InnoDB 的锁定中了解到,当UPDAT使用复合主键对整个表进行锁定时,因为该键的一部分将是UPDATEd)。

现在,我正在考虑使用 cron 作业,但我宁愿他们INSERT在 table1 上的用户而不是按计划开火。

所以我在想也许是一个CURSOR...

什么方法最快并且“绝对”不锁定 table2?

提前谢谢了!

表结构

table2 都是INT速度。但是,它有一个 2 列主键。这些列中的 1 列是UPDATEd。该键适用于同样重要的 rapid SELECTs。

table1 平均大约是 table2 行数的 2.5 倍。

table2 实际上非常小,~200mb。

4

1 回答 1

2

首先:您尝试的几乎是不可能的-我不知道RDBMS可以通过“绝对没有锁定”将s升级INSERT为一个表到另一个表的s。UPDATE

那说:

  • 我的第一个研究点是,是否可以彻底检查架构以优化这个热点。
  • 如果这无法实现,您可能需要考虑制作table2一种可以从现有数据重新创建的内存类型(例如将其快照与最大 PK 一起保存,table1如果需要重新启动数据库,则向前滚动)。由于您需要更新每行上的所有行,因此不能很大。INSERTtable1
  • Next point of research would be to put the INSERT and the UPDATE into a stored procedure, that is called by the insertion logic. This would make a runaway situation with the resulting locking hell on catchup much less likely.
于 2013-01-06T18:31:03.093 回答