どのようにS3オブジェクトを検索するか?

Updated: / Reading time: 2 minutes

S3オブジェクトのメタデータ管理、および検索手段のメモ。

何をしたいのか

S3には様々なデータを格納できますが、その構造は基本的にフラットです。また、メタデータにいろいろ設定することはできますが、変更はできません。

例えば、マルチバイト文字を名前に持つファイルをアップロードしたいと思いますが、その名前のままアップロードするのは避けたいです。この時、オブジェクトキー名はUUIDなどにして実際のファイル名は別データとして持っておき、S3オブジェクトを検索するときは別データを検索する、というような構造にしたいです。場合によっては、S3オブジェクトにタグなどの属性情報を持ちたいかもしれません。

こういう場合、どのような手段があるかを考えていたところ、以下の記事を見つけました。

How do you search an amazon s3 bucket?

How do you search an amazon s3 bucket? - Stack Overflow

このQAで、以下のような手段が提案されています。

  • キー名のパターン検索
  • メタデータ検索
  • メタデータをSimpleDBに格納
  • コンテンツを全文検索

私がやりたいことは、「メタデータ検索」または「メタデータをSimpleDBに格納」に近いと思います。

どうしようか…

実はS3ではなく、自宅サーバーのMinioを使っているので、少々、状況が異なります。個人ツールで既にこのような状況があり、現時点では、コンテンツ(xxx.data)とメタデータ(xxx.meta)を別のオブジェクトで格納しており、検索するときは全メタデータを検索しています。が、上記のQAを参照して、メタデータはDBMSに格納しようと思いました。やはりデータ管理はデータ構造に合わせて選択すべきですね。コンテンツとメタデータの管理システムが異なることに懸念がありますが…