PolarDB提供Inventory Hint,帮助您快速提交、回滚事务。您还可以将Inventory Hint和Statement Queue一起配合使用,有效提高业务吞吐能力。

前提条件

PolarDB集群版本需为PolarDB MySQL 5.6或PolarDB MySQL 8.0。

背景信息

在电商秒杀活动等业务场景中,减少库存是一个常见的需要高并发,同时也需要串行化的任务模型,PolarDB使用排队和事务性Hint来控制并发和快速提交或回滚事务,提高业务吞吐能力。

语法

PolarDB提供的Inventory Hint支持SELECT、UPDATE、INSERT、DELETE语句。

Inventory Hint包括如下三个事务语法:

  • COMMIT_ON_SUCCESS:当前语句执行成功就提交事务。

    示例:

    UPDATE COMMIT_ON_SUCCESS T
    SET c = c - 1
    WHERE id = 1;
  • ROLLBACK_ON_FAIL:当前语句执行失败就回滚事务。

    示例:

    UPDATE ROLLBACK_ON_FAIL T
    SET c = c - 1
    WHERE id = 1;
  • TARGET_AFFECT_ROW number:如果当前语句影响的行数符合设定的行数就成功,否则语句失败。

    假设Target Affect Row的值设为1,如果更新语句实际更新到了一条数据则认为成功,如果更新没有命中任何记录则认为失败。

    示例:

    UPDATE TARGET_AFFECT_ROW 1  T
    SET c = c - 1
    WHERE id = 1;
    ERROR HY000: The affected row number does not match that of user specified.

配合Statement Queue使用

UPDATE、INSERT、DELETE语句中的COMMIT_ON_SUCCESSROLLBACK_ON_FAILTARGET_AFFECT_ROW number这三个事务语法可以配合Statement Queue进行排队。

示例:

UPDATE COMMIT_ON_SUCCESS POLARDB_STATEMENT_CONCURRENT_QUEUE id ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 t
SET col1 = col1 + 1
WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

UPDATE COMMIT_ON_SUCCESS POLARDB_STATEMENT_CONCURRENT_QUEUE 1 ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 t
SET col1 = col1 + 1
WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0