Nunca se puede hablar sobre la llamada base de datos "NoSQL" sin traer el teorema CAP (Consistencia, Disponibilidad, Partición: elija dos). Si tiene que elegir, por ejemplo, entre MongoDB (Partición, Consistencia) y CouchDB (Disponibilidad, Partición), lo primero que debe pensar es "¿Necesito datos correctos o necesito acceso todo el tiempo?".
Esas nuevas bases de datos fueron hechas para ser particionadas. Pero, ¿y si no lo hago ? ¿Qué sucede si creo que es genial tener una clave / valor, columna, documento, cualquier base de datos en lugar de una relacional, y simplemente crear una instancia de servidor y nunca compartirla? En ese caso, ¿no tendría disponibilidad y consistencia? MongoDB no necesitaría replicar nada, por lo que estaría disponible. Y CouchDB solo tendría una fuente de datos, por lo que sería bastante consistente.
¿Entonces eso significaría que, en ese caso, MongoDB y CouchDB tendrían poca diferencia en términos de uso? Bueno, excepto, por supuesto, el rendimiento, la API y otros, pero eso sería más como elegir entre PostgreSQL y MySQL que tener dos conjuntos de requisitos fundamentalmente diferentes.
Estoy aqui? ¿Puedo cambiar una base de datos AP o CP a una AC al no crear más de una instancia? ¿O hay algo que me estoy perdiendo?
Hagamos la pregunta al revés. ¿Qué sucede si tomo una base de datos relacional, digamos MySQL y la configuro en una configuración maestro / esclavo? No uso transacciones ACID. Si requiero que cualquier escritura se sincronice con el esclavo inmediatamente, ¿no sería eso una base de datos CP? Y qué pasa si lo sincronizo a intervalos predefinidos, y no importa si un cliente lee datos obsoletos de un esclavo. ¿No sería eso una base de datos AP? ¿No significa eso que si dejo de cumplir con ACID todavía puedo usar el modelo relacional para una base de datos particionada?
En esencia: ¿es la escalabilidad sobre lo que está dispuesto a renunciar en el teorema CAP, más que el modelo de datos subyacente? ¿Tener Columna, Documento, Valor clave, lo que sea, da un impulso a la escalabilidad sobre un modelo relacional? ¿Podríamos diseñar una base de datos relacional diseñada desde cero para la tolerancia de partición? (Tal vez ya existe). ¿Podríamos hacer que la base de datos NoSQL sea compatible con ACID?
Lo sentimos, son muchas preguntas, pero he leído mucho sobre la base de datos NoSQL recientemente y me parece que el mayor beneficio de usarlas es que se ajustan mejor a la "forma" de sus datos, en lugar de solo la partición, CAP y renunciar al cumplimiento de ACID. Después de todo, no todos tienen tantos datos que necesitan para particionarlos. ¿Existe un beneficio de rendimiento / escalabilidad al no usar el modelo relacional antes de siquiera pensar en particionar mis datos?
fuente