%2C%20MyISAM%20ou%20qualquer%20outra%20coisa%20(por%20exemplo%2C%20MemCached).png)
Atualmente trabalhando em um projeto centrado em um vocabulário médico conhecido como SNOMED. No coração do snomed está um conjunto de dados (relacional) com 350.000 termos/registros de comprimento. Queremos ser capazes de consultar rapidamente este conjunto de dados para a parte de entrada de dados onde gostaríamos de ter algum formato ou forma de preenchimento automático/sugestão.
Atualmente está em um banco de dados MySQL MyISAM apenas para fins de desenvolvimento, mas queremos começar a brincar com algumas opções de memória. Atualmente tem 30 MB incluindo os índices. O MEMORY MySQL Engine e o MemCached eram os óbvios, então minha pergunta é qual deles você sugeriria ou há algo melhor por aí? Estamos trabalhando em Python principalmente no nível do aplicativo, se isso faz diferença.
Nota lateral: O conjunto de dados tem uma relação separada que mapeia esses conceitos para nomes de alias e abreviações comuns, que é de cerca de 1,3 milhão de registros... eventualmente, vamos querer usar um subconjunto disso também aqui.
Responder1
Não está claro exatamente quais são seus requisitos, mas com um banco de dados tão pequeno, as consultas provavelmente serão rápidas em qualquer mecanismo, pois todos os dados caberão na memória.
Coisas como MyISAM e InnoDB requerem alguns ajustes para funcionar. O Memcached só é útil se você precisar escalar para cargas de trabalho baseadas em leitura de carga muito alta, ou seja, aquelas que são muito altas para um único servidor servir a partir de um banco de dados convencional na memória (o principal recurso do Memcached é a capacidade de escalar em um pool de servidores). Mas o memcached não pode fazer consultas convencionais, como varreduras de intervalo, apenas pesquisas em uma chave específica, portanto, não é um banco de dados de uso geral.
Eu recomendo usar o innodb com um buffer pool maior que o seu conjunto de dados e escolher suas chaves primárias corretamente. Uma varredura de intervalo de chaves primárias deve funcionar muito bem e poder ser usada para correspondência de prefixos (por exemplo, casos de uso de conclusão).
Você poderá escalar para, digamos, 1.000 consultas por segundo em hardware normal. Se precisar de mais, adicione escravos de replicação ou considere algo como memcached.
Considere perguntar no StackOverflow?
Responder2
Você pode manter a tabela como um tipo MEMÓRIA. Seria muito rápido, mas exigiria que você o semeasse antes de usar. Tenho a sensação de que você pode obter muito desempenho com isso. Estando na memória, é certamente mais rápido que InnoDB e MyISAM para operações de leitura.
Eu diria que tente de algumas maneiras diferentes e depois sobrecarregue a pesquisa com o ApacheBench, veja o que sucumbe mais rapidamente sob pressão.