Para fines de discusión, consideremos un escenario FourSquare.
Guión
Entidades:
- Los usuarios
- Lugares
Relaciones:
- Checkins: usuarios <-> lugares, muchos a muchos
- Amigos: usuarios <-> usuarios, muchos a muchos
Diseño de bases de datos
Lo más probable es que tengan errores, indíquelos.
RDBMS
Mesas:
- Los usuarios
- Lugares
- Checkins (unión)
- Amigos (unión)
Pros:
- CAP: consistencia, disponibilidad
Contras:
- CAP: tolerancia de partición, también conocido como fragmentación
- esquemas = estructura inflexible
- mala replicación?
Grafico
Objetos:
- Los usuarios
- Lugares
Bordes:
- Amigos: Usuario <-> Usuario
- Registros: Usuario -> Lugares
- contiene marca de tiempo
Pros:
- CAP: consistencia, disponibilidad?
- sin esquemas, objetos y bordes fácilmente mutables
- consultas transversales de gráficos, por ejemplo:
- agrupamiento
- encontrar grupos de amigos
- encontrar restaurantes que le gusten a personas similares
- ¿Alguna otra consulta común / útil?
- agrupamiento
Contras:
- CAP: tolerancia de partición?
Documento / objeto
3 bases de datos separadas?
- Los usuarios
- lista de amigos
- Registros
- marca de tiempo
- usuario
- lugar
- Lugares
Pros:
- CAP: disponibilidad, tolerancia de partición
- objetos sin esquemas, fácilmente mutables
Contras:
- CAP: consistencia
Preguntas
Para el registro, terminaron usando MongoDB. Además de todos esos signos de interrogación anteriores:
- No estoy seguro de cómo implementar una base de datos de documentos.
- ¿Cómo las bases de datos de documentos ganan tolerancia de partición?
- Para obtener los registros de un solo usuario, supongo que la operación analizará todos los registros y filtrará los metadatos por nombre de usuario (mapa + filtro). El rendimiento de analizar más de 1,000,000 de documentos para cada usuario sería terriblemente pobre. ¿Asumo que este no es el comportamiento correcto?
- ¿Qué otras ventajas y desventajas hay?