backend de armazenamento de dados adequado para aplicação Erlang quando dados faz memória não fit

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

Pergunta

Estou pesquisando possíveis opções como organizar o armazenamento de dados para um aplicativo Erlang. Os dados suposto uso é basicamente uma enorme coleção de blobs binários indexados pelo ids cordas curtas. Cada blob é inferior a 10 Kb, mas existem muitos deles. Eu esperaria que, no total, teriam o tamanho de até 200 Gb tão obviamente ele não pode caber na memória. A operação típica nesses dados é ou ler um blob pelo seu id ou atualizar um blob pelo seu id ou adicionar um novo. Em cada período determinado do dia apenas um subconjunto de ids está sendo usado de modo que o desempenho de acesso de armazenamento de dados pode se beneficiar de cache na memória. Falando sobre o desempenho - é bastante crítica. A meta é ter cerca de 500 lê e 500 atualizações por segundo em hardware commodity (dizer sobre EC2 VM).

Todas as sugestões que usar aqui? Como eu entendo dets está fora de questão, uma vez que se limita a 2G (ou era 4G?). Mnesia provavelmente fora de questão também; minha impressão é que ele foi projetado principalmente para casos quando a memória se encaixa dados. Eu estou pensando em tentar motorista Berkeley DB da EDTK para a tarefa. Será que funcionará no cenário acima? Alguém tem experiência de usá-lo na produção em condições semelhantes?

Foi útil?

Solução

tcerl saiu de frente para o mesmo limite de tamanho. Não estou usando Erlang estes dias, mas parece que o que você está procurando.

Outras dicas

Você já olhou para o CouchDB está fazendo? Pode não ser exatamente o que você está depois de uma queda no produto, mas há um monte de código Erlang lá para armazenar dados. Há também alguma conversa de fornecer uma interface erlang nativa em vez da API REST.

Existe alguma razão para que você não pode apenas usar um sistema de arquivos, tratando nome de arquivo como o seu ID de corda e o conteúdo do arquivo como um blob binário? Você pode escolher um (sistema de arquivos) que se adapta às suas necessidades de desempenho, e você deve obter o cache, basicamente, de forma gratuita, fornecida pelo seu OS.

Mnesia pode armazenar dados em disco muito bem. Há também dets (disco de armazenamento prazo com base) que é aproximadamente análogo ao Berkeley DB. É no lib padrão: http://www.erlang.org/doc/ apps / stdlib / index.html

Eu recomendaria Apache CouchDB.

É um grande ajuste para Erlang, e do som dele (você menciona manchas à base de ID e não menciona quaisquer requisitos relacionais) que você está procurando um banco de dados orientado a documentos.

Uma vez que a interface é REST, você pode muito simplesmente adicionar uma mercadoria HTTP Cache na frente dele, se você precisa de cache.

A documentação para CouchDB é de uma qualidade muito elevada.

Ele também foi construído com Map-Reduce:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top