O que significa quando o Twitter diz que o banco de dados inteiro está na RAM?

3

Eu estou querendo saber por onde começar com as estratégias de dimensionamento / otimização de banco de dados. Depois de ler artigos como artigo de arquitetura do facebook do highscalability.com , e este artigo de arquitetura do twitter , eu não tenho certeza se pela RAM eles significam somente memcached, ou qualquer outra coisa.

Minhas perguntas são:

  • Podem bancos de dados SQL inteiros serem armazenados na RAM? Eu estou pensando sharding e tudo o que aqui ... Apenas aprendendo (não de um fundo db).
  • Os índices do banco de dados SQL são armazenados na RAM?
  • Os bancos de dados do NOSQL são armazenados na RAM? Eles podem ser?
  • Ou Memcached é o padrão para armazenar coisas na RAM? Então, 99% das solicitações são lidas a partir da RAM (Memcached) e o banco de dados (disco) é um backup?

Apenas procurando por um ponto na direção certa.

    
por Lance Pollard 12.04.2011 / 19:23

6 respostas

2

A base de dados deles pode, na verdade, estar todos em RAM, o que significa que existe em um estado que não corresponde a nenhum dado persistente na unidade.

Para um exemplo simples, quando um aplicativo faz um SELECT * FROM em seu banco de dados, esse aplicativo armazena todo o banco de dados na RAM. É fácil visualizar em Java: você acabou de criar uma grande variedade de objetos Java. Onde eles estão armazenados? Eles estão na RAM.

Com base nas suas perguntas mais específicas, tecnicamente os bancos de dados SQL não são armazenados na RAM, mas os dados deles podem ser armazenados. Sim, você pode indexar um banco de dados SQL e mantê-lo na RAM (mas isso não significa que seu banco de dados esteja na RAM).

    
por 12.04.2011 / 19:36
1

Eu não sei como o twitter é concreto, mas para responder às suas perguntas gerais:

X armazenado em questões de RAM: Sim, se as estruturas já não estiverem armazenadas em cache na RAM pelo próprio sistema de banco de dados, imagine apenas um disco de RAM como sistema de arquivos. Tudo está na memória. Você tem uma banda enorme desses sistemas. Desvantagem com aqueles: Adivinha o que acontece quando alguém tira a ficha ... toda a sua memória está perdida. Naturalmente há soluções para isso, como fazer instantâneos regulares / gravar as coisas em discos rígidos reais, ou usar memória persistente (não flash, que é muito lenta e limitada, mas existem soluções (realmente caras) como MRAM.

    
por 12.04.2011 / 19:34
1
  1. Sim, embora eu ache que o twitter usa uma variedade de tecnologias e não apenas RDBMS. Existem mecanismos para o MySQL que só são executados na memória, por exemplo (o NDB do cluster, se a memória servir).

  2. Freqüentemente, sim.

  3. Não por definição, mas sim alguns podem ser. Geralmente, é melhor para qualquer banco de dados maximizar o uso de RAM e minimizar o acesso a disco lento.

  4. O Memcached é certamente um cache comum de front-end para muitos back ends de banco de dados. Eu fiz uma apresentação sobre o uso do memcached com o Amazon simpleDB alguns anos atrás, que pode ou não ser útil.

Estratégia inteligente memcached na frente de um banco de dados pode ser altamente benéfica, mas você pode usar soluções compatíveis com cluster e protocolo como membase também.

    
por 12.04.2011 / 19:35
1

O problema de armazenar um banco de dados na RAM é que a RAM tem o péssimo hábito de esquecer tudo quando a energia é desligada, ou seja, não é persistente . Dito isso, fazer uso adequado da memória para sites de alto tráfego é absolutamente essencial para obter um desempenho decente, porque você obtém taxas de IO extremamente boas e isso é muito útil se você tiver uma carga alta.

Da memória, o MySQL tinha um tipo de tabela MEMORY que armazenava dados na RAM ao invés de no disco (como faria o InnoDB e o MyISAM). O uso criativo de um RAMdisk também permitiria que qualquer banco de dados usasse RAM como backup de disco, mas como acima, isso provavelmente não é o que você gostaria de fazer. Como você descobriu, um aplicativo mais útil seria o uso de RAM como um cache de alto desempenho, usando algo como o Memcached. Como tenho certeza de que você sabe, isso fornece um armazenamento rápido de chave / valor, mas requer que o aplicativo saiba que deve procurar primeiro e depois voltar ao banco de dados persistente se nada for encontrado. Sites que exigem uma alta taxa de E / S em todo o banco de dados relacional têm a opção de despejar todo o banco de dados em algo como um drive de E / S de Fusão . Isso não vai ser tão rápido quanto a RAM, mas tem a opção de ser persistente, então pode ser um meio-termo útil. Acredito que o SO execute seu banco de dados em uma unidade Fusion IO (consulte esta postagem do blog sobre suas descobertas .

Portanto, em resumo, um site de alto volume terá seus dados armazenados em armazenamento persistente (disco giratório, SSD etc.) e, em seguida, configurará uma série de camadas de caches de desempenho mais alto para reduzir (geralmente as leituras ) carga no banco de dados. As gravações normalmente vão direto para o banco de dados, mas você pode usar um cache de gravação localizado se tiver muitas gravações.

Em resposta a suas perguntas específicas:

  • Os bancos de dados SQL inteiros podem ser armazenados na RAM, mas isso não é necessariamente interno ou o que você está procurando. Se você quer um banco de dados baseado em RAM, provavelmente há uma opção melhor.
  • Os índices SQL serão gerenciados pelo mecanismo SQL que você está usando. Diferentes servidores SQL (MSSQL, MySQL, Postgres, etc.) podem ter diferentes estratégias e opções de ajuste para determinar quando despejar índices na RAM, dependendo de vários fatores, como o tamanho, a frequência com que são atingidos, quanto RAM você tem.
  • Não sou especialista em NOSQL, portanto, estaria fazendo uma resposta aqui. No entanto, você poderia dizer que o memcached é um banco de dados NOSQL baseado em memória? Talvez.
  • O Memcached é bastante usado e tem muito suporte de várias bibliotecas e pilhas de software.
por 12.04.2011 / 19:41
0

O Twitter usa o Redis para suas operações de banco de dados. É uma forma de NoSql DB. É também na memória, por isso é muito rápido em operações de leitura / gravação. O Twitter o adotou para armazenar todos os seus dados em formato de valor-chave para todos os seus dados de usuário. Embora isso exija que você implemente seus próprios algos em como gerenciar os Servidores Redis, como implementar sharding e também configurar suas próprias configurações Mestre-Escravo. Você pode ter uma visão mais aprofundada aqui link

    
por 24.09.2015 / 10:31
-1

Sim, todos os bancos de dados SQL podem ser armazenados na RAM e é um método bastante padrão em sites de alto desempenho como este.

Sim, os índices SQL são mais provavelmente armazenados na RAM também.

Você pode armazenar qualquer coisa na RAM, é simplesmente uma área de armazenamento. O que você tem que fazer é o tamanho do armazenamento, e o que mais precisa de acesso à RAM para ter certeza de que você tem o suficiente.

    
por 12.04.2011 / 19:29