Проблема моделирования данных
Только начал использовать Keen.IO... очень хороший продукт. У меня есть вопрос, пожалуйста, о моделировании данных:
Я отслеживаю события регистрации мобильного приложения, которые имеют следующие атрибуты:
Идентификатор устройства,
Платформа, Производитель, Маркетинговая версия,
Язык и
Широта и долгота
Проблема в том, что мобильное приложение отправляет эту регистрацию каждый раз, когда устройство меняет местоположение. В некотором смысле, это сохранить последнее местоположение устройства и отслеживать исторические изменения. Я создал новую коллекцию для устройств, и, кажется, все в порядке, поскольку я могу выбрать координаты keen.location.coordinate для рисования устройств на карте.
Вопрос, однако, в том, откуда мне знать последнее обновление местоположения? Так что теперь у меня есть несколько событий в коллекции для одного и того же устройства (однозначно идентифицируется идентификатором устройства), но я не могу найти последнюю версию!
Спасибо за любой указатель.
С уважением, Халед
2 ответа
Технически возможно использовать существующие типы запросов Keen для получения последней позиции устройства, как вам требуется, проблема в том, что это неэффективно и плохо масштабируется (в основном потому, что Keen предназначен для хранения / запроса данных о событиях, а не объекта). данные). Вам нужно будет подключить идентификатор устройства, который вы извлекаете из select_unique, в отдельные запросы для каждого устройства, чтобы найти последнее местоположение. Это может довольно быстро натолкнуть вас на параллелизм и / или ограничение скорости.
Это, как говорится, оставляет вам несколько вариантов:
Используйте интеграцию Keen S3. Эта функция записывает все ваши необработанные события в S3 для потребления, как вы считаете нужным. Вы можете использовать эти данные для создания конвейера в отдельную базу данных сущностей, которая позволит вам получить последнее местоположение устройства. Примечание. За эту функцию взимается дополнительная плата.
Отправляйте данные устройства / местоположения в отдельную базу данных объектов одновременно с отправкой события в Keen и используйте эту базу данных в качестве источника последнего местоположения устройства.
Любой из этих вариантов будет работать, это зависит только от того, как вы хотите реализовать / управлять сбором данных в вашем приложении.
Я думаю, что вы можете достичь этого, сочетая select_unique
запрос с group_by
пункт и глядя на последний пункт в результате.
Хотя, как отметил Террхорн, это не масштабируемое решение. Я бы не использовал его ни для чего, кроме приборной панели.
Вот быстрый пример:
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"
]
}
]
}
ПРИМЕЧАНИЕ: это теоретическое - я не уверен, что Кин сортирует результат group_by
по порядку поступления событий или нет - но это хорошее предположение для проверки. Я не понимаю, почему они не будут.