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.