@themostlazyman 细化下,假设是 mysql 的 innodb 引擎。插入场景:1.userid,business_type 建立联合索引,数据库上锁 userid,business_type 锁范围
` INSERT INTO test_tbl (userid , business_type , config_id , total_version) VALUES (1,1,1,(SELECT maxVersion FROM (select IFNULL(max(total_version),0)+1 as maxVersion from test_tbl where userid =1 and business_type =1) as b)) ` 沒試過高並發下效果,可以自己試試
另外換一個角度,為什麼不使用纳秒呢? 比如業務場景下,根據數據產生時間生成纳秒級別記錄,此時沒插入,丟入隊列; 然後根據數據庫承受能力調控出列寫入速度; 查詢的場景根據排序自己加上版本號,通過數據產生時的納秒當作排序; 這樣會不會更好解決?