Venho de uma sequência de trabalhos de mais ou menos uns 7 anos só com o Oracle.
Por conta de uns sistemas legados do que estou tendo que mexar agora, estou aprendendo a lidar com o MySQL. Não é lá um BD ‘porreta’ como o Oracle, mas considerando que ele é de graça, dá pro gasto.
Um dos recursos bacanas que descobri é que se pode criar uma tabela em memória no BD.
Para uma máquina sobrecarregada com operações de I/O, tabelas com muita frequencia de leitura/escrita, mas que os dados sejam bastante voláteis (por exemplo, a navegação de um usuário de um website mantida na sessão) é um recurso bastante interessante.
Coisas importantes a saber sobre tabelas em memória:
- Uma vez criada uma tabela em memória, ela permanece no schema, mas se o BD for resetado, os dados nelas contidos são perdidos.
- Tabelas mantidas em memória não podem conter campos do tipo BLOB ou TEXT
No exemplo que fiz abaixo, crio uma tabela de frases em memória e logo abaixo, faço a inserção de conteúdos nesta tabela em memória a partir de outra tabela (o MySQL é ‘inteligente’ o bastante para entender que se acabei de criar uma tabela e logo abaixo estou fazendo uma consulta é para ele inserir o resultado desta na tabela criada na instrução acima)
CREATE TABLE tmp_frases (id INT not null,
frase varchar(100) null,
index(id))
ENGINE = MEMORY
SELECT @rownum:=@rownum+1 as id,
t.frase
FROM (SELECT @rownum:=0) r,
textos t
where t.categoria = ‘Piadas’;
Moleza!
Depois de criada e utilizada, convém fazer o DROP TABLE da tabela para liberar memória do servidor do MySQL.