2016-04-26 2 views
0

Im в настоящее время изучает apache cassandra и им новый в nosql моделировании данных. В тот момент им пытаются построить систему, где у меня есть следующие поля:Запрос данных моделирования данных Cassandra

latitude | time_forecast  | longitude | forecast_request | rh     | swflx    | temp 
----------+---------------------+------------+------------------+--------------------+--------------------+-------------------- 
    41.45 | 2016-04-26 17:00:00 | -8.6166667 | 2016-04-26_0000 | 0.6161368489265442 | 397.4789733886719 | 290.44512939453125 
    41.45 | 2016-04-26 18:00:00 | -8.6166667 | 2016-04-26_0000 | 0.673031210899353 | 261.1000061035156 | 289.3315734863281 
    41.45 | 2016-04-26 19:00:00 | -8.6166667 | 2016-04-26_0000 | 0.8489508032798767 | 27.700000762939453 | 286.8634948730469 
    41.25 | 2016-04-26 17:00:00 | -8.6166667 | 2016-04-26_0000 | 0.6555368900299072 | 395.1789855957031 | 289.8011169433594 
    41.25 | 2016-04-26 18:00:00 | -8.6166667 | 2016-04-26_0000 | 0.7271312475204468 | 203.39999389648438 | 288.5975646972656 
    41.25 | 2016-04-26 19:00:00 | -8.6166667 | 2016-04-26_0000 | 0.8572507500648499 | 30.989999771118164 | 286.7254943847656 
    41.456 | 2016-04-26 17:00:00 | -8.6166667 | 2016-04-26_0000 | 0.6161368489265442 | 397.4789733886719 | 290.44512939453125 
    41.456 | 2016-04-26 18:00:00 | -8.6166667 | 2016-04-26_0000 | 0.673031210899353 | 261.1000061035156 | 289.3315734863281 
    41.456 | 2016-04-26 19:00:00 | -8.6166667 | 2016-04-26_0000 | 0.8489508032798767 | 27.700000762939453 | 286.8634948730469 

Это, как я создал таблицу:

create table if not exists forecast 
( 
    latitude varchar, 
    longitude varchar, 
    time_forecast varchar, 
    forecast_request varchar,  
    swflx varchar,  
    temp varchar, 
    rh varchar, 

    PRIMARY KEY(latitude, time_forecast, longitude) 
) 

WITH CLUSTERING ORDER BY (time_forecast ASC); 

С помощью этой модели, time_forecast не может быть моим основным потому что он не будет уникальным.

Это был единственный способ, которым я мог вставлять данные без создания upserts, но проблема, с которой сталкивается сейчас, заключается в том, что я не могу запросить базу данных только time_forecast.

В этом примере для каждой координаты (широта и долгота) im создается прогноз на следующие 3 часа, и я не могу избежать использования сложного ключа.

Как бы вы смоделировали базу данных так, чтобы я мог получить координаты и переменные только из диапазона time_forecast значение?

+0

Вы заглянули в [timeuuid] (https://docs.datastax.com/en/cql/3.3/cql /cql_reference/uuid_type_r.html) тип данных? Используя этот тип, вы можете сделать свои временные метки уникальными и использовать их в качестве первичного ключа. – Ralf

ответ

1

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

create table if not exists forecast 
( 
    location text, 
    latitude varchar, 
    longitude varchar, 
    time_forecast varchar, 
    forecast_request varchar,  
    swflx varchar,  
    temp varchar, 
    rh varchar, 

    PRIMARY KEY((location), time_forecast) 
) WITH CLUSTERING ORDER BY (time_forecast ASC); 

Тогда вы можете запросить по диапазоне time_forecast:

SELECT * FROM forecast 
WHERE location = 'California' 
AND time_forecast >= 'xxx' 
AND time_forecast <= 'yyy'; 
+0

Да, хорошее решение! Если бы я захотел выполнить поиск по определенной широте или долготе, думаю, мне нужно было бы построить еще одну таблицу? Ты думаешь? –

+0

Да, для поиска по широте или долготе вы можете: 1) денормализовать вручную с помощью другой таблицы 2) Использовать материализованные виды для автоматической денормализации – doanduyhai

+0

Это очень мощный материал. Могу ли я спросить вас, между InfluxDB или Cassandra, лично, что бы вы выбрали для обработки огромного количества данных, в основном, прогнозов погоды по временным рядам? –

Смежные вопросы