Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Giovanne Afonso

Sobre a migração de MySQL para NoSQL

Recommended Posts

Eu estou com um projeto em PHP onde vai haver muita interação entre usuários e dados, porém, sei que demora para atingir dados gigantescos em que o MySQL começa a ficar com o desempenho um pouco (ou muito) prejudicado...

 

Já li algumas coisas sobre o facebook e vi que eles já mudaram algumas vezes de servidor e implementaram direito sem prejudicar ninguém... Sei que a organização do código fonte é importantíssima pra fazer uma migração assim, mas queria saber como me preparar para isso caso seja necessário.

 

Minhas dúvidas são:

 

-> Será que crio funções para fazer operações com banco de dados?

-- ex.: insertDB($database, $tabela, $dados){[...]}

---- [comentário] Acho que não seria uma ideia muito boa, tendo em vista que o NoSQL é todo estranho

 

-> Começo a usar algum framework para auxiliar nas operações com banco de dados e que vai me ajudar a migrar?

---- [comentário] Odeio frameworks, uso quando precisa, mas gosto de saber o que estou fazendo

 

-> Li um pouco sobre diferenças entre Apache Cassandra e MongoDB e parece que Cassandra é mais rápido em "leituras" e MongoDB é mais rápido em "escritas", é verdade?

---- [comentário] Já estudei sobre cassandra e um pouco sobre MongoDB, acho que MongoDB é mais facil e legal mas Cassandra é mais organizado (isso é só minha opinião, mas me corrijam se eu estiver errado)

 

-> Será que seria viável começar um projeto já usando NoSQL?

---- [comentário] Ao menos em algumas tabelas que vão ter um alto nível de tráfego de dados...

 

 

 

 

 

é.. acho que é isso por enquanto...

Obrigado pela ajuda *--*

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o escopo do projeto? Existe um escopo?

 

Uma das grandes vantagens do NoSQL é o fato dele ser squeme-less, se você esta pensando em iniciar o seu projeto em MySQL, deve ser pq você possui um modelo definido.

 

Você menciona problemas de performance apenas relacionado ao MySQL, sinceramente, não entendi onde quer chegar. Mas se você prevê um problema de performance a curto/médio prazo, melhor pensar em outro tipo de solução para o armazenamento de dados e iniciar o seu projeto já focado nesta solução.

 

Quando a funções, bem, crie camadas de abstração para acesso a camada de persistência.

 

Lembrando que há uma série de características que um banco de dados relacional possuí que merecem ser levados em consideração, mas isto depende da resposta lá da primeira pergunta que fiz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão da migração das bases de dados do Facebook e mais complexo do que a arquitetura do código. A mudança que soube que eles fizeram foi a mudança de local do datacenter. E isso é complexo. Você sabe de outros casos do Facebook, quais?

 

Respondendo suas perguntas:

 

-> Será que crio funções para fazer operações com banco de dados?

-- ex.: insertDB($database, $tabela, $dados){[...]}

---- [comentário] Acho que não seria uma ideia muito boa, tendo em vista que o NoSQL é todo estranho

Você deve buscar sempre desacoplar o domínio do seu negócio da infra estrutura, como banco de dados. Seu código não deve conhecer nada sobre a persistência.

Isso facilitará caso você decida migrar de MySQL para NoSQL.

 

-> Começo a usar algum framework para auxiliar nas operações com banco de dados e que vai me ajudar a migrar?

---- [comentário] Odeio frameworks, uso quando precisa, mas gosto de saber o que estou fazendo

Você pode utilizar o Doctrine, veja:

 

-> Li um pouco sobre diferenças entre Apache Cassandra e MongoDB e parece que Cassandra é mais rápido em "leituras" e MongoDB é mais rápido em "escritas", é verdade?

---- [comentário] Já estudei sobre cassandra e um pouco sobre MongoDB, acho que MongoDB é mais facil e legal mas Cassandra é mais organizado (isso é só minha opinião, mas me corrijam se eu estiver errado)

