刚开始使用Keen.IO…非常好的产品。我有一个关于数据建模的问题:
我正在跟踪具有以下属性的移动应用注册事件:
设备Id,
平台、制造商、营销版本、
语言和
纬度和经度
问题是,每当设备更改位置时,移动应用程序都会发送此注册。在某种程度上,它是为了维护设备的最新位置并跟踪历史变化。我为设备创建了一个新的集合,它看起来很好,因为我可以通过select_unique keen.location.coordinates在地图上绘制设备。
但问题是,我如何知道最新的位置更新?因此,现在我在同一设备的集合中有几个事件(由设备id唯一标识),但无法找到最新的事件!
谢谢你的指点。
你好,哈立德
发布于 2015-06-23 21:37:37
从技术上讲,可以根据需要使用现有的Keen查询类型来检索设备的最新位置,问题是这样做效率低,伸缩性不好(主要是因为Keen是designed to store/query event data,而不是实体数据)。您必须将从select_unique检索到的设备Id插入到每个设备的单独查询中,才能找到最新的位置。这样做会让你很快遇到concurrency and/or rate limiting。
话虽如此,这给你留下了几个选择:
这两个选项中的任何一个都可以工作,这取决于您希望如何在应用程序中实现/管理数据收集。
发布于 2015-06-24 12:06:58
我认为您可以通过将select_unique查询与group_by子句相结合并查看结果中的最后一项来实现这一点。
然而,正如terrhorn所指出的那样,这不是一个可扩展的解决方案。除了仪表板,我不会用它做任何事情。
下面是一个简单的例子:
`var query = new Keen.Query("select_unique", { eventCollection: "devices", targetProperty: "location", group_by: "device_id" });` 结果将如下所示:
`{ "result": [ { "device_id": "4252f729-7bdc-a487-be15-984999a96683", "result": [ "location_1", "location_2" ] } ] }` 注意:这只是理论上的--我不确定Keen是否按照事件发生的顺序对group_by的结果进行了排序--但这是一个很好的测试假设。我不明白他们为什么不这么做。
https://stackoverflow.com/questions/30994990
复制相似问题