[DB]軍の取引とされる-2コンシステンシ編
1.一貫性とは?
コンシステンシの事前定義は次のとおりです.
一貫性とは、トランザクションが正常に実行されると、常に一貫したデータベース・ステータスが維持されることを意味します.整合性制約がすべての勘定科目に残高を要求する場合、その制限に違反する取引は中断されます.(ソース)
インターネット上でトランザクションの一貫性を検索すると、送金の例が表示されます.
Aの残高+Bの残高=100万元の場合、送金後Aの残高+Bの残高=100万元となります.
また、トランザクションの一貫性は、データベースが持つ制約にも依存します(たとえば、残高はゼロ未満ではなく、残高は常に数値でなければなりません).
2.取引が一致しない場合
前の例を引き続き使用します.しかし、今回入隊を申請した場合、軍は10000ウォンを支給する.データベースに問題が発生したため、送金トランザクションの原子性は保護されません.
class MilitaryDB{
HashSet<String> newSoldiers = new HashSet<>();
int budget = 10_000;
public void 입대(Citizen citizen) {
newSoldiers.add(citizen.name);
송금(citizen);
}
public void 송금(Citizen citizen) {
budget -= 10_000;
if(네트워크_에러_발생()) {
System.out.println("=====Network Failure=====");
} else {
citizen.balance += 10_000;
}
}
private boolean 네트워크_에러_발생() {
if(2*Math.random() > 1)
return true;
else
return false;
}
public void 국가의_부름에_답하라() {
for (String name : newSoldiers) {
System.out.println("2022년 3월 23일까지 논산훈련소로 오도록, 훈련병 " + name);
}
}
}
class Citizen {
String name;
int balance;
public Citizen(String name, int balance) {
this.name = name;
this.balance = balance;
}
}
上記の状況が発生した場合、一致しないと言う可能性があります.
これにより、トランザクションの原子間性が使用できない場合、トランザクションの一貫性も使用できません.
Reference
この問題について([DB]軍の取引とされる-2コンシステンシ編), 我々は、より多くの情報をここで見つけました https://velog.io/@mincho920/DB-군대로-알아보는-트랜잭션-2.-일관성-편テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol