Pergunta

Isenção de responsabilidade:deixe-me saber se esta pergunta é mais adequada para serverfault.com


Quero armazenar informações sobre música, especificamente:

  • gêneros
  • artistas
  • álbuns
  • músicas

Essas informações serão usadas em uma aplicação web, e quero que as pessoas possam ver todas as músicas associadas a um álbum, e álbuns associados a um artista, e artistas associados a um gênero.

Atualmente estou usando MySQL, mas antes de tomar a decisão de mudar, quero saber:

  1. Quão fácil é dimensionar horizontalmente?
  2. É mais fácil gerenciar do que uma solução baseada em SQL?
  3. Os dados acima que desejo armazenar seriam muito difíceis de serem obtidos sem esquema?
  4. Quando penso em associação, penso imediatamente em RDBMSs;os dados podem ser armazenados em algo como o CouchDB, mas ainda ter algum tipo de associação conforme declarado acima?
  5. Meu aplicativo da web requer replicação. Quão bem o CouchDB ou outros lidam com isso?
Foi útil?

Solução

Este tipo de informação é ideal para documentar bancos de dados.Tal como acontece com muitos dados do mundo real, eles não são inerentemente relacionais, portanto, incorporá-los em um esquema relacional trará dores de cabeça no futuro (mesmo usando um ORM - falo por experiência própria).O Ubuntu já usa o CouchDB para armazenar metadados de música, entre outras coisas, em seus Um produto.

Respondendo ao restante de suas perguntas uma por uma:

  1. A escala horizontal é CAMINHO mais fácil do que com RDBMS.Esta é uma das muitas razões pelas quais grandes sites como Facebook, Digg e LinkedIn estão usando, ou investigando ativamente, bancos de dados sem esquema.Por exemplo, a fragmentação (dividir seus dados em diferentes nós de um sistema) funciona perfeitamente graças a um conceito chamado Consistência eventual;ou seja, os dados podem ser inconsistentes entre os nós por um tempo, mas eventualmente serão resolvidos para um estado consistente.
  2. Depende do que você quer dizer com "gerenciar"...A instalação geralmente é rápida e fácil de concluir.Não há contas de usuário para configurar e proteger (isso geralmente é feito na camada de lógica de negócios do aplicativo).Trabalhar com um banco de dados de documentos em tempo real pode ser interessante:não há consultas ad hoc no CouchDB, por exemplo;você precisa usar a UI do Futon ou se comunicar com ela por meio de solicitações HTTP.O MongoDB, entretanto, oferece suporte a consultas ad hoc.
  3. Eu não deveria pensar assim.A resposta de Bastien fornece um bom exemplo de documento JSON serializando alguns dados.A beleza dos bancos de dados sem esquema é que os campos podem estar faltando em um documento e estar presentes em outro, ou os documentos podem ser completamente diferentes uns dos outros.Isso elimina muitos dos problemas envolvidos com RDBMS' null valor, que são muitos e variados.
  4. Sim;as associações são armazenadas como documentos aninhados, que são analisados ​​em seu aplicativo como referências de objetos, coleções, etc.Na resposta de Bastien, a chave “músicas” identifica uma série de documentos musicais.
  5. Isso é muito semelhante à sua primeira pergunta sobre escalonamento horizontal (escalonamento horizontal e replicação estão interligados).Como afirma a postagem do blog CouchIO que Bastien mencionou, "A replicação… foi incorporada ao CouchDB desde o início".Meu entendimento é que todos os bancos de dados de documentos lidam bem com a replicação e fazem isso com mais facilidade do que configurá-los em um RDBMS.

Se você decidir armazenar o arquivo da música junto com os metadados, você também poderá fazer isso no CouchDB, fornecendo o arquivo da música como um anexo ao documento;além disso, você não teria nenhuma inconsistência de esquema como resultado disso, porque não há esquema!

Espero não ter cometido muitos erros aqui;Eu sou muito novo em documentar bancos de dados.

Outras dicas

Seus dados parecem ideais para bancos de dados orientados a documentos.
Exemplo de documento:
{
"type":"Album",
"artist":"ArtistName",
"album_name":"AlbumName",
"songs" : [
{"title":"SongTitle","duration":4.5}
],
"genres":["rock","indie"]
}

E a replicação é um dos recursos mais legais do CouchDB ( http://blog.couch.io/post/468392274/whats-new-in-apache-couchdb-0-11-part-three-new )
Você também pode querer dar uma olhada em Riak.

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