数据建模问题

时间:2015-06-23 06:04:16

标签: keen-io

刚开始使用Keen.IO ......非常好的产品。我对数据建模有疑问:

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

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

问题是移动应用每次设备更改位置时都会发送此注册。在某种程度上,它是维护设备的最新位置并跟踪历史变化。我为设备创建了一个新的集合,它似乎没问题,因为我能够select_unique keen.location.coordinates在地图上绘制设备。

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

感谢您的任何指针。

此致 物语

2 个答案:

答案 0 :(得分:1)

技术上可以使用现有的Keen查询类型来根据需要检索设备的最新位置,问题是这样做效率低且不能很好地扩展(主要是因为Keen是designed to store/query event data ,而不是实体数据)。您必须将从select_unique检索到的设备ID插入每个设备的单个查询中,以查找最新位置。这样做会很快对抗concurrency and/or rate limiting

话虽如此,这给你留下了一些选择:

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

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

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

答案 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的结果进行排序 - 但这是一个很好的测试假设。我不明白他们为什么不这样做。