有没有人对哪种数据模型在Firestore中对时间相关数据有意义有好的想法?
我有很多事件数据,我想存储在Firestore中,然后对其进行分析
每个事件都有一个时间戳,我想运行聚合分析,例如1天的数据,7天的数据,X天的数据,1个月,X个月,等等
如何在firestore中设置,7天的事件数据已经是很多数据了,我不能将其返回给客户端并在那里进行分析。如果我事先在firestore中聚合了一些预定义的天数,那么它将被锁定到这些天数,并且您不能选择任意数量的天数。我还需要在每次有新数据
时不断更新聚合数据。任何帮助都非常感谢!
据我所知,您正在寻找执行类似于以下查询:
SELECT hits, COUNT(*) FROM event_type_api GROUP BY hits WHERE start_date > TODAY - X
Firestore是一个NoSQL数据库,但这并不意味着你不能知道查询中的文档数量。你不能用SQL术语,但是你可以计算它们。如果只读取集合中的所有文档,则开销会有点大。这就是为什么需要调用count()。正如你已经提到的,也没有"分组"。存在于Firestore中。然而,我们可以实现几乎相同的事情。
假设您将创建一个名为"hits"其中存储具有timestamp类型字段的文档,那么您可以执行以下查询:
val queryByTimestamp = db.collection("hits").whereGreaterThan("timestamp", TODAY - X)
如果您想知道查询返回了多少个文档,您需要像这样调用count():
val numberOfDocuments = queryByTimestamp.count()
最后一件事与分组有关。如前所述,Firestore不提供任何聚合查询,如分组。然而,对于这个用例有两种解决方案。您可以获取hits
集合中的所有文档,然后在应用程序代码中按需要的字段对它们进行分组。或者您可以创建预先分组文档的单独集合来满足您的需要。后者是推荐的方法。请记住,当涉及到NoSQL数据库时,复制数据是一种非常常见的做法。