Mecanismo de armazenamento de banco de dados mais alto de desempenho
-
20-08-2019 - |
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.
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.
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?
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)
Oracle Timesten InMemory Database. Ver: http://www.informationweek.com/whitepaper/business-intelligence/datamarts-data-warehouses/oracle-timesten-inmemory-databas-wp1228511232361
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.