/note/tech

ストレージ周りの制約をぜんぶリポジトリ層に閉じ込められる、モデルのレイヤーはそういうのとは無縁...

ストレージ周りの制約をぜんぶリポジトリ層に閉じ込められる、モデルのレイヤーはそういうのとは無縁でいられるというナイーブなオブジェクト指向感覚。データ量がすごい少ない規模のコーディングしかしたことない、とかでなければそういう考えのままでいられることはない気がするのよな。

@shibu_jp

大規模になればなるほどデータの移動とかフィルタリングとかがボトルネックになるので、データ中心の設計になっていくよね。あとはクラウドネイティブ。うまくスケールするための設計とかも、データ中心設計が必要。RDBを活かすのもNoSQLを活かすのもデータ中心設計が必要。

@shibu_jp

僕は国内で完結するサービスしかやったことないけど、プラネットスケールになると結果整合性をいかに担保するか、みたいな勝負になってやはりデータ中心になるはず。

@shibu_jp

「パフォーマンスのためにシャーディングとか考え出すと、ソフトウェアに対する変更要求はどでかくて大変ですよねーーー」みたいな話を今日ちょうどお客さんと雑談してきたところである。

@shibu_jp

例えば、AWSのAuroraを使ったシステム。今からやろうとしている操作が全部読み込み操作なのか、そうじゃないかで、リードレプリカ側につなぐかプライマリに繋ぐべきかが決まる。リポジトリ層1つで全部隠蔽して解決するには、これから起こる未来のコードを知らないといけないわけだ。

@shibu_jp

少なくとも、リポジトリ層に全部隠蔽できる設計手法は、どう背伸びしても、シャーディングが必要な規模には不可能というわけだ。NoSQL使う場合も、検索条件が増えたりするのに弱いのでそれを踏まえた事前設計が必要でそうでないなら、主キーでデータ取ってくる程度のクエリーしか無理なんじゃないかな

@shibu_jp

MEMO: