げぇむぷろぐらみんぐ

日々の生活で得た知識、経験を書きます

Firebase Cloud FirestoreとRealTimeDatabaseの違いを調べた

何かを調べたときにまとめながらのほうが勉強になるし、忘れても取り出せるようにしておきたいので、これからは気が向いたら調べたことをまとめます。 完全に自分用メモのため雑です。

Firebase Cloud Firestore

今まで使ってみてたのがFirebaseのRealTimeDatabaseでした。 Cloud FirestoreはRealTimeDatabaseよりも新しく、なんか強いらしいので、どんな違いがあるのか調べてみました。

データの持ち方

RealTimeDatabaseは、データ全体をJSONのツリーとして保持する。 すべてのデータはキーと対となる値を持ち、それが階層構造になって保持される。

具体的に例を出すと、以下のようになる。

{
    "users": {
        "hoge": {
            "firstname": "hoge",
            "lastname": "maru",
            "age": 14
        },
        "taro": {
            "firstname": "taro",
            "lastname": "jiro",
            "age": 21
        }
    }
}

上記のように、全てがキーと対となる値を持っており、その値の型はノードごとに異なっている。

参考: データベースの構造化  |  Firebase Realtime Database  |  Firebase

対して、Cloud Firestoreは、ドキュメント指向データベースであり、データはコレクションとドキュメントとフィールドからなる。 コレクションは、ドキュメントを保持し、ドキュメントはフィールドを保持するような階層型のデータ構造となっている。 コレクションがフィールドを持つことはできないが、ドキュメントがコレクションをサブコレクションとして持つことはできる。

具体的に例を出すと以下のようになる。

chatrooms(Col)
    roomA(Doc)
        name: "hoge"
        messages(Col)
            message1(Doc)
                "title": "fuga"

サブコレクションを使用すると、ドキュメント内のデータをまとめられるので、データが取りやすくなるらしい。

参考:

firebase.google.com

スケーラビリティ

RealTimeDatabaseは、一つのDBで10万件までで、それ以上はシャーディングが必要となる。 対して、Cloud Firestoreは自動でスケーリングされる。

Unityで使えるかどうか

RealTimeDatabaseはUnity用のSDKが公開されているため、利用可能となっている。

firebase.google.com

対して、Cloud FirestoreはSDKが公開されておらず、そのままでは利用できない。 そのため、Cloud Functions経由で操作することになるらしい。(対応してほしい…)

まとめ

RealTimeDatabaseに対して、Firestoreのほうがデータを綺麗に保持できそうな作りだと思いました。 とりあえず、普通に今後使う分にはFirestoreで良いのかな。 早くUnityに対応したSDKを出してほしいなあ。 Unity対応のSDKが出たらまた使ってみた記事を書こうと思います。

参考:

firebase.google.com

developers-jp.googleblog.com