メタデータ
2024-11-15
データは通常DBに格納するのが一般的です。しかし、データが大きくてデータの本体をDBに永続化してしまうと、パフォーマンスやコスト的によろしくないといった場合もあります。
その場合、データ本体はオブジェクトストレージ等にファイルとして保存しておいて、メタデータのみをDBに保存するといったやり方が考えられます。
例えば、なんらかの記事を投稿できるようなサービスを考えてみましょう。 この記事投稿サービスの主要なクラスはArticleになるはずです。
このようなクラス設計を行うのが一般的ですが、bodyの部分がだいぶ大きな文字列となってしまうため、永続化の際にはbodyのみを別の場所に保存したいです。
この場合、bodyの代わりにbodyを取得するためのUrlやストレージのKeyを持たせるのがいいでしょう。
bodyUriを持たせることで、bodyを取得することができるようになります。またbodyはnullableにして残してあります。
これは、記事一覧を取得する際に、Articleのメタデータであるタイトルや作成日のみを取得したいユースケースが存在するからです。 そのようなケースがない場合、nullableにしなくても良いでしょう。
永続化はRepositoryを通して行います。 Repositoryにより永続化を行う際に、bodyのストレージへの保存を行います。 またデータを取得する際には、記事ファイルをストレージから取得してArticleのbodyにつけてあげます。
こうすることで永続化の仕組みが隠蔽され、あたかも普通に全てDBに保存してあるかのようにArticleを利用できます。
タグ
そらえふ
ソフトウェアエンジニア。趣味は競馬、写真、ゲーム。
お問い合わせはXのDMでお願いします。