2017-09-15 1 views
1

Ich habe eine ionische 3 PouchDB App, die auf einigen Android-Geräten funktioniert (z. B. 4.4 & 5.0), aber nicht auf anderen (z. B. 7.0.1). Es funktioniert auf allen iPhones! Ich vermute, das liegt an einigen Android-Versionen, die die Anzahl der Webview-DBs auf eine pro App beschränken.Replikation von 2 Remote-DBs zu einer einzigen PouchDB DB, um Android 1 DB-Einschränkung zu umgehen

habe ich gelesen, dass man dieses Problem umgehen kann, ist von SQLite aber SQLite ist sehr viel langsamer und ist besonders langsam für Dokumente DB mit Bildern (die ich habe). Also würde ich gerne meine zwei CouchDB-Datenbanken in einer einzigen PouchDB-Datenbank replizieren.

Ich habe ein paar Fragen:

  1. Gibt es einen Grund, warum dies nicht als eine Möglichkeit, um die Android DB Grenze zu bekommen funktionieren würde? Ich werde einen localDB.replicate.from(remoteDB) für jeden meiner zwei entfernten DBs haben (genannt 'Nachrichten' & 'Ereignisse').
  2. Zur Zeit hat jede meiner CouchDB-Datenbanken Dokumente mit IDs wie: 2017-1 und 2017-12 für den ersten und letzten Monat 2017. Wenn ich die beiden DBs in die eine PouchDB repliziere müssen sie eindeutige IDs haben? Wenn nicht, wie würde ich unterscheiden?

Antwort

1
  1. Ja, Sie so viele dbs in eine DB replizieren können, wie Sie möchten, aber Dokumente mit der gleichen ID sollen "eventual conflicts" werden, wenn sie in eine db repliziert, wird so ein Dokument verlieren und nur in der sichtbar sein fusionierte db durch explizites Anfordern von Konflikten.

  2. Wenn Sie nicht zufällige IDs verwenden, sollten Sie mindestens eines Ihrer dbs aktualisieren, um einen eindeutigen Namespace zu verwenden, z. B. Event-2017-01. Dies vereinfacht auch den Replikationsfilter, den Sie benötigen, wenn Sie die bidirektionale Replikation mit den noch getrennten Remote-DBs implementieren möchten.

ich in der Regel eine doc-Anhänge über einen separaten doc geben, die vorangestellt ist, das heißt: attachment-[orig_id] so können Medien von Replikationen gefiltert werden. Sie sollten in Erwägung ziehen, Anhänge auf diese Weise zu lösen (für mindestens eine der dbs), so dass Sie alle Anhänge in einer "media" db mit dem idealen Adapter für den gegebenen Client mischen und andere Adapter für normale Dokumente verwenden können.

So können beispielsweise Sie haben:

mdb = new Pouchdb('media', {adapter:'idb'}). 
     replicate.from('http...news', {filter:'_view', view:'mediadocs'}). 
     replicate.from('http...events', ...filter...); 
    news = new Pouchdb('news', {adapter:'websql'}). 
     replicate.from('http...news', {filter:'_view', view:'normaldocs'}); 
    events = new Pouchdb('events', {adapter:'websql'}). 
     replicate.from('http...events', {filter:'_view', view:'normaldocs'}); 

Wenn die Felder mit den Medien in einen anderen auf dem ursprünglichen Dokument basiert doc aufgeteilt sind Sie keine redundante Kopien haben noch .. Aber dann können Sie temporäre dbs bauen gefüttert von Nachrichten und Veranstaltungen:

today = new Pouchdb('today', {adapter:'memory'}). 
     replicate.from(news, {selector ..dayview..}). 
     replicate.from(events, ...selector...); 

wo die temporären Datenbanken relativ wenige Ressourcen verwenden, aber ihre Dokumente dienen als Indizes für die Medien db Dokumenten entsprechen.

+0

Danke dafür. Für meine App brauche ich nur die Replikation in eine Richtung (CouchDB bis PouchDB). Ich verwende base64-codierte JPEGs, die in den Dokumenten gespeichert sind, als Felder und nicht als Anhänge, da ich nicht der Meinung bin, dass es einen Leistungsvorteil hat, wenn sie als Anhänge gespeichert werden. Können Sie näher erläutern, wie Sie verschiedene Adapter verwenden würden? –

+0

Gibt es einen Grund, IDB über WebSQL oder umgekehrt zu verwenden? Ist eine weitere für Android die andere für iOS? –

+0

@BillNoble Sie haben wirklich viele stabile Optionen auf Android/ionic. Wenn Sie ein Limit auf IDB treffen, sollten Sie wahrscheinlich nur mit dem WebSQL-Adapter versuchen.indexdb ist der beabsichtigte Weg nach vorne, aber die Idee von pouchdb ist, eine Couchdb über dem laufen zu lassen, was gerade funktioniert ... https://pouchdb.com/adapters.html – lossleader

Verwandte Themen