そらえふのブリキ

メタデータ

データは通常DBに格納するのが一般的です。しかし、データが大きくてデータの本体をDBに永続化してしまうと、パフォーマンスやコスト的によろしくないといった場合もあります。

その場合、データ本体はオブジェクトストレージ等にファイルとして保存しておいて、メタデータのみをDBに保存するといったやり方が考えられます。

例えば、なんらかの記事を投稿できるようなサービスを考えてみましょう。 この記事投稿サービスの主要なクラスはArticleになるはずです。

Article

+ String title

+ String body

+ DateTime createdAt

+ DateTime updatedAt

このようなクラス設計を行うのが一般的ですが、bodyの部分がだいぶ大きな文字列となってしまうため、永続化の際にはbodyのみを別の場所に保存したいです。

この場合、bodyの代わりにbodyを取得するためのUrlやストレージのKeyを持たせるのがいいでしょう。

Article

+ String title

+ Uri bodyUri

+ String? body

+ DateTime createdAt

+ DateTime updatedAt

bodyUriを持たせることで、bodyを取得することができるようになります。またbodyはnullableにして残してあります。

これは、記事一覧を取得する際に、Articleのメタデータであるタイトルや作成日のみを取得したいユースケースが存在するからです。 そのようなケースがない場合、nullableにしなくても良いでしょう。

永続化はRepositoryを通して行います。 Repositoryにより永続化を行う際に、bodyのストレージへの保存を行います。 またデータを取得する際には、記事ファイルをストレージから取得してArticleのbodyにつけてあげます。

こうすることで永続化の仕組みが隠蔽され、あたかも普通に全てDBに保存してあるかのようにArticleを利用できます。

そらえふ

ソフトウェアエンジニア。趣味は競馬、写真、ゲーム。

お問い合わせはXのDMでお願いします。