Beste Vorgehensweise bei der Verarbeitung großer Datenmengen für offline-erste mobile Apps (PouchDB)

9

Also verwende ich Ionic v2 und benutze Pouch für die mobile Entwicklung mit sqlite. Daten stammen von einer REST-API, die etwa Folgendes enthält:

%Vor%

Nun können Sie sehen, dass die Datensatzelemente 100.000 Elemente oder mehr enthalten können (est json size: 32 MB). Im Moment bin ich verloren, welchen Ansatz ich nehmen sollte. Ein optimiertes Datenhandling ist entscheidend und ich weiß nicht, welcher PouchDB-Ansatz besser ist. Hier sind einige meiner Gedanken.

  1. Speichern Sie die gesamten JSON-Daten als einen Eintrag für PouchDB. Aber ich bin besorgt, dass es beim Abrufen einen großen Speicherbedarf hat und diese Anwendung langsam wird.
  2. Chunk die Einträge um einen Beutel Eintrag Datensatz und abrufen Sie es einzeln. Ich bin nicht sicher, ob dies in Bezug auf die Gesamtleistung besser ist, aber PouchDB-Datensatz wird wahrscheinlich größer (?).

Es wird auch sortiert, alle Daten werden abgerufen (nur die _ids und einige Felder, nur um eine Liste aller Ergebnisse anzuzeigen) und die Suche.

    
Mike Shreek 07.10.2016, 04:29
quelle

2 Antworten

0

Wir haben eine ähnliche App, die im Offline-Modus arbeitet und die Daten lokal mit sqlite speichert, aber die Daten, mit denen wir arbeiten, sind vielleicht nicht so groß. Für uns werden die Daten als XML-Datei vom Webservice heruntergeladen; Die XML hat Attribute wie Zeile, Spalte, Wert, Name usw. Die App serialisiert die Daten und konvertiert sie in Objekte, die dann in sqlite eingefügt werden (mit "InsertAll" / "UpdateAll" ist die Einfügung oder Aktualisierung für Gegenstände ziemlich schnell). Diese XML-Dateien werden in die Benutzeroberfläche geladen, und Benutzer können "Wert" -Tags über die Benutzeroberfläche aktualisieren.
Die Suche wird optimiert, indem Benutzerfilter bereitgestellt werden, sodass die Abfrage auf kleineren Daten ausgeführt wird.

Für Ihren Fall kann ich mir 3 Tabellen vorstellen, die Sie verwenden können: -

  

1) Datensätze (Felder: -RecordID, RecordName)   2) Artikel (Felder: - ItemID (PK), RecordID (FK), Artikelname usw.)   3) Zeilen (Felder: -ItemID (FK), RowName, RowValue)

Nachdem Sie Daten aus REST eingegeben haben, können Sie die Daten serialisieren und gleichzeitig in die entsprechenden Tabellen einfügen. Versuchen Sie, Nutzern bei der Suche Filter zu geben, damit der tatsächliche Datensatz kleiner ist.

Ich hoffe, es hilft!

    
AjS 09.02.2017 05:32
quelle
0

Ihre grundlegende Entscheidung ist, ob Sie die Daten einbetten oder darauf verweisen. Hier sind einige allgemeine Regeln für die Entscheidung:

Einbetten wenn:

  • Daten, die normalerweise zusammen abgefragt werden (Beispiel: Benutzerprofil)
  • Kind hängt vom Elternteil ab
  • Eins-zu-eins-Beziehung
  • Eins-zu-wenig-Beziehung
  • Änderungen treten mit ähnlicher Geschwindigkeit auf

Referenz wenn:

  • Unbegrenzte Eins-zu-Viele-Beziehung existiert
  • Viele-zu-viele-Beziehung
  • Gleiche Daten an vielen Stellen wiederholt
  • Daten ändern sich mit unterschiedlichen Raten

Sie haben Recht, wenn Sie alles als einen Datensatz speichern, haben Sie möglicherweise Probleme mit der Größe. Der zusätzliche Speicher, der durch Aufteilen verursacht wird, sollte nicht ins Gewicht fallen.

Sie verwenden Ansichten, um Indizes zu erstellen, die dann in Ihre Abfragen einfließen. Wie Sie das machen, wird wahrscheinlich die Effizienz dominieren.

    
Hod 09.02.2017 06:25
quelle

Tags und Links