Pergunta

Preciso de idéias para implementar um (realmente) mecanismo de banco de dados/armazenamento na memória de alto desempenho. Na faixa de armazenamento de mais de 20.000 objetos, com cada objeto atualizado a cada 5 segundos. Eu gostaria de uma solução foss.

Qual é minha melhor opção? Quais são suas experiências?

Estou trabalhando principalmente em Java, mas preciso que o armazenamento de dados tenha um bom desempenho, para que a solução de dados de dados não precise ser centrada no Java.

Também preciso poder consultar esses objetos e preciso restaurar todos os objetos na inicialização do programa.

Foi útil?

Solução

Sqlite é um banco de dados independente de código aberto que suporta bancos de dados na memória (basta conectar-se a :memory:). Possui ligações para muitas linguagens de programação populares. É um banco de dados relacional baseado em SQL tradicional, mas você não executa um servidor separado-basta usá-lo como uma biblioteca em seu programa. É muito rápido. Seja rápido o suficiente, não sei, mas pode valer a pena um experimento.

Driver Java.

Outras dicas

Você está atualizando 20K objetos a cada 5 segundos ou atualizando um dos 20k a cada 5 segundos?

Que tipo de objetos? Por que um RDBMS tradicional não é suficiente?

Verificação de saída HSQLDB e Pretayler. O PrevAyler é uma mudança de paradigma do RDBMS tradicional - que eu usei (o paradigma, ou seja, não especificamente Prevayler) em vários projetos e descobriu que ele tem um mérito real.

Depende exatamente de como você precisa consultá -lo, mas você analisou o Memcach?

http://www.danga.com/memcached/

Outras opções podem incluir Tabelas de memória mysql, a Cache APC Se você está usando PHP.

Mais alguns detalhes sobre o projeto/requisitos seriam úteis.

Um armazenamento na memória?

1) Uma simples matriz C 'Malloc', onde todas as suas estruturas seriam indexadas.

2) Berkeleydb: http://www.oracle.com/technology/products/berkeley-db/index.html. É rápido porque você constrói seus próprios índices (banco de dados secundário) e não há expressão SQL a ser avaliada.

Veja alguns dos produtos listados aqui: http://en.wikipedia.org/wiki/in-memory_database

Que nível de durabilidade você precisa? 20.000 atualizações a cada 5 segundos provavelmente serão difíceis para a maioria dos hardware de IO em termos de número de transações se você escrever os dados de volta para o disco para cada um.

Se você puder perder algumas atualizações, provavelmente poderá descartá -lo para disputar a cada 100ms, sem nenhum problema com hardware bastante barato, se o seu banco de dados e o sistema operacional suportarem isso.

Se é realmente um banco de dados na memória que você não deseja discernir com frequência, isso parece bastante trivial. Ouvi dizer que o H2 é muito bom, mas o SQLite também pode funcionar. Uma instância MySQL adequadamente sintonizada também pode fazê -lo (mas pode ser mais complicado)

Mapa da crônica é um Java puro loja de valores-chave

  • tem realmente alto desempenho, sustentando 1 milhão de gravações/segundo de um único tópico. É um mito que um banco de dados rápido não poderia ser escrito em Java.
  • Armazra e carrega perfeitamente quaisquer objetos java serializáveis, fornecem um simples Map interface
  • LGPLV3

Como você não possui muitas "tabelas", um banco de dados SQL completo pode ser uma solução de exagero, os índices e consultas podem ser implementados com um punhado de lojas de valor-chave distintas que são atualizadas manualmente pelo código Java de baunilha. Mapa da crônica fornece mecanismos Para fazer essas atualizações simultaneamente isoladas uma da outra, se você precisar.

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