Para fins de discussão, vamos considerar um cenário do FourSquare.
Cenário
Entidades:
- Comercial
- Lugares
Relacionamentos:
- Checkins: usuários <-> lugares, muitos para muitos
- Amigos: usuários <-> usuários, muitos para muitos
Design do Banco de Dados
É provável que esses erros apresentem erros, indique-os.
RDBMS
Tabelas:
- Comercial
- Lugares
- Checkins (junção)
- Amigos (junção)
Prós:
- CAP: consistência, disponibilidade
Contras:
- CAP: tolerância de partição, também conhecida como sharding
- esquemas = estrutura inflexível
- má replicação?
Gráfico
Objetos:
- Comercial
- Lugares
Arestas:
- Amigos: Usuário <-> Usuário
- Checkins: Usuário -> Locais
- contém carimbo de data e hora
Prós:
- CAP: consistência, disponibilidade?
- objetos e bordas facilmente esquemáticos e sem esquemas
- consultas transversais ao gráfico, por exemplo:
- agrupamento
- encontrando grupos de amigos
- encontrar restaurantes gostados por pessoas semelhantes
- alguma outra consulta comum / útil?
- agrupamento
Contras:
- CAP: tolerância de partição?
Documento / Objeto
3 bancos de dados separados?
- Comercial
- lista de amigos
- Checkins
- timestamp
- do utilizador
- Lugar, colocar
- Lugares
Prós:
- CAP: disponibilidade, tolerância de partição
- objetos esquemáticos e facilmente mutáveis
Contras:
- CAP: consistência
Questões
Para o registro, eles acabaram usando o MongoDB. Além de todos os pontos de interrogação acima:
- Não tenho certeza de como implementar um banco de dados de documentos.
- Como os bancos de dados de documentos obtêm tolerância à partição?
- Para obter as entradas de um único usuário, presumo que a operação analise todas as entradas e filtre os metadados para o nome de usuário (mapa + filtro). O desempenho de analisar mais de 1.000.000 de documentos para cada usuário seria muito ruim. Presumo que este não seja o comportamento correto?
- Que outros prós e contras existem?
Respostas:
Sua pergunta pode ser o tópico de um curso universitário de um semestre. Você precisa dividi-lo em pedaços gerenciáveis. Como tal, vou apenas dar algumas respostas parciais.
Uma das primeiras coisas a considerar ao decidir que tipo de banco de dados usar é que tipo de consultas você executará e se você as conhecerá antes de criar o banco de dados. Os bancos de dados SQL têm a vantagem de consultas poderosas e flexíveis em todos os dados no banco de dados. Os bancos de dados de gráficos têm recursos de consulta altamente especializados que os tornam os melhores para dados gráficos e realmente ruins para dados não gráficos (embora os bancos de dados gráficos possam ser componentes nos bancos de dados SQL). Os bancos de dados NoSQL são muito mais limitados em sua capacidade de recuperar e operar dados.
A seguir, como você se sente sobre as propriedades do ACID: Atomicidade, Consistência, Isolamento e Durabilidade. Os bancos de dados SQL fornecem fortes garantias sobre todos os 4. Os bancos de dados NoSQL normalmente não prometem todos os 4, e as maneiras como eles partem estão entre as principais diferenças que diferenciam as várias implementações de banco de dados NoSQL. Por outro lado, não é possível garantir consistência e disponibilidade em face de uma partição (consulte o thorem CAP do Brewer ); portanto, nenhum banco de dados SQL funcionará se você insistir na disponibilidade total em face de uma partição. Pessoalmente, eu me preocupo muito com a durabilidade dos dados no banco de dados, pois normalmente trabalho com dados em que até uma perda de dados de 0,0001% é inaceitável e os conjuntos de dados são pequenos o suficiente para que eu não precise me preocupar com partições. favorece fortemente os bancos de dados SQL.
Outra consideração muito prática é a qualidade do código do servidor, a disponibilidade de administradores e programadores de banco de dados, a qualidade do suporte disponível para problemas que surgem, a qualidade e a disponibilidade das bibliotecas de interface para conectar seu aplicativo ao banco de dados e assim por diante. O MySQL existe há quase duas décadas, a grande maioria dos bugs foi solucionada, é amplamente utilizado e, portanto, oferece grande suporte e grande disponibilidade de pessoal, e provavelmente será suportado pelos próximos 10 anos. Você não pode dizer nada sobre Riak.
Observe que, embora o Google praticamente tenha inventado os bancos de dados NoSQL para armazenar uma versão em cache e indexada de toda a rede mundial de computadores, eles ainda usam o MySQL para algumas coisas.
fonte