3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Firestoreのインデックス除外設定は意味がある

Last updated at Posted at 2019-03-12

Firestoreでデータゴリゴリ作ってたらこんなエラーが出ましたよ。

too many builtin index entries for entity

インデックス作りすぎってこと?一つのドキュメントに大量にデータを登録するというテストを行なっていたのだが、ドキュメントは一つなのでインデックスは増えないと思うんだけどなあ。と思っていましたがどうやらマップの中のフィールドにもインデックスが自動で作成されるもよう。すごい。でもそのせいで制限に引っ掛かる。すごい迷惑。

具体的には以下のようなドキュメントがあった場合、nameやcreatedだけではなく、users[key].idにもusers[key].nameにもusers[key].birthdayにもusers[key].profileにもインデックスが作成されているということ。

{
    "name": "qiita",
    "created": "2019-03-11 20:37:10"
    "users": {
        "user01": {
            id: "user01",
            name: "yuiken",
            birthday: "1970-01-01 00:00:00",
            profile: "すごいけどすごい迷惑"
        },
        "user02": {},
        "user03": {},
        ,,,//たくさんあるということにする
    }
}

なのでusersの中が1000件とかあるとインデックスは1000 x フィールド数になってインデックス多すぎエラーが出てしまう。具体的な上限の数字はわかりませんが今回のテストでは2300 x 8ぐらいで上記のエラーが出ました。

Firebaseのコンソールでインデックスの除外設定が出来るので、usersのフィールド毎に設定します。上記のドキュメントがthreadコレクションにあるとしてusers[key].idのインデックスを設定するには下記のように入力します。

スクリーンショット 2019-03-12 20.41.47.png

これでインデックス多すぎ制限を回避できました。よかったよかった。

これドキュメントあたったわけではなくて、テストしてみたらこういう結果だったという話なので、根拠はこの記事を書いた時の私の体験談のみ。あと、もちろんインデックス削除したら他にもいろいろ影響出ますのでよく考えてからどうぞ。以上よろしく!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?