Modelização de dados em cassandra para a IOT
alguns exemplos de dispositivos são dados abaixo
VeÃculo
o veÃculo pode ter o seguinte atributos
- Velocidade [nome: - velocidade, tipo de dados: - duplo, valor mÃnimo: - 0, Valor máximo: -300]
- Latitude [nome: - Velocidade, dados :- Duplo, mÃnimo: - - -90, máximo: -90]
- Longitude [nome: - Longitude, dados: - Duplo, mÃnimo: - -180, máximo: - 180]
Sensor De Temperatura
o sensor de temperatura pode ter os seguintes atributos
- temperatura actual[nome :- Temperação actual, tipo de dados:- Dupla temperatura , valor mÃnimo: - 0, Valor máximo: -300]
- Unidade [nome: - unidade, datatype: - string]
em tempo real, cada dispositivo irá enviar dados como pares de valores-chave .
Para ex:- A o veÃculo pode enviar os seguintes dados
Tempo: - 6/4/2016 11: 15: 15.150, Latitude: - -1.256, Longitude: - -180.75, Velocidade: - 50
Tempo :- 6/4/2016 11:15:16.150 , Latitude : -1.257 , Longitude :- -181.75, Velocidade :- 51
Para ex:- sensor de temperatura pode enviar os seguintes dados
Tempo: - 6/4/2016 11: 15: 15.150, temperatura actual: 100, unidade: farenheit
Tempo :- 6/4/2016 11:15:16.150 , Latitude : 101 , Unidade : farenheit
Uma vez que os atributos de diferentes dispositivos podem ser diferentes , estamos confusos sobre como o modelo das tabelas em cassandra... Algumas das opções que vieram à mente são Criar uma tabela para um dispositivo, ou criar uma única tabela e armazenar os valores em tipos de dados de mapa... Estamos um pouco confusos que abordagem deve ser adoptada... Todas as sugestões são apreciadas3 answers
Acho que a melhor opção é criar apenas uma tabela com um esquema de propósito geral para a recolha de dados time-serie.
Exemplo CQL:
CREATE TABLE timeline (
device uuid,
time timeuuid,
key text,
value blob,
…
PRIMARY KEY ((device, key), time)
);
Os valores podem ser armazenados como blob (serialização personalizada), map ou escalares numéricos, dependendo dos padrões de acesso de caso e dados da sua aplicação (como ler/escrever/apagar e se planeia suportar actualizações).
Para que saibas, dados úteis relacionados postam sobre séries cronológicas modelo:
O método do mapa pode ser viável, no entanto, há algumas coisas a considerar antes de seguir por esse caminho:
Um dispositivo receberá actualizações frequentes e como vai atualizá-lo? Se você está planejando atualizar cada elemento do mapa, você terá que atualizar cada elemento individualmente. A razão para isso é que overwrites em coleções em Cassandra irá criar uma lápide range para cada sobreposição. Se frequentemente sobrescrever, então você vai acabar com milhões de lápides, o que provavelmente não vai acabar por ser compactado longe tão eficientemente como você gostaria. Isto pode ser evitado usando um tipo JSON em vez disso, e processá - lo em seu aplicacao.
Você precisa considerar como os dados serão questionados também, se você quiser que os usuários sejam capazes de consultar sobre os dados no mapa ele pode ficar um pouco mais complicado. Eu acho que você seria melhor ter um único método de questionar independentemente do tipo de dispositivo e, em seguida, extrair detalhes em sua aplicação. No entanto, isso depende de você e é praticamente a força motriz para a forma como você Estrutura seus dados. O melhor conselho que posso dar é tentar evitar a criação de demasiadas mesas., e também ter cuidado de dar aos seus usuários um monte de controle sobre a estrutura de dados, como é muito fácil de fazer mal e causar problemas de desempenho no cluster.
Se você ainda não o fez, dê a este blog Uma leitura - ele aponta os elementos básicos do design do modelo de dados que você precisa acertar ao usar Cassandra. http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling
Https://docs.datastax.com/en/cql/3.0/cql/cql_using/use_collections_c.html