【发布时间】:2017-02-01 03:18:07
【问题描述】:
我的应用程序需要处理和更新,例如MAIN_TB 表中有 1000 万条记录。为了提高性能,我在四个通过 JDBC 驱动程序访问我的 DB2 数据库的客户端上运行我的应用程序。我不知道如何在这些客户端之间拆分记录,所以我决定使用 LOCK_TB 表来保存有关 MAIN_TB 表中“锁定”记录的信息。
因此,客户端在尝试使用/更新 MAIN_TB 表中的记录之前,会在 LOCK_TB 表中放置一个“锁定”记录。然后客户端将其解锁。这是命令:
INSERT INTO LOCK_TB
(doc_id, locked_on, locked_by)
VALUES (111, '2017-01-01', 222)
DOC_ID 是一个主键,它具有指向 MAIN_TB 表中 DOC_ID 列的外键。
因此,如果 INSERT 失败,则意味着记录已经存在(锁定)并且客户端会跳过 MAIN_TB 表中的记录。如果它没有失败,则意味着插入了新的锁定记录,并且客户端可以使用 MAIN_TB 表中的数据。一旦完成,它就会释放锁:
DELETE FROM LOCK_TB WHERE doc_id=111
(显然LOCK_TB中的记录不会超过四个,因为有四个客户端)
那么如果这四个客户端同时请求 INSERT/DELETE 到 LOCK_TB 表中会发生什么(短时间内高请求影响)?
在客户之间分配工作的最佳做法是什么?我对上面描述的模型没问题,但它会伤害任何东西(表、数据库或服务器)吗?
【问题讨论】:
-
为什么不让 DB2 自己管理并发?