Pregunta

Ya estoy entusiasmado con las bases de datos de documentos y especialmente con la simplicidad de CouchDB. Pero me cuesta entender si tales bases de datos son una opción viable para sistemas multiusuario. Dado que esos sistemas requieren algún tipo de relación entre registros que las bases de datos de documentos no proporcionan.

¿Es la herramienta completamente incorrecta para estos casos? ¿O algunas etiquetas y vistas temporales son la manera de lograr esto? O bien ...

ACTUALIZACIÓN:
Entiendo las respuestas hasta ahora. Pero déjame reformular un poco la pregunta. Digamos que tengo una carga de datos semiestructurados que normalmente es un ajuste para CouchDB. Puedo etiquetarlos como " tipo = publicar " y " año = 2008 " ;. Mi pregunta es ¿hasta dónde puedo llegar con este tipo de etiquetado? Diga, ¿puedo crear un campo de matriz con 10.000 nombres en él? ¿O hay una mejor manera de hacer esto? Es una cuestión de entender cómo pensar en este sentido basado en documentos.

¿Fue útil?

Solución

Hubo una discusión sobre lista de correo hace un tiempo que se ajusta bastante bien a esta pregunta. La regla de oro era almacenar solo los datos en un documento que es probable que cambie o crezca. Si es más probable que los datos crezcan, lo más probable es que desee almacenar documentos separados.

Entonces, en el caso de un sistema multiusuario, una forma de implementar permisos basados ??en ACL podría ser crear 'documentos de permisos' que sería una asignación de user_id a doc_id con el permiso apropiado indicado.

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

Y sus puntos de vista serían algo así como

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

Y dado un docid y userid, la verificación de permisos sería:

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

Obviamente, esto requeriría tener algún intermediario entre el cliente y el sofá para asegurarse de que se aplicaran los permisos.

Otros consejos

Los

sistemas multiusuario no requieren bases de datos relacionales, aunque los RDBMS son una tecnología básica para el almacenamiento / recuperación de datos para una gran cantidad de aplicaciones (especialmente CRUD).

Si desea leer sobre soluciones de bases de datos distribuidas orientadas a documentos / objetos de antaño, busque en " Lotus Notes / Domino " (es una tecnología / producto maduro en esta área que tiene un buen conocimiento de cómo se diseñan las aplicaciones en un paradigma basado en documentos. Clásicamente, es realmente bueno en aplicaciones de tipo flujo de trabajo).

En CouchDB específicamente, echa un vistazo a:

http://wiki.apache.org/couchdb/ (esto no debería ser una sorpresa)

http://seanoc.wordpress.com/2007/ 10/12 / more-on-couchdb / (descripción general de la descripción de lectura fácil)

http://twit.tv/floss36 (Podcast entrevista todo sobre CouchDB)

Lo que dice @micahwittman. Solo una adición rápida: las vistas temporales nunca deben usarse en un sistema de producción, son solo para desarrollo. Las vistas permanentes pueden hacer todo lo que las vistas temporales pueden hacer y son magnitudes más rápidas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top