Domanda

Sono già entusiasta dei database dei documenti e in particolare della semplicità di CouchDB. Ma ho difficoltà a capire se tali database sono un'opzione praticabile per i sistemi multiutente. Poiché tali sistemi richiedono un qualche tipo di relazione tra i record che i database dei documenti non forniscono.

È completamente lo strumento sbagliato in questi casi? O alcuni tag e viste temporanee sono il modo per raggiungere questo obiettivo? Oppure ...

UPDATE:
Capisco le risposte finora. Vorrei riformulare un po 'la domanda. Diciamo che ho un sacco di dati semi-strutturati che è normalmente adatto a CouchDB. Posso taggarli come " type = post " e "anno = 2008". La mia domanda è: fino a che punto posso andare con questo tipo di tag? Di che posso creare un campo array con 10.000 nomi? O c'è un modo migliore per farlo? Si tratta di capire come pensare in questo senso basato sul documento.

È stato utile?

Soluzione

C'è stata una discussione sul mailing list un po 'indietro che si adatta abbastanza bene a questa domanda. La regola empirica era quella di archiviare i dati solo in un documento che potrebbe cambiare rispetto a crescere. Se è più probabile che i dati crescano, è molto probabile che tu voglia archiviare documenti separati.

Quindi, nel caso di un sistema multiutente, un modo per implementare le autorizzazioni basate su ACL potrebbe essere quello di creare "documenti di autorizzazione" che sarebbe una mappatura di user_id su doc_id con le autorizzazioni appropriate indicate.

{
    _id: "permission_doc_1",
    type: "acl",
    user: "John",
    docid: "John's Account Info",
    read: true,
    write: true
}

E le tue opinioni sarebbero qualcosa sulla falsariga di

function(doc)
{
    emit([doc.user, doc.docid], {"read": doc.read, "write": doc.write});
}

E dato un docid e userid, il controllo delle autorizzazioni sarebbe:

http://localhost:5984/db/_view/permissions/all?key=["John", "John's Account Info"]

Ovviamente, ciò richiederebbe un intermediario tra il client e il divano per assicurarsi che le autorizzazioni fossero applicate.

Altri suggerimenti

I sistemi multiutente non richiedono database relazionali, sebbene gli RDBMS siano una tecnologia di base per l'archiviazione / recupero dei dati per un vasto numero di applicazioni (specialmente CRUD).

Se vuoi leggere su soluzioni di database distribuite orientate a documenti / oggetti di un tempo, cerca in " Lotus Notes / Domino " (è una tecnologia / un prodotto maturo in quest'area che ha una buona conoscenza di base su come le applicazioni sono progettate in un paradigma basato su documenti. Classicamente, è davvero bravo nelle applicazioni di tipo workflow).

In particolare su CouchDB, controlla:

http://wiki.apache.org/couchdb/ (questo non dovrebbe essere una sorpresa)

http://seanoc.wordpress.com/2007/ 10/12 / more-on-couchdb / (panoramica della descrizione di facile lettura)

http://twit.tv/floss36 (Intervista podcast su CouchDB)

Cosa dice @micahwittman. Solo una rapida aggiunta: le viste temporanee non dovrebbero mai essere utilizzate in un sistema di produzione, sono solo per lo sviluppo. Le viste permanenti possono fare tutto ciò che le viste temporanee possono fare e le dimensioni sono più veloci.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top