Vou construir meu primeiro projeto real no Rails, que consiste em um aplicativo da Web composto por três partes principais:
- A parte estática em que nenhum banco de dados é usado
- A parte de registro do usuário que exigirá um banco de dados e eu posso usar o MySQL, pois a linha de cada usuário terá os mesmos campos
- O "App" onde os usuários poderão criar, organizar, editar ... itens em coleções e compartilhá-los com outros usuários
Haverá vários tipos de itens e cada um terá opções diferentes, por exemplo, eu posso ter itens de "vídeo" com as seguintes opções:
- Eu iria
- ID do usuário
- collection_id
- título
- plataforma (se incorporada)
- URL (se incorporado)
- nome do arquivo (se hospedado no meu aplicativo)
- tamanho do arquivo (ID hospedado no meu aplicativo)
e itens de "mapa":
- Eu iria
- ID do usuário
- collection_id
- título
- plataforma (google maps, bing maps ...)
- localização
- url
- tamanho do mapa
Como você pode fazer para os usuários, posso usar o MySQL para itens, a flexibilidade do MongoDB pode ser útil, pois cada item pode precisar de opções diferentes e outro item
Até agora, eu sempre usei PHP e MySQL (sempre em hospedagem compartilhada para pequenos projetos) e escalabilidade é uma palavra totalmente nova para mim.
Tenho tempo para aprender, mas gostaria de poder fazer algo concreto em algo como 1 mês.
Eu li muito sobre MongoDB e NoSQL vs RDMS e MySQL e, depois de experimentá-lo, tenho que dizer que gosto de como o MongoDB funciona: sem tabelas, linhas e documentos JSON da seguinte forma:
- Na minha situação, o que você recomendaria? porque?
- Sobre escalabilidade, pode haver problemas com o MongoDB? se sim, quando (em termos de tamanho do banco de dados) e esses problemas podem tornar meu aplicativo consideravelmente mais lento?
Editar: como o aplicativo funcionará
Como muitos perguntaram isso, é como eu gostaria que o aplicativo funcionasse:
- Um usuário se inscreve
- Ele está logado
- Ele criou sua primeira coleção, onde ele pode criar itens infinitos
- Os itens são de vários tipos e cada tipo precisa de dados diferentes para serem salvos no banco de dados e o tipo de itens pode ser adicionado ou modificado
Os usuários podem criar outras coleções e itens dentro dele.
Portanto, temos CRUD para coleções e itens dentro delas e cada coleção / item é encaminhada para um usuário específico
O principal problema com o MySQL é que ele não possui um esquema flexível, existe uma maneira de resolver isso (uma solução alternativa?)?
Pensando no NoSQL, a única dúvida que tenho é sobre associação, por exemplo, dada uma determinada coleção, eu quero recuperar dados relacionados ao campo Usuário com id = user_id na coleção
EDIT: Idéia para continuar usando o MySQL
Crie um campo na tabela "itens" com configurações opcionais, cada configuração dividida por um | ou outro símbolo.
Em seguida, salvarei em algum lugar uma estrutura das configurações opcionais de cada item, por exemplo, o tipo de item "notes" precisa de duas configurações opcionais "color" e "strange_setting". Quando eu obtiver os dados do MySQL, dividirei o campo para configurações opcionais em um matriz sabendo que o primeiro item da matriz é para "cor" e assim por diante.
O que você acha? há problema com essa solução? Você tem outras idéias?