最近、趣味でFirebaseを使ったwebサービス開発を行っています。
現在は、軽量のファイルをアップロードし、ユーザー間で共有するwebサービスを開発中です。
数KBの軽量テキストの場合、データベースであるCloud FirestoreとストレージサービスであるCloud Storageのどちらを利用するべきか迷ったため、調査を行いました。
想定
- Firebaseの無料プラン
- 1ファイルのサイズの平均は5KB程度
- 月間のアクセス数は5000程度
- 多少のwrite/read制御が必要(自分のファイルは更新できる、他人のファイルは閲覧できる)
比較
表にまとめると以下のようになりました。
Firestore | Storage | |
---|---|---|
容量 | 1GB | 5GB |
1ファイルの容量 | 1MiB(binary, string) | 本家は5TB |
帯域幅 | 10GB/月 | |
write | 2万/日 | 2万/日 |
read | 5万/日 | 5万/日 |
delete | 2万/日 | writeに含まれる? |
アクセス制御 | 認証と連動可 | 認証と連動可 |
サイズ制限 | 自前で実装 | 可能 |
暗号化 | デフォルトで有効 | デフォルトで有効 |
複数取得 | 可 | 不可 |
以下で詳細を見ていきたいと思います。
総容量
無料プランでは、firestoreが1GB、storageが5GBとなっています。
まあ、軽量テキストなら1GBでも十分かな?
1ファイルの容量
firestoreが1MiB、storageは(おそらく)5TBです。
firestoreの方をもう少し詳細に述べると、以下のようになります。
- 1ドキュメントのサイズが1MiB未満(ドキュメント = DBのレコード相当)
- string、binary属性は最大1MiBまで
- 1つのドキュメントは複数の属性を持てる
想定ファイルがサイズ以内ならどちらでもよさそうです。
write/read/delete
おそらく大差はなさそうです。
後述の複数取得を行ったとしても、最終的にドキュメント(DBのレコードのようなもの)単位でカウントなので、結局取得するファイルの数だけ、read回数を消費することになりそうです。
アクセス制限
どちらでもユーザーでの認識等は可能なようです。
firestoreの方が属性に含まれるユーザーIDで制御できるので、storageよりっも細かい制御が実施できる印象です。
暗号化
簡単な利用の場合は、差はなさそうです。
複数取得
当然ですが、firestoreの場合はデータベースなので、属性等による検索が実施できます。
まとめ
firestoreでも軽量なファイル(1MiB未満)であれば十分に格納できそうです。
勉強も兼ねて開発中のサービスではfirestoreを採用してみます。