Quando eu deveria considerar o uso de um no banco de dados de memória e que são o problema de olhar para fora?

StackOverflow https://stackoverflow.com/questions/1593692

Pergunta

Eu estava só acho que agora ele é comum ter bastante memória RAM em seu servidor de banco de dados para o cache de sua base de dados completa por que o especialista em memória de dados (e.g TimesTen, ver também A página da wikipédia) que eram toda a raiva de alguns anos atrás, não sendo mais usados?

Parece ser a de que como o tempo ir em nenhum disco de bancos de dados estão sendo menos usada, e.g a maioria dos aplicativos são construídos agora convencionais racional bancos de dados.Eu teria esperado o contrário como a RAM está chegando perto de ser livre para um monte de servidores.

Eu estou perguntando isso, como eu acabei de ler sobre a pilha de estouro de-arquitetura-e a página diz

Isso é significativo porque Pilha Estouro do banco de dados é quase completamente na RAM e a junta ainda exata demasiado alto custo.

Mas eu não acho que isso seria um problema se "ponteiros" e "coleções" foram usados em vez do normal btree.Btree são muito inteligentes para " burlar limites na velocidade de acesso ao disco, e.g comércio de CPU usage para reduzir o uso de disco.No entanto, agora nós temos isso de correspondência de ram.

Mas ainda precisamos de banco de dados, como fazer seu próprio

  • Fecho
  • Detecção de Deadlock
  • O log de transação
  • Recuperação
  • Etc

É muito difícil.

@S. Lott, Dado todos nós passamos tanto tempo escolhendo índices, evitando associações e a investigação de banco de dados de problemas de desempenho.Deve haver uma maneira melhor.Alguns anos atrás, fomos informados de que a "em bancos de dados de memória" foi o melhor caminho.Por isso, antes de saltar para o uso de uma etc, eu gostaria de saber por que outras pessoas não estão usando mais e mais.

