Firebase 在'Group By'运营中效率高吗?



我正在尝试将我的规范化数据模型调整为Firebase友好的数据模型。我的应用程序主要在规范化的表上运行"摘要查询",例如类似于的内容

'SELECT ctryid,avg(年龄(FROM users GROUP BY ctryid'

拥有一个整数ctryid可以极大地加快速度,在我看来,这是因为他必须比较整数ctryid,而不是字符串(USA,FRA,ITA,…(。现在我了解到Firebase可以生成类似"Xj34Fhe2sP0"的密钥。与我的SQL查询相比,这是否意味着效率更低?

这样的查询在Firebase中会是什么样子?我不希望对任何计算结果进行反规范化。

编辑:为了避免代价高昂的联接而取消规范化,意味着在用户对象中也包含ctryname,对吗?

非常感谢。

Firebase在查询中不支持分组子句,也不支持任何其他聚合操作。不过,我认为它生成的密钥并不重要。


我经常建议您对数据库进行建模,以反映您在应用程序屏幕上显示的内容。因此,您的SQL查询似乎提供了一个国家ID列表,其中包含每个国家ID中用户的平均年龄。

如果这就是你想要展示的,可以考虑将这些数据准确地存储在Firebase:中

averageAgeByCountryId: {
"NL": 43.3,
"US": 38.1
}

不写入此数据,您需要在每次向国家/地区写入新用户时更新现有平均值。为了实现这一点,你可能需要存储每个国家的用户总数和他们的总年龄:

averageAgeByCountryId: {
"NL": { userCount: 5, sumOfAge: 217 },
"US": { userCount: 10, sumOfAge: 381 }
}

现在,您仍然可以轻松计算平均年龄,但在这种格式中,在添加用户时更新平均年龄也更容易。

最新更新