Nunca se puede hablar de la llamada base de datos "NoSQL" sin traer el teorema de CAP (Consistencia, Disponibilidad, Partición: elegir dos). Si tiene que elegir, por ejemplo, entre MongoDB (Partición, Consistencia) y CouchDB (Disponibilidad, Partición), lo primero que debe pensar es "¿Necesito los datos correctos o necesito acceso todo el tiempo?".
Esas nuevas bases de datos se crearon para ser particionadas. Pero, ¿qué pasa si no ? ¿Qué pasa si creo que es muy bueno tener una clave / valor, columna, documento, cualquier base de datos en lugar de una relacional, y solo crear una instancia de servidor y nunca compartirla? En ese caso, ¿no tendría tanto disponibilidad como consistencia? MongoDB no necesitaría replicar nada, por lo que estaría disponible. Y CouchDB tendría solo 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 el término del caso de uso? Bueno, excepto por supuesto el rendimiento, API y otros, pero eso sería más como elegir entre PostgreSQL y MySQL que tener dos conjuntos de requisitos fundamentalmente diferentes.
¿Estoy aquí? ¿Puedo cambiar una base de datos de AP o CP a una AC al no crear más de una instancia? ¿O hay algo que me falta?
Hagamos la pregunta al revés. Qué pasa si tomo una base de datos relacional, digamos MySQL y la puse en una configuración maestro / esclavo. No uso transacciones ACID. Si requiero que cualquier escritura se sincronice con el esclavo de inmediato, ¿no sería eso una base de datos de CP? ¿Y qué pasa si lo sincronizo a unos intervalos predefinidos, y no importa si un cliente lee datos obsoletos de un esclavo? ¿No sería eso una base de datos AP? ¿Eso no significaría que si renuncio al cumplimiento de ACID todavía puedo usar el modelo relacional para una base de datos particionada?
En esencia: ¿la escalabilidad de lo que está dispuesto a renunciar en el teorema de CAP es más que el modelo de datos subyacente? ¿Contar con Columna, Documento, Valor clave, 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 siento, 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 a la Partición, CAP y renunciar a la conformidad ACID. Después de todo, no todos tienen tanta información que necesitan particionarla. ¿Existe un beneficio de rendimiento / escalabilidad por no usar el modelo relacional antes de que siquiera piense en particionar mis datos?