Não posso falar sobre as diferenças por não conhece-las.

 

-> Será que seria viável começar um projeto já usando NoSQL?

---- [comentário] Ao menos em algumas tabelas que vão ter um alto nível de tráfego de dados...

Se você julga necessário o uso do NoSQL, use desde o princípio.

Não sei dizer se é interessante ou não usar NoSQL e MySQL ao mesmo tempo. Mas creio que isso dificulte a escalabilidade do seu projeto. Alguém ai pode ajudar nisso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é o escopo do projeto? Existe um escopo?

 

Não, gostaria de começar pela escolha do(s) banco de dados. Acho que a parte mais importante da aplicação é a organização, então não quero começar nada sem antes definir este escopo que você está falando, estou estudando muito antes de ir a fundo.

 

Uma das grandes vantagens do NoSQL é o fato dele ser squeme-less, se você esta pensando em iniciar o seu projeto em MySQL, deve ser pq você possui um modelo definido.

 

Tenho uma estrutura pre-formada, mas quero saber como aplicar para organizar os dados como devem ser.

 

Você menciona problemas de performance apenas relacionado ao MySQL, sinceramente, não entendi onde quer chegar. Mas se você prevê um problema de performance a curto/médio prazo, melhor pensar em outro tipo de solução para o armazenamento de dados e iniciar o seu projeto já focado nesta solução.

 

Acho que pode ser a "médio" prazo, mas quero estar preparado para resolver quaisquer problemas que possam surgir.

 

 

Lembrando que há uma série de características que um banco de dados relacional possuí que merecem ser levados em consideração, mas isto depende da resposta lá da primeira pergunta que fiz.

 

Isso é verdade. Tenho um bom tempo pra estudar antes de qualquer coisa e isso vai ser muito bom para fazer a escolha certa. Estou acostumado a usar bancos de dados relacionais, nunca usei um não-relacional. Acho que, talvez, eu queira mais aprender do que aplicar, pois não há necessidade agora.

 

 

 

A questão da migração das bases de dados do Facebook e mais complexo do que a arquitetura do código. A mudança que soube que eles fizeram foi a mudança de local do datacenter. E isso é complexo. Você sabe de outros casos do Facebook, quais?

 

Só andei lendo algumas coisas.. rs... mas não estudei a fundo

 

Você pode utilizar o Doctrine, veja:

 

Vou dar uma olhada =D

 

Se você julga necessário o uso do NoSQL, use desde o princípio.

Não sei dizer se é interessante ou não usar NoSQL e MySQL ao mesmo tempo. Mas creio que isso dificulte a escalabilidade do seu projeto. Alguém ai pode ajudar nisso?

 

Na verdade não julgo necessário no momento, mas gostaria de aprender e ir a fundo nisso. No futuro quando eu precisar eu vou saber e ter experiência. Gosto de me adiantar nas coisas.

 

 

__________________________________________

 

Comecei a estudar NoSQL e instalei Apache Cassandra 1.1.1 (linux) pra fazer uns testes aqui, acho que a forma que usam pra guardar os dados no NoSQL é bem objetiva. Só achei meio ruim os tipos de dados que podem ser guardados, tipo Column Family, Column Family Super, etc... Isso me deixou algumas dúvidas na hora de tentar criar uma estrutura organizada. No MongoDB não tem esse problema né? Gostei mais da forma que o mongodb pareceu ser, vou instalar e estudar ele também. Mas... tenho que confessar que quis aprender Apache Cassandra porque eu li que se parece com BigTable do Google =P (A empresa que mais admiro no mundo).

Compartilhar este post


Link para o post
Compartilhar em outros sites

O site vai ter tantos acessos no médio prazo que será necessário mudar parte do sistema para nosql.

O site existe ?

Quanto tempo ele tem desde seu lançamento ?

Tem um grafico do aumento de visitas ?

Qual a média de crescimento ?

Qual o tempo de resposta de uma página ?

Quantos acessos simultaneos tem no banco de dados ?

 

