# ソフトウェアアーキテクチャ:トランザクション

+ トランザクションの `client-side` ロジックの実装
  + **`Begin`** の場合:指定した **`"start-ts"`** で論理 **`"snapshot"`** を生成する
  + **`Get/BatchGet/Iter/IterReverse`**
    + **`"start-ts"`**上の`TiKV`からデータを取得し、ローカルメモリバッファに保存
    + ロックされた鍵に直面したときにロックを解決
  + **`Set/Delete`** の場合:ローカルメモリバッファを変異させる
  + **`Commit`** では:
    + **`1PC`** ***[1 つのリージョンにすべてのキーがある場合]***をお試しください
    + **`Async Commit`** ***[もし `len(keys) <= 256 && size(keys) <= 4KB`]***をお試しください
    + **`2PC`** を実行する
    + 詳細については、***トランザクション***トレーニングモジュールを参照する

![`smart`](TiVKClientInterfaces_aa_001_20221027.png)

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

