Pergunta

Eu sou um cara incorporado, não é um cara de banco de dados. Fui convidado para redesenhar um sistema existente que tem gargalos em vários lugares.

O dispositivo incorporado é baseado em torno de um processador ARM 9 rodando a 220MHz.

Deve haver um banco de dados de 50 mil entradas (pode aumentar para 250 mil) cada um com 1k de dados (max 8 arquivado). Isso é aproximada -. Posso tentar obter números mais precisos, se necessário

Eles estão usando atualmente SqlLite 2 e planejamento para se deslocar para SqlLite 3.

Sem iniciar uma guerra chama - Eu sou um completo d / b novato apenas procurando conselhos - é que o "melhor" decisão? Sei que isso pode ser um "quanto tempo é um pedaço de corda?" pergunta, mas os ponteiros woudl ser muito bem-vindas. Eu não me importo de fazer um monte de leitura e pesquisa, mas só esperava que você poderia me tirar a um começo de vôo. Obrigado.

P.S Novamente, uma reescrita total pode até não ficar com Linux embutido, mas mudar para eCos, não se preocupe muito com um tempo de conversão entre formatos d / b. Ah, e acessos devem ser pouco frequentes, no máximo, uma a cada poucos segundos.


edit: ok, parece que eles têm 30k entradas (pode chegar a 100 mil ou mais) de apenas 5 ou 6 campos de cada um, mas pelo menos 3 deles pode ser uma chave de pesquisa para um registro. Eles estão brincando com "não ter d / b em tudo, desde que os dados são tão simples", mas parece-me que, com várias chaves, não poderíamos usar coisas extravagantes como um quicksort () tipo de pesquisa (recursivo, busca binária ). Quaisquer pensamentos sobre "nenhum d / b", apenas a data-estruturas?

Btw, uma chave é 800k - não sei como bem alças SqlLite que (? Talvez com "nenhum d / b" Eu tenho que hash que 800k para algo menor)

Foi útil?

Solução

Além disso SQLite é o banco de dados escolhido por praticamente todos os sistemas operacionais móveis. Android, iPhone OS e Symbian navio com SQLite que me faz pensar que mão de obra foi gasto para otimizá-lo para o processador nos telefones (quase sempre ARM).

Outras dicas

Gostaria de ficar com SQLite, é amplamente apoiado e muito rica em recursos.

  • Firebird (anteriormente Interbase) diz trabalhar bem incorporado.

  • HypersonicQL (HQL) é pequena e rápida e também diz ser adequada para o uso incorporado.

Infelizmente, eu não tenho nenhuma experiência pessoal para fazer backup de qualquer reivindicação.

SQLite é provavelmente uma aposta bastante segura. No entanto, se o desempenho é realmente importante para a sua aplicação e você não precisa de um banco de dados relacional, eu sugiro que você dê uma olhada em Berkeley DB link texto . Berkeley DB não é um banco de dados relacional embora. Em outras palavras, se os dados são agrupados em tabelas diferentes e você constantemente a necessidade de conjuntos de resultados da consulta que requerem dados relacionados de mais de uma tabela, você provavelmente precisará de um banco de dados relacional. Berkeley DB é mais adequado para algo como olhar para cima tabelas (ou seja, os dados são organizados em algumas mesas e você não precisa de dados de consulta de mais de um deles, a fim de produzir os conjuntos de resultados que você quer). Berkeley DB é muito rápido, mas vai exigir mais trabalho em sua extremidade, a fim de tirar o máximo proveito dela.

Se você quer uma alternativa, então BerkeleyDB vale a pena olhar. que costumava ser de propriedade de software sleepycat, mas está agora disponível da Oracle. é um mecanismo de banco barebones; é directamente programável (em vez de um SQL) interface. ele é usado como parte do motor central em muitos bancos de dados principais, e como o banco de dados em muitos dispositivos embarcados - que costumava ser particularmente popular para gerir tabelas de roteamento em roteadores. ele tende a ficar esquecido nos dias de hoje para configurações mais elegantes, mas eu achei que fosse decente, sólida e para os números que você está falando pode ser muito rápido.

Vou sugerir sqlite3 também. Ele é usado por muitas aplicações famoso.

SQLite é ok, mas não pretende usar se você pretende inserir, atualizar e excluir dados que envolve mais do que 6 linhas millon (tudo ao mesmo tempo, ou qualquer parte parcial). A coisa é que a palavra-chave VACCUM tem que ser feito everynow e, em seguida, e torna-se um gargalo muito grave para o desempenho, mesmo quando é automática.

8 anos de atraso, mas como uma atualização: Eu tive muito boa experiência usando Raima base de dados Gestor . Se você estiver procurando por uma pequena db pegada, eles podem chegar até 40k. Uma das razões I como RDM é a independência de plataforma, é portátil através de máquinas de 32 bits e de 64 bits e entre arquiteturas big-endian e little-endian, bem como suporte para a maioria dos sistemas operacionais, ou seja, você pode usá-lo em Incorporado Linux e eCos como mencionado no primeiro post. E é o desempenho fica melhor como você adicionar mais hardware e usuários em oposição a SQLite

Eu não estou familiarizado com o sistema de embutir, mas o uso iphone ARM9, e sqlite como DB

A 01-11-10 Embedded.com Boletim informativo faz um bom trabalho de cobrir este tema. O boletim pode ser encontrada em Embedded.com: Embedded.com Tecnologia Foco newsletter (1-11-10):. Embedding Databases

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