Sto provando a decidere l'approccio migliore per una CouchApp (senza middleware). Dato che ci sono delle somiglianze con la mia idea, supponiamo di avere una pagina StackOverflow memorizzata in un CouchDB. In sostanza consiste nella domanda reale in alto, risposte e comandi. Questi sono fondamentalmente tre strati.CouchDB: documento singolo contro "unire" i documenti insieme
Esistono due modi per memorizzarlo. Sia all'interno di un singolo documento che contiene una rappresentazione JSON adatta dei dati, o memorizzare ogni parte della voce all'interno di un documento separato combinandoli successivamente attraverso una vista (simile a questo: http://www.cmlenz.net/archives/2007/10/couchdb-joins)
Ora, entrambi gli approcci possono andare bene, eppure entrambi hanno enormi aspetti negativi dal mio attuale punto di vista. Memorizzare un documento occupato (sono previste molte modifiche attraverso più utenti) in quanto un'entità signolo potrebbe causare conflitti. Se l'utente A memorizza le sue modifiche al documento, l'utente B riceve un errore di conflitto una volta che ha finito di digitare il suo/l'aggiornamento. Posso immaginare che sia possibile risolvere questo problema senza la conoscenza degli utenti attraverso il nuovo download del documento prima di riprovare.
Ma cosa succede se il documento è piuttosto grande? Farò in modo che non vengano saltati nel tempo, il che metterebbe un notevole ritardo in un processo di salvataggio, specialmente se il processo di ripetizione deve avvenire più volte a causa del numero elevato di utenti che aggiornano un documento contemporaneamente.
Un altro problema che vedrei è la modifica. Ogni utente dovrebbe essere autorizzato a modificare i suoi contributi. Ora, se sono memorizzati in un documento, potrebbe essere difficile scrivere un gestore di autenticazione solido.
Ok, ora vediamo l'approccio con più documenti. Domanda, risposte e commenti verrebbero archiviati all'interno dei propri documenti. Vantaggio: solo il proprietario effettivo del documento può causare conflitti, cosa che non accadrà troppo spesso. Essendo elementi piuttosto piccoli del tutto, il ridownloading non richiederebbe molto tempo. Inoltre la routine auth dovrebbe essere abbastanza facile da realizzare.
Ora ecco il rovescio della medaglia. Il singolo documento è davvero facile da interrogare e visualizzare. Avere un sacco di frammenti non ordinati in giro sembra una cosa disordinata dato che non ho avuto la possibilità di presentarmi con un oggetto JSON 100% pronto per l'uso contenente l'intero articolo in un formato ordinato e strutturato.
spero sono stato in grado di comunicare il problema reale. Cerco di decidere quale soluzione sarebbe più adatta a me, quali problemi più facili da superare. Immagino che la prima soluzione sia la più bella in termini di archiviazione e interrogazione, ma la seconda è la più pratica risolvibile attraverso una migliore gestione delle chiavi all'interno della vista (non sono ancora del tutto nel principio delle chiavi).
La ringrazio molto per il vostro aiuto in anticipo :)
Ciao Ryan! Grazie mille per la tua risposta dettagliata e comprensibile. Mi hai detto alcune cose che non sapevo ancora. Sono riuscito a implementare una prima versione della seconda opzione piuttosto rapidamente, ma la ottimizzerò in base al tuo input. Molte grazie! :) –