刚开始使用Keen.IO ......非常好的产品。我对数据建模有疑问:
我正在跟踪具有以下属性的移动应用注册事件:
设备ID,
平台,
制造商,
营销版,
语言和
纬度和经度
问题是移动应用每次设备更改位置时都会发送此注册。在某种程度上,它是维护设备的最新位置并跟踪历史变化。我为设备创建了一个新的集合,它似乎没问题,因为我能够select_unique keen.location.coordinates在地图上绘制设备。
问题是我怎么知道最新的位置更新?所以现在我在同一设备的集合中有几个事件(由设备ID唯一标识),但无法找到最新的!
感谢您的任何指针。
此致 物语
答案 0 :(得分:1)
技术上可以使用现有的Keen查询类型来根据需要检索设备的最新位置,问题是这样做效率低且不能很好地扩展(主要是因为Keen是designed to store/query event data ,而不是实体数据)。您必须将从select_unique检索到的设备ID插入每个设备的单个查询中,以查找最新位置。这样做会很快对抗concurrency and/or rate limiting。
话虽如此,这给你留下了一些选择:
使用Keen的S3集成。此功能会将您的所有原始事件写入S3以供使用,但您认为合适。您可以使用此数据创建到单独实体数据库的管道,以便您检索设备的最新位置。注意:此功能需要额外收费。
在您将事件发送给Keen的同时将设备/位置数据发布到单独的实体数据库,并将该数据库用作设备的最新位置。
这些选项都可以使用,它只取决于您希望如何在应用程序中实现/管理数据收集。
答案 1 :(得分:0)
我认为您可以通过将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
的结果进行排序 - 但这是一个很好的测试假设。我不明白他们为什么不这样做。