PouchDB: Mehrere entfernte Datenbanken, einzelne lokale Datenbank (ausgefallene Replikation)

8

Ich habe eine Pouchdb-App, die Benutzer verwaltet.

Benutzer haben eine lokale pouchDB-Instanz, die mit einer einzigen couchDB-Datenbank repliziert. Ziemlich einfach.

Hier wird es etwas kompliziert. Ich führe das Konzept der "Gruppen" in mein Design ein. Gruppen werden verschiedene couchDB-Datenbanken sein, aber lokal sollten sie ein Teil der Benutzerdatenbank sein.

Ich habe ein wenig über "fancy replication" in der pouchDB-Site gelesen und dies scheint die Lösung zu sein, nach der ich gesucht habe.

Nun, meine Frage ist, wie mache ich das? Genauer gesagt, Wie repliziere ich aus mehreren entfernten Datenbanken in eine einzige lokale Datenbank? Einige Codebeispiele sind super.

In meinem Diagramm unten werden Sie feststellen, dass ich Datenbanken dynamisch basierend auf den Gruppen hinzufügen muss, in denen sich der Benutzer befindet. Auch eine Kritik meines Designs wird geschätzt. Danke!

Sollte der Fluss etwas in etwa sein:

  1. Abrufen aller Benutzerdokumente aus seiner Datenbank in localUserDB
  2. %Code% var groupDB = new PouchDB('remote-group-url');
    (irgendwelche Leistungsprobleme mit mehreren pouchdb-Instanzen 0_0?)
  3. Lokal, wenn der Benutzer eine Änderung in Bezug auf eine bestimmte Gruppe vornimmt, ermitteln wir die entsprechende Datenbank und replizieren, indem Sie Folgendes tun:
    groupDB.replicate.to(localUserDB); (Benötige ich gefilterte Replikation?)

Bearbeiten: Nolan empfohlen Ich schaue in das "Rollen" -System von couchDB, um mein Problem zu lösen. Ich werde hier posten, sobald ich es herausgefunden habe.

    
dipole_moment 12.03.2015, 14:00
quelle

1 Antwort

9

Replizieren Sie von vielen entfernten Datenbanken auf Ihre lokale:

%Vor%

Führen Sie dann eine gefilterte Replikation von Ihrer lokalen Datenbank zur entfernten Datenbank durch, die Änderungen erhalten soll:

%Vor%

Warum gefilterte Replikation ? Da Ihre lokale Datenbank Dokumente aus vielen Quellen enthält und Sie nicht alles in die eine entfernte Datenbank replizieren möchten.

Warum eine Filterfunktion ? Da Sie die lokale Datenbank von replizieren, gibt es keinen Leistungsgewinn durch die Verwendung von Konstruktionsdokumenten, Ansichten usw. Geben Sie einfach eine Filterfunktion ein; es ist einfacher. :)

Hoffe das hilft!

Bearbeiten: Es hört sich an, als ob die Namen der Gruppen, denen der Benutzer angehört, tatsächlich in der ersten Datenbank enthalten sind, was Sie unter "iterieren" verstehen. Nein, das solltest du wahrscheinlich nicht tun. :) Sie versuchen, das eingebaute CouchDB-Authentifizierungs- / Berechtigungssystem zu umgehen.

Stattdessen sollten Sie CouchDBs eingebaute Rollen verwenden, diese Rollen auf den Benutzer anwenden und dann ein Schema "Datenbank pro Rolle" verwenden, um sicherzustellen, dass Benutzer nur Zugriff auf ihre richtigen Gruppen-DBs haben. Benutzer können die _users API immer abfragen, um zu sehen, welchen Rollen sie angehören. Einfach!

Weitere Informationen finden Sie in der README der Pouchdb-Authentifizierung .

    
nlawson 12.03.2015, 18:10
quelle

Tags und Links