diff --git a/bench/http.go b/bench/http.go index 98817d7..8fba47a 100644 --- a/bench/http.go +++ b/bench/http.go @@ -41,7 +41,7 @@ func reloadData() { time.Sleep(dtmsvr.UpdateBranchAsyncInterval * 2) began := time.Now() db := sdbGet() - tables := []string{"dtm_busi.user_account", "dtm_busi.user_account_log", "dtm.trans_global", "dtm.trans_branch", "dtm_barrier.barrier"} + tables := []string{"dtm_busi.user_account", "dtm_busi.user_account_log", "dtm.trans_global", "dtm.trans_branch_op", "dtm_barrier.barrier"} for _, t := range tables { _, err := dtmimp.DBExec(db, fmt.Sprintf("truncate %s", t)) dtmimp.FatalIfError(err) diff --git a/dtmsvr/dtmsvr.go b/dtmsvr/dtmsvr.go index 6f391c1..db03bbe 100644 --- a/dtmsvr/dtmsvr.go +++ b/dtmsvr/dtmsvr.go @@ -77,7 +77,7 @@ func updateBranchAsync() { } for len(updates) > 0 { dbr := dbGet().Clauses(clause.OnConflict{ - OnConstraint: "trans_branch_pkey", + OnConstraint: "trans_branch_op_pkey", DoUpdates: clause.AssignmentColumns([]string{"status", "finish_time"}), }).Create(updates) dtmimp.Logf("flushed %d branch status to db. affected: %d", len(updates), dbr.RowsAffected) diff --git a/dtmsvr/dtmsvr.mysql.sql b/dtmsvr/dtmsvr.mysql.sql index 39a1cc3..59d61dd 100644 --- a/dtmsvr/dtmsvr.mysql.sql +++ b/dtmsvr/dtmsvr.mysql.sql @@ -23,12 +23,10 @@ CREATE TABLE if not EXISTS dtm.trans_global ( PRIMARY KEY (`id`), UNIQUE KEY `gid` (`gid`), key `owner`(`owner`), - KEY `create_time` (`create_time`), - KEY `update_time` (`update_time`), key `status_next_cron_time` (`status`, `next_cron_time`) comment '这个索引用于查询超时的全局事务,能够合理的走索引' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; -drop table IF EXISTS dtm.trans_branch; -CREATE TABLE IF NOT EXISTS dtm.trans_branch ( +drop table IF EXISTS dtm.trans_branch_op; +CREATE TABLE IF NOT EXISTS dtm.trans_branch_op ( `id` bigint(22) NOT NULL AUTO_INCREMENT, `gid` varchar(128) NOT NULL COMMENT '事务全局id', `url` varchar(128) NOT NULL COMMENT '动作关联的url', @@ -42,21 +40,5 @@ CREATE TABLE IF NOT EXISTS dtm.trans_branch ( `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `gid_uniq` (`gid`, `branch_id`, `op`), - KEY `create_time` (`create_time`), - KEY `update_time` (`update_time`) + UNIQUE KEY `gid_uniq` (`gid`, `branch_id`, `op`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; -drop table IF EXISTS dtm.trans_log; -CREATE TABLE IF NOT EXISTS dtm.trans_log ( - `id` bigint(22) NOT NULL AUTO_INCREMENT, - `gid` varchar(128) NOT NULL COMMENT '事务全局id', - `branch_id` varchar(128) DEFAULT NULL COMMENT '事务分支ID', - `action` varchar(45) DEFAULT NULL COMMENT '行为', - `old_status` varchar(45) NOT NULL DEFAULT '' COMMENT '旧状态', - `new_status` varchar(45) NOT NULL COMMENT '新状态', - `detail` TEXT NOT NULL COMMENT '行为记录的数据', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `gid` (`gid`), - KEY `create_time` (`create_time`) -) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; \ No newline at end of file diff --git a/dtmsvr/dtmsvr.postgres.sql b/dtmsvr/dtmsvr.postgres.sql index 30c5bd5..97da66c 100644 --- a/dtmsvr/dtmsvr.postgres.sql +++ b/dtmsvr/dtmsvr.postgres.sql @@ -25,14 +25,12 @@ CREATE TABLE if not EXISTS dtm.trans_global ( CONSTRAINT gid UNIQUE (gid) ); create index if not EXISTS owner on dtm.trans_global(owner); -CREATE INDEX if not EXISTS create_time ON dtm.trans_global (create_time); -CREATE INDEX if not EXISTS update_time ON dtm.trans_global (update_time); create index if not EXISTS status_next_cron_time on dtm.trans_global (status, next_cron_time); -drop table IF EXISTS dtm.trans_branch; +drop table IF EXISTS dtm.trans_branch_op; -- SQLINES LICENSE FOR EVALUATION USE ONLY -CREATE SEQUENCE if not EXISTS dtm.trans_branch_seq; -CREATE TABLE IF NOT EXISTS dtm.trans_branch ( - id bigint NOT NULL DEFAULT NEXTVAL ('dtm.trans_branch_seq'), +CREATE SEQUENCE if not EXISTS dtm.trans_branch_op_seq; +CREATE TABLE IF NOT EXISTS dtm.trans_branch_op ( + id bigint NOT NULL DEFAULT NEXTVAL ('dtm.trans_branch_op_seq'), gid varchar(128) NOT NULL, url varchar(128) NOT NULL, data TEXT, @@ -46,22 +44,4 @@ CREATE TABLE IF NOT EXISTS dtm.trans_branch ( update_time timestamp(0) DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT gid_uniq UNIQUE (gid, branch_id, op) -); -CREATE INDEX if not EXISTS create_time ON dtm.trans_branch (create_time); -CREATE INDEX if not EXISTS update_time ON dtm.trans_branch (update_time); -drop table IF EXISTS dtm.trans_log; --- SQLINES LICENSE FOR EVALUATION USE ONLY -CREATE SEQUENCE if not EXISTS dtm.trans_log_seq; -CREATE TABLE IF NOT EXISTS dtm.trans_log ( - id bigint NOT NULL DEFAULT NEXTVAL ('dtm.trans_log_seq'), - gid varchar(128) NOT NULL, - branch_id varchar(128) DEFAULT NULL, - action varchar(45) DEFAULT NULL, - old_status varchar(45) NOT NULL DEFAULT '', - new_status varchar(45) NOT NULL, - detail TEXT NOT NULL, - create_time timestamp(0) DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (id) -); -CREATE INDEX if not EXISTS gid ON dtm.trans_log (gid); -CREATE INDEX if not EXISTS create_time ON dtm.trans_log (create_time); \ No newline at end of file +); \ No newline at end of file diff --git a/dtmsvr/trans.go b/dtmsvr/trans.go index b4dea89..8dab820 100644 --- a/dtmsvr/trans.go +++ b/dtmsvr/trans.go @@ -105,7 +105,7 @@ type TransBranch struct { // TableName TableName func (*TransBranch) TableName() string { - return "dtm.trans_branch" + return "dtm.trans_branch_op" } func (t *TransBranch) changeStatus(db *common.DB, status string) *gorm.DB {