Estoy tratando de decidir el mejor enfoque para un CouchApp (sin middleware). Dado que hay similitudes con mi idea, supongamos que tenemos una página stackoverflow almacenada en un CouchDB. En esencia, consiste en la pregunta real en la parte superior, las respuestas y los commets. Esos son básicamente tres capas.CouchDB: documento único frente a "unión" de documentos juntos
Hay dos maneras de almacenarlo. Ya sea en un solo documento que contenga una representación JSON adecuada de los datos, o almacene cada parte de la entrada en un documento separado combinándolos posteriormente a través de una vista (similar a esto: http://www.cmlenz.net/archives/2007/10/couchdb-joins)
Ahora, ambos enfoques pueden estar bien, sin embargo, ambos tienen desventajas masivas desde mi punto de vista actual. Almacenar un documento ocupado (se esperan muchos cambios a través de múltiples usuarios) ya que una entidad de firma causaría conflictos. Si el usuario A almacena sus cambios en el documento, el usuario B recibiría un error de conflicto una vez que haya terminado de escribir su actualización. Me imagino que es posible arreglar esto sin el conocimiento del usuario a través de una nueva descarga del documento antes de volver a intentarlo.
Pero ¿y si el documento es bastante grande? Excepto que se conviertan en una explosión con el tiempo, lo que retrasaría bastante el proceso de salvar, especialmente si el proceso de reintento tiene que ocurrir varias veces debido a que muchos usuarios actualizan un documento al mismo tiempo.
Otro problema que vería es la edición. Todos los usuarios deberían poder editar sus contribuciones. Ahora, si están almacenados dentro de un documento, puede ser difícil escribir un controlador de autenticación sólido.
Bien, ahora veamos el enfoque de documentos múltiples. Pregunta, Respuestas y Comentarios se almacenarán dentro de sus propios documentos. Ventaja: solo el propietario real del documento puede causar conflictos, algo que no ocurrirá con demasiada frecuencia. Al ser elementos más bien pequeños del todo, volver a descargar no tomaría mucho tiempo. Además, la rutina de autenticación debería ser bastante fácil de realizar.
Ahora esta es la desventaja. El documento individual es muy fácil de consultar y mostrar. Tener muchos fragmentos sin clasificar por ahí parece algo desordenado ya que realmente no tuve la visión real de presentarme un objeto JSON 100% listo para usar que contiene el ítem completo en un formato ordenado y estructurado.
espero que he sido capaz de comunicar el problema real. Intento decidir qué solución sería más adecuada para mí, qué problemas son más fáciles de superar. Imagino que la primera solución es la más bonita en términos de almacenamiento y consultas, pero la segunda más práctica se puede resolver a través de una mejor administración de claves dentro de la vista (todavía no estoy del todo en el principio de las claves).
Muchas gracias por su ayuda de antemano :)
¡Hola Ryan! Muchas gracias por su respuesta detallada y comprensible. Me dijiste algunas cosas que aún no sabía. Me las he arreglado para implementar una primera versión de la segunda opción bastante rápido, pero la ajustaré según su entrada. ¡Muchas gracias! :) –