我们很难在Cloud Firestore中找到一种有效的方法来处理以下问题,并且将不胜感激所有建议!
我们有一棵深层次树,假设有文档A,B,C和D。A包含一些B,其中B包含C,而C包含D。每个文档都有用于其子集合的字段,以及在树中指向其父项的引用“后向指针”。因此,您可以像A.B.C.D一样沿着树下走,然后还可以通过概念上的D.C.B.A.来将树恢复到A。
我们遇到的问题是,我们需要有效地查询“ A中的所有D”。理想情况下,我们可以在概念上做类似select all D where D.C.B.A = 'some A'
的事情。
有效处理此问题的最佳方法是什么?此时,我们愿意在必要时获得一些帮助,因为这是我们应用程序的核心用例,并且在Cloud Firestore中还没有找到任何可行的解决方案。
我们很难在Cloud Firestore中找到一种有效的方法来处理以下问题,并且将不胜感激所有建议!
我们有一棵深层次树,假设有文档A,B,C和D。A包含一些B,其中B包含C,而C包含D。每个文档都有用于其子集合的字段,以及在树中指向其父项的引用“后向指针”。因此,您可以像A.B.C.D一样沿着树下走,然后还可以通过概念上的D.C.B.A.来将树恢复到A。
我们遇到的问题是,我们需要有效地查询“ A中的所有D”。理想情况下,我们可以在概念上做类似select all D where D.C.B.A = 'some A'
的事情。
有效处理此问题的最佳方法是什么?此时,我们愿意在必要时获得一些帮助,因为这是我们应用程序的核心用例,并且在Cloud Firestore中还没有找到任何可行的解决方案。
很抱歉,您可以使用通用字母叠加汤。我们的数据模型很大而且很复杂,我试图避免陷入困境(并发布不允许的代码/模型)。但是我至少可以给出一个更好的类比。此地理模型伪代码与我们的用例非常相似:
class Country
{
List<State> states;
President currentPresident;
}
class State
{
List<City> cities;
Country parentCountry;
string governor;
}
class City
{
List<Person> persons;
State parentState;
string mayor;
}
class Person
{
City city;
string name;
}
然后,我们需要能够运行以下查询:
-“让所有居住在X国的人”
-“让所有人民生活在Y市长管辖的城市中”
理想情况是能够说“选择City.State.Country =='someCountry'的所有人”。
我们意识到我们可以将引用拼合为Person。但是,我们有大量(而且可能还会增加)用于通过不同标准“切片和切块”人员的引用。而且,如果有数以千万计的人(在我们的实际数据库中就是这种情况),那么所有这些扁平化的引用似乎都不高效。以我们的类比,诸如州或国家之类的东西不只是一个字符串或简单的对象,它会有许多字段,这些字段可能用于 过滤人员。
只要它意味着更好的Firestore性能,只要它并不意味着完全打破数据的直观且可维护的组织,我们就愿意对模型进行重组。
再次感谢您的想法!
答案 0 :(得分:0)
“然后我们需要能够运行以下查询: -“让所有居住在X国的人” -“让所有人民生活在Y市长管辖的城市中””
这样重塑一下
创建许多Person
集合,称为:
- PersonCity
- PersonCountry
- PersonState
我认为扁平化是关键,而云中的空间便宜。 然后,在创建一个人时,必须两次保存一些数据
另一种想法是,这取决于查询的复杂程度,例如查询是否仅包含一个或多个字段,则像这样创建Collections
- PersonQueryOneField
- Name "oskar"
- City "miami"
- PersonQueryTwoField
- Name "oskar"
- City "miami"
- Country "usa"
- PersonQueryThreeField
- Name "oskar"
- City "miami"
- Country "usa"
- State "florida"
- PersonQueryTenField
- Name "oskar"
- City "miami"
- Country "usa"
- State "florida"
- Age "7"
- Length "98cm"
- Gender "boy"
- Extra1 "na"
- Extra2 "na"
- Extra3 "na"
也许PersonQueryTwoField
上的大多数查询都可以更快地获取数据,
空间便宜!
只是一个想法!