分布式事務建立表結構(下單扣庫存案例資料庫)

2021-09-23 13:54:00 字數 1713 閱讀 1947

下單後扣庫存失敗,不一致了。下單失敗,扣庫存成功不一致。

建立兩個資料庫

第乙個 toov_order

sql:

set foreign_key_checks=0;

-- ----------------------------

-- table structure for order

-- ----------------------------

drop table if exists `order`;

create table `order` (

`id` int(11) not null auto_increment,

`name` varchar(255) default null comment '訂單名稱',

`order_createtime` datetime default null comment '下單時間',

`order_state` int(11) default null comment '訂單狀態 0 已經未支付 1已經支付 2已退單',

`order_money` double(10,0) default null comment '訂單**',

`commodity_id` int(10) default null comment '商品id',

primary key (`id`)

) engine=innodb auto_increment=14 default charset=utf8;

-- ----------------------------

-- records of order

-- ----------------------------

insert into `order` values ('9', '洗髮水', '2018-10-09 15:30:03', '300', '0', '30');

insert into `order` values ('13', '手機殼', '2018-10-09 16:59:33', '300', '0', '30');

第二個toov5_stock

set foreign_key_checks=0;

-- ----------------------------

-- table structure for stock

-- ----------------------------

drop table if exists `stock`;

create table `stock` (

`id` int(11) not null auto_increment,

`commodity_id` int(11) default null comment '商品id',

`stock` int(11) default null comment '庫存餘額',

primary key (`id`)

) engine=innodb auto_increment=2 default charset=utf8;

-- ----------------------------

-- records of stock

-- ----------------------------

insert into `stock` values ('1', '30', '89');

庫存,訂單,積分的分布式事務

乙個訂單支付之後,我們需要做下面的步驟 減庫存可以採用同步呼叫 feign的方式 也可以採用非同步呼叫 rabbitmq傳遞訊息 我們這裡採用同步呼叫,接下來我們分析為什麼 如果我們採用非同步呼叫的方式,減庫存的這條訊息傳送到mq就不管了,那麼到底庫存減成功了沒有呢?這我們並不知道,如果庫存不足,那...

clickhouse 建立分布式表

建立本地表 create table yh118 on cluster test time datetime,item guid string,metric name lowcardinality string alg name lowcardinality string value boolean...

補充上個帖子的分布式事務之扣減庫存

當業務規模不大,並且對於生成訂單並凍結庫存等操作要求一致性較高時,比較推薦acid資料庫進行操作,加入快取或訊息佇列後複雜度以及實時一致性較差 比如有如下場景 步驟相關業務 1凍結庫存 保證下單時有足夠的庫存 2生成對應的訂單 3支付訂單,扣減凍結庫存 1 該場景如果僅使用acid資料庫進行控制,則...