2017-02-23 80 views
0

Пользователи всегда отправляют свое местоположение (длинное, лат) в Кассандру, чтобы сохранить свое местоположение в таблице временных рядов.Получить последнее местоположение нескольких пользователей?

CREATE TABLE locations (
    organization_id int, 
    user_id int, 
    date text, 
    unix_time bigint, 
    lat double, 
    long double, 
    PRIMARY KEY ((organization_id, user_id, date), unix_time) 
) WITH CLUSTERING ORDER BY (unix_time DESC); 

Каков совет, когда дело доходит до получения последнего местоположения нескольких пользователей?

Как я буду использовать LIMIT как нечто подобное:

SELECT * from myapp.locations WHERE organization_id=1 and user_id in (15,16, 17, 18, 19, 20) and date='2017-2-23' LIMIT 6; 

Что делать, если последние 6 записей принадлежит к одному пользователю? таким образом, не будет получать последние местоположения других пользователей.

Создать другую таблицу, которая хранит только одно местоположение каждого пользователя? и продолжать обновлять местоположение каждого пользователя в нем?

Какой совет здесь?

+0

Какой язык программирования вы используете? Ява ? –

+0

Elixir, основанный на Erlang – simo

+0

Есть ли какой-либо executeAsync для выполнения запроса в Elixir? –

ответ

0

Вы должны запросить каждого пользователя с помощью executeAsync и затем слить результат.

Для каждого пользователя использовать этот запрос, чтобы получить свое последнее место:

SELECT * from myapp.locations WHERE organization_id=1 and date='2017-2-23' and user_id = ? LIMIT 1 

и выполнить это с помощью executeAsync, а затем объединить результат

Если вы сделаете отдельную таблицу, необходимо разделить его с помощью userid, тогда вам нужно сделать запрос с userid, который медленнее, для более быстрого вы должны сделать отдельный запрос с помощью executeAsync для каждого пользователя в этой таблице.

Также есть еще одна вещь, место будет обновляться чаще, поэтому каждое обновление Кассандры нужно будет делать больше работы по уплотнению, может замедлить производительность

+0

Итак, как вы думаете, это лучше, чем наличие другой таблицы с обновленными локациями? – simo

+0

спасибо за ответ, я покажу вам код эликсира, когда это будет сделано :) – simo

+0

Но как насчет случаев, когда нам нужно делать частые обновления? – simo