私はこのようなFireBase構造を持っています。私は世界のすべての国を代表したい。この方法を使用するとFireBaseデータベースのレイアウトに問題が生じる可能性がありますか?
このサンプルコードでは、9カ国のみがあり、米国とベネズエラのみが問題を示すデータを持っています。
私は非正規化を行い、可能な限りデータを平坦化します。
US/ADMINISTRATIVE_AREA_LEVEL_1/
US/ADMINISTRATIVE_AREA_LEVEL_2
US/LOCALITY
US/STREET_ADDRESS
....
....
"AE": {
"name": "United Arab Emirates"
},
"GB": {
"name": "United Kingdom"
},
"US": {
"name": "United States"
"ADMINISTRATIVE_AREA_LEVEL_1": {
"hjg86tghg8hubyhiuhb88ihi": {
"level1": "California"
},
},
"ADMINISTRATIVE_AREA_LEVEL_2": {
"hjg86tghg8hubyhiuhb88ihi": {
"level2": "Orange County"
},
},
"LOCALITY": {
"hjg86tghg8hubyhiuhb88ihi": {
"level2": "Orange"
},
},
"STREET_ADDRESS": {
"hjg86tghg8hubyhiuhb88ihi": {
"3138 E Maple Ave": {
}
}
},
"USER_LIST": {
"hjg86tghg8hubyhiuhb88ihi": {
"name": "Jhon Doe",
}
},
"CHAT_LIST": {
"hjg86tghg8hubyhiuhb88ihi": {
"title": "Wam-Bam-CHAT",
}
},
"chat_members": {
"hjg86tghg8hubyhiuhb88ihi": {
}
},
"chat_messages": {
"hjg86tghg8hubyhiuhb88ihi": {
},
},
"UM": {
"name": "United States Minor Outlying Islands"
},
"UY": {
"name": "Uruguay"
},
"UZ": {
"name": "Uzbekistan"
},
"VU": {
"name": "Vanuate"
},
"VE": {
"name": "Venezuela"
"ADMINISTRATIVE_AREA_LEVEL_1": {
"swdkewsjdr34378943489324": {
"level1": "California"
},
},
"ADMINISTRATIVE_AREA_LEVEL_2": {
"swdkewsjdr34378943489324": {
"level2": "Orange County"
},
},
"LOCALITY": {
"swdkewsjdr34378943489324": {
"level2": "Orange"
},
},
"STREET_ADDRESS": {
"swdkewsjdr34378943489324": {
"3138 E Maple Ave": {
}
}
},
"USER_LIST": {
"swdkewsjdr34378943489324": {
"name": "Jhon Doe",
}
},
"CHAT_LIST": {
"swdkewsjdr34378943489324": {
"title": "Wam-Bam-CHAT",
}
},
"chat_members": {
"swdkewsjdr34378943489324": {
}
},
"chat_messages": {
"swdkewsjdr34378943489324": {
},
},
"VN": {
"name": "Viet Nam"
....
....
私はリアルタイムのデータベースルールを作成するには、この好き:何が起こる
は、彼女はそれがこのようになりますの下に、ユーザーがDBに
US/California/Orange County/Orange/3138 E Maple Ave
のように住所を検索することができるということです私は240カ国のために240の根本的な頷きを作成しなければなりません。 全部ADMINISTRATIVE_AREA_LEVEL_1
などが同じように見えるので、".read": "$uid === auth.uid"
の戦利品と重複するjsonの戦利品があります。 もし私がADMINISTRATIVE_AREA_LEVEL_1
をルートとして置くと、私は多分エントリのmiljonsを持っているでしょうし、STREET_ADDRESSのためには、「世界」について語らないために米国だけで1億5400万人があります。だから私はそれらを国の主要ルートノードとしてグループ化します。
小さなサンプル:
{
"rules": {
"SE": {
"ADMINISTRATIVE_AREA_LEVEL_1": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
},
"VE": {
"ADMINISTRATIVE_AREA_LEVEL_1": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
}
私の質問は、私はさらにこれをより効率的にすることができ、どのようなボトルネック(s)は私が期待できる方法です。明示的にすべての場所で
UPDATE それを記述することなく、このような構造を持っており、中央にルールを設定することが方法は、おそらく私はこの誤解しますが、とにかくここに、@FrankvanPuffelen答えた後、私はこれを試している:これを実行するテストする必要がありますしかし、私の上記のコード内のすべての240個の国でこの作品..
{
"rules": {
"$country": {
"ADMINISTRATIVE_AREA_LEVEL_1": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"ADMINISTRATIVE_AREA_LEVEL_2": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"LOCALITY": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
....and more
}
}
}
UPDATEを行い はい、それは少しtweek
{
"rules": {
"$hubaBuba": {
"ADMINISTRATIVE_AREA_LEVEL_1": {
".read": "auth != null",
".write": "auth != null",
},
"ADMINISTRATIVE_AREA_LEVEL_2": {
".read": "auth != null",
".write": "auth != null",
},
"LOCALITY": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
....and more
}
}
で動作します
私は、$ uidが現在のユーザーであることを理解しますが、これはパスを持っている現在のユーザーのことを意味しています: '$ country/ADMINISTRATIVE_AREA_LEVEL_1 /'は 'US/ADMI..'または' SE/ADMI..'または任意の国...とすることができ、Databasはどのように知っていますか? ....この抽象化思考にいくつかの使用を取得:) –