2009-12-11 4 views
13

J'évalue actuellement les solutions possibles au problème follwing:réplication sélective avec CouchDB

Un ensemble d'entrées de données doit être synchonized entre plusieurs clients, où chaque client peut seule vue (ou même connaître l'existence de) un sous-ensemble des données. Chaque client "possède" certains des éléments, et la décision qui d'autre peut lire ou modifier ces éléments ne peut être faite que par le propriétaire. Pour compliquer encore plus cette situation, chaque élément (et chaque révision d'élément) doit avoir un identifiant unique égal pour tous les clients. Alors que ce dernier semble être une tâche parfaite pour CouchDB (et qu'un modèle de données basé sur un document correspond parfaitement à mes besoins), je ne suis pas sûr que le sous-système d'authentification/autorisation de CouchDB puisse répondre à ces exigences: possible de restaurer l'accès en écriture en utilisant des fonctions de validation, il ne semble pas y avoir moyen d'autoriser l'accès en lecture. Toutes les solutions que j'ai trouvées pour ce problème proposent d'acheminer toutes les demandes de CouchDB via un proxy (ou une couche d'application) qui gère l'autorisation. La question est donc: est-il possible d'implémenter une couche d'autorisation qui filtre les requêtes à la base de données afin que l'accès soit accordé uniquement aux documents auxquels le client demandeur a accès en lecture et utilise toujours le mécanisme de réplication de CouchDB? Simplifié, il s'agirait d'une sorte de «réplication sélective» où seuls certains documents, et non toute la base de données, seraient répliqués.

Je serais également reconnaissant pour les directions à quelques informations détaillées sur la façon dont la réplication fonctionne. Le wiki de CouchDB et même le livre "Guide défini" ne sont pas trop spécifiques à ce sujet.

Répondre

5

cela demande des filtres de réplication. vous filtrez la réplication sortante en fonction des critères que vous définissez, et donnez au propriétaire de la cible un accès illimité à sa propre copie. Je n'ai pas eu l'occasion de jouer directement avec les filtres de réplication, mais l'idée serait que chaque doc ait des informations sur qui y a accès, et le mécanisme de filtrage autoriserait alors la réplication sortante de ces documents seulement que vous avez accès. la réplication de la cible vers le maître ne serait pas restreinte, ce qui permettrait au maître de rester une copie de synthèse et potentiellement de modifier la multidiffusion des ensembles de données qui se chevauchent.

+0

Merci (et andyuk, aussi). On dirait que couchDB est vraiment en train de devenir ce que je cherche. – FRotthowe

+0

avez-vous un exemple de travail? Cependant, la réplication filtrée n'est pas sécurisée. L'utilisateur peut toujours accéder à toutes les données via _all_docs et obtenir – Kinesias

+0

8 ans plus tard? Je ne crains pas :) – kolosy

3

Ce que vous recherchez est des filtres de réplication. Selon Chris Anderson, il s'agit d'une fonctionnalité de 0,11.

« L'état actuel est qu'il n'y a une API pour filtrer les _changes aliments pour animaux. Le duplicateur de 0,10 consomme les changements se nourrissent, alors l'étape suivante est obtenir le réplicateur d'utiliser l'API de filtre .

Il ya des travaux en cours sur ce point, donc il devrait être entièrement prêt à aller dans 0.11. "

Voir la orginal post

1

En effet, comme d'autres l'ont dit, les filtres de réplication sont la voie à suivre pour cela. Here is a link avec quelques informations sur leur utilisation. J'ajouterais que les filtres de réplication à l'échelle peuvent être extrêmement lents. Plus d'informations sur cette et d'autres nuances sur couchdb peuvent être trouvées dans cet excellent blog: "what every developer should know about couchdb".Pour les systèmes à grande échelle, la réplication dans la couche application s'est avérée plus rapide et plus fiable.

+0

lien est mort. S'il-vous-plaît, réparez. – Kinesias

+0

Je n'ai pas réussi à trouver le lien mentionné précédemment, donc j'en ai ajouté un autre, ainsi que mis à jour ma réponse en fonction des expériences plus récentes. – Cory