O acesso simultâneo ao base de dados ou arquivo de memória de vários processos, isso é possível?

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

Pergunta

Aqui está minha situação. Eu tenho um aplicativo de servidor projetado para vários usuários usarem, portanto, há muitas operações de leitura/gravação ao mesmo tempo. E as respostas precisam ser rápidas.

Atualmente, cache todos os dados na memória para que a operação de leitura/escrita dos dados seja tão rápido quanto esperávamos. Para impedir que o bloqueio de dados me causasse problemas, usei a fila para alinhar as solicitações dos usuários, faça com que eles entrem no processo de manipulador um por um.

Mas logo encontrei um problema. O programa só pode lidar com uma solicitação ao mesmo tempo. Até o timer de referência do programa relatou que usou zero ms para processar, mas ainda há limites para lidar com solicitações em um segundo. Agora eu lidei cerca de 100 vezes por segundo.

Então, estou procurando alguns métodos mais simultâneos, como 8 processos para lidar com as 8 solicitações ao mesmo tempo. Isso será tão bom. Mas há um problema maior com o compartilhamento de dados, não quero reinventar a roda. Então, verifiquei o MongoDB, Redis e Sqlite.

Aqui está minha lição de casa, corrija -me se eu estivesse errado, muito obrigado

MongoDB e Redis são muito rápidos como declararam, mas eles usaram o mesmo mecanismo, eles podem lidar com uma solicitação uma vez, não é isso que estou procurando.

Portanto, o SQLite é muito mais próximo, vários processos podem abrir o mesmo arquivo DB ao mesmo tempo e ler, a dor é sua trava de gravação (não sei o quanto o novo bloqueio no SQLite3 funciona).

Aqui está a minha pergunta, existe uma solução sólida e boa para esse cenário? Se eu separar o processo de gravação em um, ajudaria?

Obrigado por qualquer comentário

Foi útil?

Solução

A solução com MongoDB é o sharding. MONGODB SHARDING Basicamente, permite que você jogue mais processadores no problema. Mais processadores = mais threads de gravação.

Cada instância do MongoDB possui apenas um tópico de gravação. O sharding dá mais instâncias e, portanto, permite mais gravações.

No entanto, há um problema maior aqui. Taxa de transferência de disco.

Eu tive Mongo executando mais de 1000 inserções / s se tudo estiver na RAM. Mas a maioria das pessoas usa o Mongo como um banco de dados com um suporte real de arquivo. Portanto, se você estiver usando o Mongo para gravações realmente pesadas, você deve estar preparado com discos que podem aceitar esse nível de taxa de transferência.

Novamente, a maneira de contornar o problema da taxa de transferência de disco é o sharding. Crie mais fragmentos e você receberá menos gravações / disco e basicamente menos travando por toda parte.

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