X



プログラマー俺、CQRSを完全に理解する
■ このスレッドは過去ログ倉庫に格納されています
0001以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:07:52.076ID:nWhM8gcw0
理解った
0002以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:08:32.422ID:7HQ5QNKx0
なにそれ?
わかったなら説明してよ
0003以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:08:50.603ID:nWhM8gcw0
まずCQRSはデータベース設計パターンの一つ CQRSは参照系操作と更新系操作を分けることで色々といい感じになるやつだ
0004以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:10:55.718ID:r/f+Y/E80
高度なSQLの時代は終わった
これからはCQRSの時代
0005以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:12:07.316ID:nWhM8gcw0
参照系と更新系を分けると言われてもピンとこないと思う
まず例をあげようユーザテーブルを設計する場合は何も正規化をしない場合次のようになるかと思う

user
id
name
registered_at
withdrew_at
reinstatement_at
updated_at

それぞれのイベントがある度にoo_atが更新される
ユーザが登録すればregistered_atがnullから日付に更新される

しかしこれにはちょっとした欠点がある
ユーザ情報を更新している最中は参照系クエリがブロックされること。 サービスが大規模になるとこれがパフォーマンス的も良くない感じになる。

そしてもう一つの欠点として退会と復会を繰り返したりユーザ名を変更すると履歴がおえなくなってしまう。
ユーザ名を変更したと思ったらアカウントが消えてしまいました!なんていうユーザからのお問い合わせに対処できない!
0006以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:12:52.656ID:OKauFP2M0
ゲームプログラマーぼく「なにそれ?wwww」
0007以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:12:59.922ID:nWhM8gcw0
>>4
ごめん
CQRSは結構複雑性上がるので全てにたいしてCQRSを適用すべきではないと個人的には思う
CRUDがいい場合もある
0008以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:21:01.827ID:nWhM8gcw0
ここにきてCQRSを語る上でかかせない概念であるイベントソーシングを説明しよう

イベントソーシングはステートソーシングと対になる概念だ!

ステートソーシングはデータを状態として持つことで表現するが、イベントソーシングはイベントを使ってデータを表現する

銀行残高を例に考えてみよう
銀行残高が変動するイベントとしては、入金、送金、出金などが槓が得られる

ステートソーシングの場合はそれらのイベントが起こるたびに一つのレコードを更新する

イベントソーシングの場合はイベントそれぞれを別のモデルに挿入する
現在の残高はイベントモデルを集約するだけでいい

これによってデータを履歴として残すことが可能になり、ユーザーからのお問い合わせにきっちり答えることができるようになるんだ
0010以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:23:17.497ID:RSc45zS60
アイソレーションによるからブロックされると決めつけるのはちょっと
0011以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:25:13.271ID:nWhM8gcw0
イベントとして記録することで様々なイベントが起きても絶対に行がロックされない素晴らしいシステムができた訳だが、これだけだとパフォーマンスはゴミになる

何故なら残高を見るためには複数のレコードを毎回Joinして走査する必要が出てくるためだ!

そこで集約したでーたを記録しておくためのモデルを作ってしまうんだ
イベントが来たら挿入した上で参照用のモデルを更新する
これによって参照時のクエリコストは非常に小さくなる
0012以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:25:39.168ID:nWhM8gcw0
>>10
難しいな
0013以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:26:09.390ID:nWhM8gcw0
>>9
添削してー
0014以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:28:45.085ID:nWhM8gcw0
イベントソーシングにより更新系はイベント用モデル、参照系は参照用モデルに分ける事ができた
0015以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:34:25.540ID:vebWBNFG0
結局それだと参照モデルの更新時にブロック発生せん?
確かに履歴を追えるようになったのはいいけど
0016以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:38:47.449ID:nWhM8gcw0
>>15
たしかに
そもそもロック云々は関係ない説が出てきた
0017以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:39:21.580ID:/Lzlb+w00
具体的に両方の例をSQLで書いてくれ
0018以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/19(月) 00:40:38.399ID:nWhM8gcw0
>>17
ちょっとまってて
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況