Firebase 在 'Group By' 操作中是否高效?
Is Firebase efficient in 'Group By' operations?
我正在尝试使我的规范化数据模型适应 Firebase 友好的数据模型。
我的应用程序主要在规范化表上运行 'summary queries',例如类似的东西:
'SELECT ctryid, avg(age) FROM users GROUP BY ctryid'
拥有一个整数 ctryid 可以极大地加快速度,
在我看来,这是因为他必须比较整数 ctryid,而不是字符串(美国、法国、意大利、...)。
现在我了解到 Firebase 生成像 'Xj34Fhe2sP0' 这样的键。与我的 SQL 查询相比,这是否确实意味着效率较低?
这样的查询在 Firebase 中会是什么样子?我不想对任何计算结果进行非规范化。
编辑:为了避免代价高昂的连接而进行非规范化,这意味着在用户对象中也包括 ctryname 对吗?
非常感谢。
Firebase 不支持其查询中的 group-by 子句,也不支持任何其他聚合操作。我不认为它生成的密钥非常重要。
我经常建议您对数据库建模以反映您在应用程序屏幕中显示的内容。因此,您的 SQL 查询似乎提供了国家 ID 列表以及每个国家 ID 中用户的平均年龄。
如果这就是您要显示的内容,请考虑在 Firebase 中准确存储该数据:
averageAgeByCountryId: {
"NL": 43.3,
"US": 38.1
}
不要写入此数据,您需要在每次将新用户写入某个国家/地区时更新现有平均值。为此,您可能需要存储每个国家/地区的用户总数及其总年龄:
averageAgeByCountryId: {
"NL": { userCount: 5, sumOfAge: 217 },
"US": { userCount: 10, sumOfAge: 381 }
}
现在您仍然可以轻松计算平均年龄,但在这种格式下,添加用户时更新平均年龄也更容易。
我正在尝试使我的规范化数据模型适应 Firebase 友好的数据模型。 我的应用程序主要在规范化表上运行 'summary queries',例如类似的东西:
'SELECT ctryid, avg(age) FROM users GROUP BY ctryid'
拥有一个整数 ctryid 可以极大地加快速度, 在我看来,这是因为他必须比较整数 ctryid,而不是字符串(美国、法国、意大利、...)。 现在我了解到 Firebase 生成像 'Xj34Fhe2sP0' 这样的键。与我的 SQL 查询相比,这是否确实意味着效率较低?
这样的查询在 Firebase 中会是什么样子?我不想对任何计算结果进行非规范化。
编辑:为了避免代价高昂的连接而进行非规范化,这意味着在用户对象中也包括 ctryname 对吗?
非常感谢。
Firebase 不支持其查询中的 group-by 子句,也不支持任何其他聚合操作。我不认为它生成的密钥非常重要。
我经常建议您对数据库建模以反映您在应用程序屏幕中显示的内容。因此,您的 SQL 查询似乎提供了国家 ID 列表以及每个国家 ID 中用户的平均年龄。
如果这就是您要显示的内容,请考虑在 Firebase 中准确存储该数据:
averageAgeByCountryId: {
"NL": 43.3,
"US": 38.1
}
不要写入此数据,您需要在每次将新用户写入某个国家/地区时更新现有平均值。为此,您可能需要存储每个国家/地区的用户总数及其总年龄:
averageAgeByCountryId: {
"NL": { userCount: 5, sumOfAge: 217 },
"US": { userCount: 10, sumOfAge: 381 }
}
现在您仍然可以轻松计算平均年龄,但在这种格式下,添加用户时更新平均年龄也更容易。