(Eu sou improvável para usar o TimesTen-me, como é de alta de preços ($41,500.00 / Processador e eu não gosto de falar para Oracle pessoas de vendas - eu prefiro gastar meu tempo escrevendo código.)

Veja também:

Atualização:

Eu fiz essa pergunta um LONGO tempo atrás, esses dias o Microsoft SQL Server "Na Memória de OLTP"que é uma memória otimizada mecanismo de banco de dados integrado no mecanismo do SQL Server.Não é barato, mas parece ser muito rápido para algumas cargas de trabalho.

Foi útil?

Solução

Provavelmente existem apenas não maduros os produtos de bancos de dados de memória que pode ser usado como um substituto completo para o clássico de banco de dados.

Banco de dados relacional são muito velho conceito.Embora houvesse muitas abordagens para avançar e desenvolver novas tecnologias, por exemplo.orientada a objeto, bancos de dados, os bancos de dados relacionais não realmente mudar seus conceitos.Não espere coisas a mudar demasiado rápido, uma vez que bancos de dados não mudou muito nos últimos dez ou quinze anos ou mais.

Eu acho que, o desenvolvimento de tecnologias não é tão rápido como alguém pode acreditar.Leva décadas para novos conceitos para ser madura e estabelecida.Primeiro de tudo em tecnologias de banco de dados, onde a maturidade é muito mais importante do que qualquer outra coisa.

Em dez ou vinte anos, os bancos de dados são, provavelmente, não é o mesmo, mais como eles são hoje.Se em bancos de dados de memória são o futuro - ninguém pode dizer isso hoje em dia - eles só precisam de algum tempo para se desenvolver.

Outras dicas

Realmente, ninguém respondeu a pergunta "Quando eu deveria considerar o uso de um no banco de dados de memória e que são o problema de olhar para fora?" então eu vou dar-lhe um ir.

Você deve considerar uma base de dados na memória se:1.O sistema de destino tem dados para gerenciar, mas não persistente media 2.Os requisitos de desempenho, simplesmente, não podem ser atendidos com um banco de dados persistente

Para #1, pensar o Guia de TV no seu set-top box (STB).Low-end STB (i.e.aqueles que não DVR capacidade) tem nenhum armazenamento persistente, e não precisa de armazenamento persistente.Mas o banco de dados para um 400-canal 14-dia do Guia de TV não é trivial.Há um requisito de desempenho aqui, também, como os dados que chegam do transponder carrossel em alta velocidade e é um caso de "capturá-lo ou esperar até o carrossel vem aí de novo'.Mas não há necessidade de persistência.Todos nós já vimos isto;quando você perder o poder em sua casa, quando ele chega de volta a TV Guide diz que "estará disponível em breve", porque é de aprovisionamento próprio do transponder ou cabo de head-end.Roteadores de rede compartilham as mesmas características:nenhum armazenamento persistente, precisa ser rápido, e o banco de dados pode ser configurado a partir de uma fonte externa (peer roteadores na rede, neste caso, para preencher a tabela de roteamento).

Há inúmeros exemplos de #2:Em tempo Real as consequências nos sistemas militares, de alta frequência, sistemas de negociação, e muito mais.

Quanto à segunda parte da pergunta, "o problema para estar atento":Há muitos.

Certifique-se de que você está avaliando um verdadeiro banco de dados na memória se você precisa o desempenho que apenas um banco de dados em memória podem entregar.O cache de um banco de dados persistente não é o mesmo.Jogando um banco de dados persistente em um RAM-a unidade não é o mesmo.Usando um banco de dados em memória que inerentemente faz o log de transação (como o TimesTen) não é o mesmo (mesmo se você log para /dev/null).

Certifique-se de que você está avaliando um sistema de banco de dados, e não apenas um cache (por exemplo,memcache).Um sistema de banco de dados terá suporte para transações com as propriedades ACID, várias opções de indexação, o suporte simultâneo de acesso, e mais.

Cerca de ÁCIDO:na memória, sistemas de banco de dados não falta a " D " (maior durabilidade).Ele simplesmente tem que ser tomadas no contexto.Transações em um banco de dados persistente são duráveis somente enquanto a mídia é armazenado em é durável.A mesma coisa é verdadeira para bancos de dados de memória.Em ambos os casos, se você se preocupa com a durabilidade, é melhor ter um backup.

A tendência parece ser para armazenar em cache de forma agressiva e usar o banco de dados para preencher o cache. Independentemente de onde o banco de dados mora, as junções ainda são caras, então a preferência parece ser fazer a junção uma vez e cache o resultado em algo como Memcached ou Velocidade.

Ainda existem bancos de dados de memória e são usados, mas depende do contexto que você deseja usá-los. Sqlite Por exemplo, é frequentemente usado como um banco de dados na memória ao testar as camadas de dados.

A razão mais importante é a cultura de carga e o nível de conhecimento muito baixo. A maioria dos aplicativos funciona suficientemente bem, qualquer que seja a solução de persistência usada e, como os computadores ainda estão ficando mais rápidos a cada ano, poucas pessoas sentem a dor e são capazes de identificar o problema.

A Microsoft e a Oracle ganham muito dinheiro com seus produtos de banco de dados para torná -lo (politicamente) possível para eles encontrarem melhores abordagens.

Os custos de desenvolvimento do uso de um banco de dados relacionais não são tornados transparentes, portanto a gerência não tem idéia de que há um problema, muito menos uma solução.

Bem, em bancos de dados de memória, geralmente, falta o D (durabilidade) em ÁCIDO (atomicidade, consistência, isolamento, durabilidade), pela sua própria natureza.Isso pode ser superado se a ponto com "híbrido" de abordagens, no entanto, em algum momento algo (ou dados propriamente dito, ou um log de transações) tem que ser persistente em algum lugar a durabilidade aspecto.Este geralmente pode diminuir o desempenho ou introduzir outras não-propriedades desejáveis para um banco de dados na memória solução

Em contraste, a maioria de hoje RDBMS ter o complemento total de ÁCIDO, bem como ter muitas décadas de desenvolvimento.Isso resultou no disco baseado em sistemas de banco de dados que são muito funcionais, especialmente com muitos anos de melhorias e otimizações que dia moderno sistema RDBMS ter visto (seu BTree exemplo a ser apenas um dos muitos).

Outro fator é a nossa capacidade como os desenvolvedores de aplicativos para reduzir a carga no banco de dados, tais como de mecanismos cache, e , assim, espremendo muito mais percebido o desempenho da camada de dados de um aplicativo.De fato, o cache de si tem visto grandes desenvolvimentos nos últimos anos, com cache distribuído, sendo comum hoje em dia (basta olhar para o número de os usuários do memcached, por exemplo).

Ironicamente, o dia moderno cache de sistemas são, em muitos aspectos, lentamente transmogrifying em algo semelhante a um verdadeiro banco de dados na memória do sistema.Em bancos de dados de memória, como objeto de bancos de dados orientados, são muito "new kids on the block", por isso vai ser interessante ver onde tudo isso vai a tempo.A Oracle já adquiriu TimesTen, e, de acordo com este artigo da wikipédia, Microsoft estão olhando para começar no banco de dados na memória de mercado muito em breve.Dois dias modernos "big players" no tradicional RDBMS campo que está tendo na memória de sistemas de banco de dados a sério.

Esta também é uma opção: http://www.memsql.com/

Eu não o usei pessoalmente, mas deveria estar na linha de um substituto para o MySQL na memória.

Várias versões portáteis do SQL, que funcionarão com a mesma eficiência, projetadas principalmente para dispositivos móveis.

Sqlite

Edição compacta do SQL Server

Essas são apenas grandes jogadores que outras opções podem estar lá, mas os grandes jogadores lidam com os requisitos mínimos com a liberação dele .. :)

