Mais conteúdo relacionado
エンジニアCROSS 2016 02-05 業務システムをRDBなしで作れるのか?
- 13. Case1 : 給与計算
● 開始時にデータを読んできて、
結果を計算する
● データには締切があり、締切後
のデータがそもそもエラーケース
● 計算は少し遅れても良いが、エ
ラーケースには気付きたい
エラーケース:
● 計算開始後に新しいデータが
入った場合に結果が正しくない
勤怠データ
人事データ
計算式データ
給与計算
- 14. Answer1 : 給与計算 実装例
● データ読み込み時に各データの
Timestampを取得しておく
● 計算終了時に各データの
Timestampを比較
● 読み込んだデータより新しいデー
タが見つかった場合はアラートを
出す
勤怠データ
人事データ
計算式データ
給与計算
Timestamp
Timestamp
Timestamp
Check!
- 15. Case2 : 総勘定元帳
● 大量の仕訳を総勘定元帳
に転記していく
● 担当者が勘定科目毎に
チェックを随時行う
● 合計・小計行を表示する
● 反映は遅れても良いが、
表示は遅らせたくない
エラーケース:
● 一つの仕訳が途中で表示
される
- 16. Answer2 : 総勘定元帳 実装例
● 一つの総勘定元帳への書
き込みを一箇所に集約し、
書き込まれる順序を制御
する
● 一つの仕訳が正しく転記さ
れたタイミングで画面表示
用データを作成する
- 17. Answer2 : 総勘定元帳 実装例
● 一つの仕訳をAtomicな更新
差分として扱う
● 更新差分をマージして表示
● 定期的にマージコストを下げ
るためにまとめる
仕訳 A
仕訳 B
仕訳 C
・・・
Snapshot
仕訳 D
仕訳 E
・・・
- 18. Case3 : シーケンス値発行
● システムで一意の番号を採番
していく
● 発行も早い方が良いが、
重複は絶対に避けたい
エラーケース:
● システムで重複した番号が採
番される
- 19. Answer3 : シーケンス値発行 実装例
● Lightweight transactionを利
用し、条件付きのステートメン
トを発行する
● 取得に失敗した場合はリトラ
イ
● 全リージョン、全データセン
ターに大してトランザクション
を発行する
- 20. Case4 : 在庫管理
● ある品物の在庫数を管理する
● 購入操作時に在庫を確認する
● 複数のユーザーが同時にアクセス
する
● 速度も重要、ある程度ならエラーも
許容できる
エラーケース:
● 在庫が無いのに購入できてしまう
または、在庫があるのに購入でき
ない
- 21. Answer4 : 在庫管理 実装例
● ロックテーブルを実装し、ロックが
得られなければリトライ
● ロックテーブルはLightweight
Transactionで実装
- 22. Case5 : Enterprise Spreadsheets
● 一つのSpreadsheetsを複数のユーザー
が相互に編集する
● 速度が重要、同時編集によりデータが失
われた場合、履歴表示可能である
エラーケース:
● 同じセルを複数人が同時に編集する
- 23. Answer5 : Enterprise Spreadsheets
● Masterを一つ選出
● 全ての変更はTimestampと共にMaster
に送られ、順番に適用される
● Masterに適用された変更は、Slaveに通
知される
● データベースはMasterのみが更新する
Master Slave Slave