Pergunta

Eu estou tentando descobrir exatamente o que estes novos armazenamentos de dados fangled tais como o Bigtable, HBase e Cassandra realmente são.

Eu trabalho com grandes quantidades de dados do mercado de ações, bilhões de linhas de dados preço / citação que pode adicionar até 100s de gigabytes por dia (embora esses arquivos de texto frequentemente compressa por pelo menos uma ordem de magnitude). Esta informação é, basicamente, um punhado de números, duas ou três cadeias curtas e um marcador de tempo (geralmente nível milissegundo). Se eu tivesse que escolher um identificador único para cada linha, eu teria que pegar a linha inteira (desde uma troca pode gerar vários valores para o mesmo símbolo no mesmo milissegundo).

Eu suponho que a maneira mais simples para mapear esses dados para bigtable (estou incluindo seus derivados) é pelo nome do símbolo e da data (que pode retornar uma série muito grande de tempo, mais de milhões de pontos de dados não é inédito). Da leitura suas descrições, parece que várias chaves podem ser usadas com esses sistemas. Eu também estou supondo que os números decimais não são bons candidatos para chaves.

Alguns destes sistemas (Cassandra, por exemplo) afirma ser capaz de fazer consultas alcance. Eu seria capaz de eficientemente consulta, por exemplo, todos os valores para MSFT, para um determinado dia, 11:00 - 13:30?

E se eu quiser pesquisar em todos os símbolos para um determinado dia, e solicitar todos os símbolos que têm um preço entre US $ 10 e US $ 10,25 (por isso estou pesquisando os valores, e quer chaves devolvidas como resultado)?

E se eu quiser obter duas vezes série, subtrair um do outro, e retornar as duas séries vezes e seu resultado, eu vou ter que fazer a sua lógica no meu próprio programa?

Leitura papéis relevantes parece mostrar que esses sistemas não são um ajuste muito bom para os sistemas de séries temporais maciços. No entanto, se os sistemas tais como mapas do Google são baseados neles, acho séries temporais devem funcionar tão bem. Por exemplo, pensar no tempo como o eixo x, os preços como eixo y e símbolos como locais nomeados -, de repente, parece que bigtable deve ser a loja ideal para a série de tempo (se a terra inteira pode ser armazenada, recuperada , ampliada e anotado, os dados do mercado de ações deve ser trivial).

Pode algum momento me especialista na direção certa ou esclarecer quaisquer mal-entendidos.

Graças

Foi útil?

Solução

Eu não sou um expert , mas eu tenho jogado com Cassandra por alguns dias agora, e eu tenho algumas respostas para você:

  1. Não se preocupe com quantidade de dados, é irrelevante com sistemas como Cassandra, se você tiver $$$ para um cluster de hardware grande.

Alguns destes sistemas (Cassandra, por exemplo) afirma ser capaz de fazer consultas alcance. Eu seria capaz de eficientemente consulta, por exemplo, todos os valores para MSFT, para um determinado dia, 11:00 - 13:30?

Cassandra é muito útil quando você sabe como trabalhar com chaves. Pode rápida por meio de chaves muito rapidamente. Então, para procurar MSFT 11:00-01:30, você teria que digitar suas linhas como esta:

MSFT-timestamp, GOOG-timestamp, .etc Então você pode dizer Cassandra para encontrar todas as chaves que começam com MSFT-agora e final com MSFT-agora + 1 hora.

E se eu quiser pesquisar em todos os símbolos para um determinado dia, e solicitar todos os símbolos que têm um preço entre US $ 10 e US $ 10,25 (por isso estou pesquisando os valores, e quer chaves devolvidas como resultado)?

Eu não sou um especialista, mas até agora eu percebi que Cassandra não' procurar por valores em tudo. Então, se você quer fazer o acima, você terá que fazer outra mesa dedicada apenas a este problema e projetar seu esquema para atender o caso. Mas não vai ser muito diferente do que eu descrevi acima. É tudo sobre a nomeação de suas chaves e colunas. Cassandra pode encontrá-los muito rapidamente!

E se eu quiser obter duas vezes série, subtrair um do outro, e retornar as duas séries vezes e seu resultado, eu vou ter que fazer a sua lógica no meu próprio programa?

Correto, toda a lógica é feito dentro do seu programa. Este não é MySQL. Este é apenas um mecanismo de armazenamento. (Mas tenho a certeza as próximas versões irão oferecer este tipo de coisas)

Por favor, lembre-se, que eu sou um novato nisso, se eu estiver errado, não hesite em me corrigir.

Outras dicas

Se você está lidando com um enorme banco de dados de séries temporais, em seguida, os padrões são:

Estes não são baratos, mas eles podem lidar com os seus dados de forma muito eficiente.

Alguém a quem eu respeito recomendou a Open Database Time Series. Em particular, que o esquema foi o mais bonito que já tinha visto.

http://opentsdb.net/

'Am pé na frente da mesma montanha. Meu principal problema com Cassandra é que eu não posso obter um fluxo no conjunto de resultados, por exemplo na forma de um iterador.

Eu estou procurando já cima e para baixo os docs e a rede, mas nada.

Eu não pode buscar todas as chaves e, em seguida, obter as linhas de bilhões de linhas torna isso impossível.

O driver DataStax Java permite a paginação automática de modo que irá transmitir os resultados como um iterador e tudo é construído em Isto está em Cassandra 2.0.1 pela maneira - http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra -2-0

Apenas por uma questão de exaustividade lendo isso em 2018, há agora um banco de dados especial só para dados TimeSeries chamado TimescaleDB

http://www.timescale.com/

Este blog vale a pena ler, isso explica porque IT'S superior a soluções como Cassandra para que caso especial e por que eles decidiram construir em cima do banco de dados PostgreSQL relacional

https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top