可序列化能力
在理想情況下,應可將交易「序列化」。 如果同時執行交易的結果與循序執行交易 (也就是一個接著一個進行) 的結果相同,即表示交易為可序列化。 交易執行順序並不重要,只要結果不會反映出任何交易混雜的情況即可。
例如,假設交易 A 會將資料值乘以 2,而交易 B 會將資料值加 1。 現在假設有兩個資料值:0 和 10。 假設這些交易會接續進行,如果交易 A 先執行,則新值會是 1 和 21;如果交易 B 先執行,新值則為 2 和 22。 但是,如果對每個值執行兩筆交易的順序不同,該怎麼辦? 如果交易 A 先對第一個值執行,而交易 B 先對第二個值執行,則新的值為 1 和 22。 如果反轉此順序,則新值為 2 和 21。 如果 1、21 和 2、22 是唯一可能的結果,則代表交易可序列化。 如果只有 1、22 或 2、21 是可能的結果,則代表交易不可序列化。
因此,為什麼需要可序列化? 換句話說,為什麼必須在下一筆交易開始之前,先完成一筆交易? 請想想看下列問題。 銷售人員正在同時輸入訂單,而店員正在傳送帳單。 假設銷售人員從 X 公司輸入了一筆訂單,但並沒有提交這筆訂單;銷售人員仍在與 X 公司代表洽談。而店員在這時間要求系統顯示所有未完成訂單的清單,找出 X 公司的訂單,並傳送一筆帳單。 現在,X 公司的代表決定要變更訂單,因此銷售人員在提交交易之前變更了訂單。 X 公司就會得到不正確的帳單。
如果銷售人員和店員的交易可序列化,則永遠不會發生此問題。 銷售人員的交易會在店員的交易開始之前完成,在此情況下,店員可以傳送正確的帳單;或是店員的交易會在銷售人員的交易開始之前完成,在此情況下,店員則完全不會將帳單傳送給 X 公司。