Datenbank Geschwindigkeitsproblem, 10638 Einträge pro Sekunde müssens sein

  • Antworten:11
Micha
  • Forum-Beiträge: 4

20.11.2014, 15:21:05 via Website

Hy,

ich arbeite momentan an einer App für die ich eine Datenbank benötige, die es schafft ca 10 000 Einträge Pro Sekunde anzulegen.

Die Daten kommen aus einer ArrayList vom eigenen Datentyp.

`public class Data implements Serializable

{
private int value;
private byte value1;
private byte value2;
private int value3;
private byte[] value4;
public Data(int value, byte value1, byte value2, int value3, byte...value4)
{
this.value = value;
this.value1 = value1;
this.value2 = value2;
this.value3 = value3;
this.value4 = value4;
}
//getter setter Methoden lasse ich platzhalber mal weg
}`

Ich habe probiert ob SQLite es mittels bulkinsert packt, aber die benötigte zeit liegt leider bei rund 1500ms.

Ich kenne mich mit anderen Datenbanken innerhalb einer Android App weniger aus und wollte fragen ob es Tipps gibt mit welcher Datenbank und herangehensweise ich es wohl am besten versuche.

— geändert am 21.11.2014, 13:05:47

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

20.11.2014, 15:30:43 via App

Hallo Micha,

Herzlich willkommen bei uns im Forum :)

Bitte beachte, dass Threads mit nicht aussagekräftigem Titel bei uns üblicherweise den Regeln entsprechend entfernt werden. Ich bitte dich daher, deinen Threadtitel bei deinem nächsten Besuch, spätestens jedoch innerhalb der nächsten 24 Stunden noch etwas aussagekräftiger zu gestalten (Hierfür einfach unter deinem ersten Beitrag auf 'bearbeiten' klicken, dann kannst du oben noch mal den Titel anpassen)

Danke :)

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Micha
  • Forum-Beiträge: 4

21.11.2014, 13:07:14 via Website

Hy Ludy,

ich hoffe der Titel ist so aussagekräftiger. Tut mir leid wenn ich da gegen die Regeln verstoßen habe.

Gruß
Micha

Antworten
Fabian Simon
  • Forum-Beiträge: 359

21.11.2014, 13:25:14 via Website

Hallo Micha,
ich denke darüber wirst du keinen Großen einfluss haben !
auch die 1500 ms spiegeln nicht die gesamte Android welt wieder...
Es kommt stark auf ausstattung des Smartphone an, wie schnell dies Abgearbeitet werden kann.

Als optimierungsvorschlag würde ich dir empfehlen nicht die Standart binär serilizierung von Java zu verwenden.
Sondern dich selber um die serilizierung zu kümmern.
Das kann dir vorallem bei der Schreibzahlen etwas bringen.

Da ich nicht weiß was du vorhast... und wenn es dir nur darum geht den User nicht zu belasten.
könntest du auch überlegen die Aufgabe in einen Anderen Thread oder Service zu verlegen und im Hintergrund abarbeiten zu lassen.

Gruß
Fabian

Antworten
Sven R.
  • Forum-Beiträge: 1.904

21.11.2014, 13:25:23 via App

Ich denke 10.000 Einträge pro 1,5 Sekunden sind ganz gut. Machst du das in nem anderen Thread?

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Micha
  • Forum-Beiträge: 4

21.11.2014, 14:19:22 via Website

Die Daten kommen über Bluetooth rein und müssen direkt mit dieser Frequenz persistent gespeichert werden. Verwendet wurde ein Galaxy S4 GT-I9505.

Ich frage mich ob es andere Datenbanken als die Android interne SQLite Datenbank gibt, die evtl. schneller sind. Wenn ich die Daten serialisiere und in eine Datei schreibe habe ich zwar keine Performance Probleme, aber mir fehlen auch viele Funktionen die eine Datenbank so mit sich bringt.

Beim bisherigen Versuch wurden die Daten direkt aus dem Mainthread in die Datenbank geschrieben. Die schon relativ gute Geschwindigkeit bisher resultiert aus der verwendeten Art und Weise. Ich habe mehrere Datensätze nacheinander in einer Transaktion weggespeichert. Das nennt man Bulkinsert.

Im Normalfall würde für jeden Datensatz eine eigene Transaktion verwendet werden.

— geändert am 21.11.2014, 14:22:52

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.11.2014, 14:26:33 via App

Wenn das Bulkinsert immernoch zu langsam ist kannst du die Daten auch auf mehere Threads verteilen und dann speichern. Das sollte dann auch erheblich schneller sein.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

21.11.2014, 15:55:11 via App

Und wenns immer noch zu langsam ist, musst du halt zwischenspeichern(Datei, so wie du gesagt hast) und dann die Einträge machen lassen.
Aber mehrere Threads sollten genügen.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

21.11.2014, 16:28:29 via Website

Das liegt halt sehr an der Hardware und der Auslastung des gesamt Systems.

Evtl kannst du mit RX Java was bauen das besser Skaliert. Oder nimm halt das NDK

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Micha
  • Forum-Beiträge: 4

21.11.2014, 17:07:32 via Website

Danke für die Tipps. Ich werd mal gucken was ich mit Threads noch rausholen kann. Ansonsten bleibt nur noch das NDK als Alternative. Aber doppelt so schnell wirds mit NDK auch nicht laufen oder kann man da soviel mit rausholen?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

22.11.2014, 18:35:02 via Website

Als ob man das so pauschalisieren könnte, schreibe halt Performance Tests, schreibe verschiedene Lösungen, vergleiche!

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Andy N.
  • Forum-Beiträge: 3.112

23.11.2014, 09:14:10 via App

Such mal, ob es für Android eine NoSQL Datenbank gibt. Ich denke da sollte es etwas geben. Wenn du keine relationale Datenbank brauchst sollte die um einiges schneller sein.

— geändert am 23.11.2014, 09:15:00

Antworten