E no banco de dados de memória, você faz backup continuamente dos dados se surgir flutuação ou powercut, você pode perder todo o grupo. Como em outro, será tratado como em memória secundária (HDD) e as chances de perda serão 10% comparadas ao DB de memória.

Espero que isso possa ajudar :)

O caso de uso mais típico para um banco de dados é a persistência, o que torna a maioria dos bancos de dados em memória inadequados. Um motivo popular para usar um banco de dados na memória é para fins de teste. Mas isso exige que você use um banco de dados que possa ser configurado como na memória e em outra coisa.

As escolhas populares nessa área parecem ser Ravendb para desenvolvedores .NET e OrientDB para desenvolvedores de Java. Como ambos podem funcionar como bancos de dados de memória e "outra coisa", dependendo da configuração, para que você possa usar um ou outro, dependendo da sua configuração (App.config nas configurações .NET, MAVEN ou ANT em Java).

De processamento de dados necessidades estão se tornando mais complexas e o produto ecossistema está evoluindo para atender a essas novas necessidades.Baseado em disco RDBMS, cache na memória, e na memória de bancos de dados são utilizados para satisfazer as diferentes necessidades.Você deve ir com o que se adapte a sua necessidade -

Tradicional RDBMS: O MySQL cluster é bastante rápido, fácil o suficiente para se manter, e você gosta de ter a confiabilidade de ÁCIDO-conformidade.

Distribuído na memória cahce: Seu aplicativo precisa fazer rápido lê e escreve sem se preocupar demais com a consistência ou transações complexas.

Na memória RDBMS:

  1. (Velocidade):Seu aplicativo precisa de dados do processo/pedidos mais rápido do que o seu disco baseado em banco de dados pode.
  2. (A complexidade):Você precisa fazer o complexo transacional lê e escreve com associações e agregações e gostaria de usar o poder do SQL.
  3. (Escalabilidade):Você precisa expandir a sua base de dados horizontalmente, sem tempo de inatividade.
  4. (Facilidade de manutenção):Você precisa de banco de dados para fornecer alta disponibilidade, replicação, balanceamento de carga e de recuperação de desastres sem adicionar tarefas de manutenção.
  5. (Ressalva):Seus dados devem caber na memória (normalmente em terabytes).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top