1

刚开始使用 Keen.IO……非常好的产品。我有一个关于数据建模的问题:

我正在跟踪具有以下属性的移动应用注册事件:

设备 ID、
平台、制造商、营销版本、
语言和
经纬度

问题在于,每次设备更改位置时,移动应用都会发送此注册信息。在某种程度上,它是保持设备最新位置并跟踪历史变化。我为设备创建了一个新集合,这似乎没问题,因为我可以选择_unique 敏锐的位置坐标来在地图上绘制设备。

但问题是我怎么知道最新的位置更新?所以现在我在同一设备的集合中有几个事件(由设备 ID 唯一标识),但无法找到最新的!

感谢您的任何指示。

问候, 哈立德

4

2 回答 2

1

从技术上讲,可以根据需要使用现有的 Keen 查询类型来检索设备的最新位置,问题是这样做效率低且不能很好地扩展(主要是因为 Keen旨在存储/查询事件数据,而不是实体数据)。您必须将从 select_unique 检索到的设备 ID 插入到每个设备的单独查询中,才能找到最新位置。这样做会使您很快遇到并发和/或速率限制。

话虽如此,这给您留下了几个选择:

  1. 使用 Keen 的 S3 集成。此功能将您的所有原始事件写入 S3 以供使用,但您认为合适。您可以使用此数据创建到单独的实体数据库的管道,这将允许您检索设备的最新位置。注意:此功能需要额外收费。

  2. 在将事件发送到 Keen 的同时,将设备/位置数据发布到单独的实体数据库,并将该数据库用作设备最新位置的来源。

这些选项中的任何一个都可以使用,这取决于您希望如何在应用程序中实现/管理数据收集。

于 2015-06-23T13:37:37.110 回答
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事件发生的顺序对结果进行排序——但这是一个很好的测试假设。我不明白他们为什么不这样做。

于 2015-06-24T04:06:57.817 回答