Usar facebook como referencial de comparação, acho meio falho pois ele tem milhões de acessos, então precisou mudar muitas coisas desde seu lançamento, mas ainda usa mysql em sua estrutura, faz uso também de nosql, mas note que não é em tudo.

 

Criar um sistema em nosql para fins didaticos é ótimo, mas usa-lo como default pode ser mais complicado pois não temos ainda uma grande oferta de bancos nosql nos planos das hospedagens.

 

Então, para um site que está sendo lançado agora, é bom começar com o mysql e conforme for precisando de mais recursos ir escalando até ser realmente necessário passar determinadas tabelas para um nosql por questões de desempenho.

 

E note que existem várias opções de bancos nosql além dos citados e cada um é melhor para um determinado propósito.

Será interessante estuda-los também para quando for preciso, migrar para aquele que melhor atenderá suas necessidades.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius, como eu disse, é mais para aprender mesmo. Nada é necessário agora, só que quero estudar porque achei muito interessante. Acho até que subestimei o MySQL...

 

Não sei muito sobre escalabilidade, mas, pela forma que vocês falam, parece que NoSQL é bom apenas para projetos realmente grandes. Enfim, vou continuar com o bom e velho MySQL mesmo, se precisar eu mudo para algum dos bancos NoSQL, mas isso não vai me impedir de estudar... xD

 

Agora mais dúvidas:

 

-> Imaginem um banco de dados com 100 tabelas, cada tabela com, em média, 1 milhão de registros armazenado em um DataCenter com 12 GB de RAM rodando Apache 2.2... De acordo com meu "axismo", cada query vai levar mais tempo do que deveria para ser executada e prejudicar o desempenho (levando em conta várias interações ao mesmo tempo). Dividir o banco de dados em 2 diferentes faria o desempenho ficar melhor? Será que seria melhor mudar para NoSQL?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dividir o banco de dados em 2 diferentes faria o desempenho ficar melhor? Será que seria melhor mudar para NoSQL?

Sim, ajuda e muito. Mas ai começa a complicar, pois é interessante load balance.

http://aws.amazon.com/pt/elasticloadbalancing/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há várias estratégias para melhorar a performance, porém, mais uma vez, isto depende do seu projeto.

 

No caso do MySQL, a própria engine pode influenciar.

Você pode usar uma estratégia de particionamento de tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A grosso modo, você não muda de MySQL para NoSQL, porque ambos não são concorrentes.

NoSQL é um complemento a bancos relacionais.

 

 

comentário extendido

 

 

No próprio site da Oracle/MySQL tem uma seção especial que trata do assunto "facebook". São artigos diversos explicando como conseguiram a proesa de manter o MySQL como base principal.

http://www.mysql.com/customers/view/?id=757

 

O Facebook utiliza NoSQL, no entanto, apenas como complemento para dados que não necessitam de um SGDB relacional.

 

Todavia, somente isso não basta. Para obter ganhos de performance depende de todo um conjunto de hardware e software e, obviamente pessoas para administratar o monstrinho.

 

Eles contam também com o HipHop for PHP e uma série de outros mecanismos.

 

 

Apenas uma ressalva,

 

Não quer dizer que todos devem usar MySQL + Cassandra + HipHop só porque o Facebook utiliza.

Muitas pessoas colocam isso como critério primordial:

"Se a empresa X usa desse modo então é o mais correto"..

Isso é um ledo engano, pois cada caso é um caso.

 

Antes do fenômeno "facebook", quando se falava em "projeto grande", o que vinha na mente das pessoas ?

"Oracle + java".

Por quê?

"Porque grandes empresas usam", era a justificativa..

 

Mas então veio o Facebook para provar outra perspectiva. Outra realidade.

 

Nos artigos que tratam sobre as decisões técnicas do facebook, dizem que decidiram criar o HipHop for PHP porque seria mais trabalhoso escrever códigos nativos C ou C++ ou C# sendo que a equipe é de especialistas em PHP.

Foi a necessidade e circunstâncias, e até questão de gosto que influenciaram nas escolhas.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.