Pergunta

Eu tenho uma experiência de streaming até 1Mb / s de dados numéricos que precisa ser armazenada para posterior processamento. Parece tão fácil de escrever diretamente em um banco de dados como um arquivo CSV e eu teria, então, a capacidade de recuperar facilmente subconjuntos ou intervalos.

Eu tenho experiência de sqlite2 (quando ele tinha apenas campos de texto) e parecia praticamente tão rápido quanto o acesso ao disco cru. Quaisquer opiniões sobre os melhores DBMS atual em processo para esta aplicação?

Sorry - deveria ter adicionado este é C ++ inicialmente no Windows, mas de plataforma cruzada é bom. Idealmente, o formato de arquivo binário DB shoudl ser multiplataforma.

Foi útil?

Solução

Se você só precisa ler / escrever os dados, sem qualquer intervenção ou manipulação feita no banco de dados, em seguida, ambos devem fazê-lo bem. arquivo de banco de dados do Firebird pode ser copiado, desde que o sistema tem a mesma endianess (ou seja, você não pode copiar o arquivo entre sistemas com processadores Intel e PPC, mas Intel Intel é bom).

No entanto, se você precisa sempre fazer qualquer coisa com os dados, o que está além da simples leitura / escrita, em seguida, ir com Firebird, pois é um servidor SQL completo com toda a 'empresa' características como gatilhos, visões, procedimentos armazenados, tabelas temporárias, etc.

BTW, se você decidir dar Firebird uma tentativa, eu recomendo que você usar a biblioteca IBPP para acessá-lo. É um invólucro muito fina C ++ em torno de C API do Firebird. I tem cerca de 10 classes que encapsulam tudo e ele está morto-fácil de usar.

Outras dicas

Se tudo que você quer fazer é armazenar os números e ser capaz de facilmente a consulta de intervalo, você pode simplesmente pegar qualquer estrutura de dados em árvore padrão que você tem disponível em STL e serializar-lo no disco. Isso pode mordê-lo em um ambiente multi-plataforma, especialmente se você está tentando ir cross-arquitetura.

Quanto mais flexíveis / pessoas-friendly soluções, sqlite3 é amplamente utilizado, sólida, estável, muito agradável ao redor.

BerkeleyDB tem uma série de boas características para as quais seria usá-lo, mas nenhuma delas se aplica neste cenário, imho.

Eu diria que ir com sqlite3 se você pode aceitar o contrato de licença.

D

Depende o idioma que você está usando. Se é C / C ++, TCL, ou PHP, SQLite ainda está entre os melhores no cenário-writer único. Se você não precisa de acesso SQL, uma biblioteca Berkeley DB-estilo pode ser um pouco mais rápido, como Sleepycat ou gdbm. Com vários escritores que você poderia considerar uma solução cliente / servidor separado mas não soa como você precisar dele. Se você estiver usando Java, hdqldb ou derby (fornecido com o JVM da Sun sob o "JavaDB" marca) parecem ser as soluções de escolha.

Você também pode querer considerar um formato de arquivo de dados numéricos que é especificamente voltada para armazenar esses tipos de grandes conjuntos de dados. Por exemplo:

  • HDF - o mais comum e bem apoiado em muitos idiomas com bibliotecas livres. Eu recomendo isso.
  • CDF -. Um formato semelhante usado pela NASA (mas utilizável por qualquer pessoa)
  • NetCDF - outro formato semelhante (a versão mais recente é na verdade um despojado HDF5) .

Esta ligação tem alguma informação sobre as diferenças entre os tipos de conjunto de dados acima: http://nssdc.gsfc.nasa.gov/cdf/html/FAQ.html

Eu suspeito que nem banco de dados permitirá que você gravar dados em tão alta velocidade. Você pode verificar isso a si mesmo para ter certeza. Na minha experiência - SQLite não conseguiu inserir mais de 1000 linhas por segundo para uma mesa muito simples, com uma chave primária único inteiro.

No caso de um problema de desempenho -. Gostaria de usar o formato CSV para gravar os arquivos, e mais tarde eu iria carregar seus dados para o banco de dados (SQLite ou Firebird) para posterior processamento

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