Modelização de dados em cassandra para a IOT

Estamos a tentar usar o Apache Cassandra numa aplicação muito baseada no IoT. Estamos planejando criar uma abstração de dispositivo. Qualquer utilizador deve ser capaz de definir um dispositivo com uma série de atributos. Para cada atributo, o usuário deve ser capaz de definir uma série de propriedades como nome , tipo de dados , valor mínimo , valor máximo, etc.

alguns exemplos de dispositivos são dados abaixo

Veículo

o veículo pode ter o seguinte atributos

  1. Velocidade [nome: - velocidade, tipo de dados: - duplo, valor mínimo: - 0, Valor máximo: -300]
  2. Latitude [nome: - Velocidade, dados :- Duplo, mínimo: - - -90, máximo: -90]
  3. Longitude [nome: - Longitude, dados: - Duplo, mínimo: - -180, máximo: - 180]

Sensor De Temperatura

o sensor de temperatura pode ter os seguintes atributos

  1. temperatura actual[nome :- Temperação actual, tipo de dados:- Dupla temperatura , valor mínimo: - 0, Valor máximo: -300]
  2. 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 apreciadas

Author: sam1977, 2016-06-04

3 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:

 1
Author: Dario, 2016-06-13 11:12:45
Definitivamente não cries uma tabela por dispositivo. Imagino que você vai acabar com 100s/1000s de mesas com controle mínimo sobre como elas são modeladas. Cassandra não lida muito welll com isso, uma vez que requer memória para cada tabela, o que irá reduzir a memória disponível para o cache de chaves e linha (se você usá-lo).

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

 1
Author: Kurt, 2016-06-09 14:35:39
Já olhaste para usar os diferentes tipos de dados da colecção em Cassandra para guardar a informação que difere entre os dispositivos?

Https://docs.datastax.com/en/cql/3.0/cql/cql_using/use_collections_c.html

 -1
Author: bechbd, 2016-06-05 12:43:24