Performanceproblem mit Datenbank

  • 1 Antworten
  • Letztes Antwortdatum
Micka

Micka

Fortgeschrittenes Mitglied
1
Hy,
ich arbeite gerade an einer App die über Bluetooth Daten empfängt und diese in einer Couchbase Datenbank persistent speichert. Vorab habe ich einige Tests gemacht wie lange es dauert die Daten zu speichern. Dafür habe ich lokal Daten erzeugt und die gespeichert, ohne parallel Daten über Bluetooth zu empfangen. Im Schnitt dauert es 100ms 10000 Datensätze zu speichern.
Wenn ich innerhalb eines Threads Daten empfange und speicher dauert es 1700ms 10000 Datensätze zu speichern. Da pro Sekunde 10000 Datensätze empfangen werden sind 1700ms zum speichern zu langsam.

Ich denke die längere Dauer kommt dadurch das beides in einem Thread passiert.

Ich habe schon probiert das speichern in einen Asynctask auszulagern, aber das war noch langsamer.

Ich frage mich jetzt wie ich das am besten löse. Sollte ich den Datenmanager in einem BoundedService packen? Ist es möglich zwei Prozessor Kerne anzusteuern, je einen fürs empfangen und fürs speichern? Wie Teile ich das am besten? Ziel ist mindestens 10000 Datensätze in unter 1000ms zu speichern. Ich habe bereits verschiedene Datenbanken getestet und festgestellt das Couchbase(dokumentorientierter Key Value Store) schneller ist als SQLite (relationale DB) oder PerstDB(objektorientierte DB).

Für Vorschläge und Ideen bin ich offen.
 
Die CPU Last während Empfang und Speicherung steigt laut Android Monitor im Android Studio auf bis zu 90% auf einem Galaxy S5, bis zu 60% auf einem LG G4. Auf dem G4 werden trotz Empfang nur ca. 800ms fürs speichern benötigt. Es soll aber auch auf dem S4 oder S5 unter 1000ms kommen.
 
Zurück
Oben Unten