JokerCatz
金流與帳務系統開發心法 最近工作上的辯思之旅
s2.
每個值變動前存入上次的結果
但假設前面有一個未出帳/未確定的交易的時候怎麼辦呢?
s2.
分散式系統中每台主機都不準,所以這邊一定要留存中心伺服器給的時間,通常是 DB 時間
但假設DB可能也是分散式的狀態,會不會有DB時間也有差異的可能性?
JokerCatz
s2. : 這邊都只是心法哈哈,實務當然必須要有所取捨,所有金流都是串鏈的行為,有來源有對象,所以你的未出帳 / 未確定,對會計而言都是"在途"

在途有個有趣的特性,就是你說的那個,它歸"來源"所有,但實際又不歸來源所有,所以必須搬出它原本的餘額,變成在途的餘額

再來 DB 是分散式的話基本上無解,但你忘記 DB 的一個重要的特性,也就是 transaction,通常 DB 會分 master slave,而要進行 transaction 時通常也會在同一個主機完成,否則 "lock" 將不會成立,而這邊假設 lock / transaction 在動態的主機內完成時 ...... 就要另外寫演算法來做排序了,排序你可以用我裡面補充的 checksum 方式,或是自己 sort 過
JokerCatz
只要有做過 transaction 沒有掉資料,應該能被 sort 出順序才是,通常也不會差太多筆之類的
JokerCatz
第一個我看懂了,"在途"如果有修正,那你勢必有地方還要再存入在途修正的結果,所以你不應該把類似"銀行_UserID_在途"進行修正(那邊那樣寫是好說明哩),改成"銀行_InvoiceID_在途"甚至是"銀行_InvoiceID_UserID_Currency_KInd ... _在途"你應該就會大大減少這修正的頻率,畢竟通常轉入後只會變成完成或失敗而已,但你的 balance 欄位或記錄就會變成 N 個
JokerCatz
寫上補充了,歡迎挑戰哈哈
載入新的回覆