| |||||||
Das Thema "Datenbankabgleich zu langsam, Ideen benötigt" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Junior Mitglied Registriert seit: 26.02.2010
Beiträge: 40
Abgegebene Danke: 5
Erhielt 11 Danke für 10 Beiträge
| im Zuge des Studiums beschäftige ich mich gerade mit Android Programmierung bzw mit der Kommunikation zwischen Android und einer Datenbank im Netz und hab nun ein kleines Problem. Kurz zum Allgemeinen, es geht um eine Anwendung die sich Messwerte aus dem Netz holt diese verarbeitet und aufbereitet. Lokal habe ich eine DB mit 12 Tabellen, welche Messwerte von einer Datenbank im Netz aufnehmen sollen. Das ganze läuft soweit auch schon, die Messwerte stellt ein Rest Webservice als XML mit xlink Navigation zur Verfügung, welche wider rum von einem SaxParser in Android gelesen werden. Nur musste ich nun leider feststellen das das ganze bei einer großen Anzahl von Messwerten unglaublich langsam ist, nach ner halben Stunde hab ich abgebrochen, selbst 100 Messwerte parsen braucht schon spürbar Zeit. Ich weiss ich könnte noch wegen des geringeren Overheads auf JSON wechseln, aber ich glaube nicht das der Unterschied so dramatisch ausfallen würde. Nun überleg ich beim erstmaligen Start der Anwendung einen partiellen Dump der großen DB herunterzuladen und zu importieren. Danach würde dann ein Service im Hintergrund die Aktualisierung übernehmen, das sollte dann auch zu parsen sein, da nicht so oft ( alle 15min) neue Messwerte kommen. So jetzt aber zur eigentlichen Fragen ![]() Die Pros unter euch können doch bei meinen Ideen sicher nur müde lächeln, was wäre denn der einfachste bzw beste Weg das möglichst schnell & effizient zu implementieren? Danke schonmal für eure Antworten... Mfg MrPink |
| | |
| | #2 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 21.03.2011
Beiträge: 63
Abgegebene Danke: 1
Erhielt 3 Danke für 2 Beiträge
|
Bist du dir sicher, dass es am Parsen selbst liegt und nicht vielleicht am DB-Zugriff? Wie du ja bereits geschrieben hast, dauert es bei großen Datenmengen länger. Eventuell solltest du dir auch mal den Aufbau der DB anschauen, wie dort die Zugriffspfade sind. Ich kann mir gut Vorstellen, dass hier auch einiges an Performance liegen gelassen wird. Was ich auch schon desöfteren gesehen haben, sind Programmierer, die anstatt einen Select auf die DB abzusetzen, für jede Satz einen einzelnen Select inclusive Aufbau der Connection machen. Um wirklich zu schauen wo denn nun die Performance verloren geht, solltest du dir in deinen Code Zeitmessungen einbauen, die in die Logs geschrieben werden. So kannst du immer nachvollziehen, wie lange irgendwas gedauert hat. |
| | |
| | #3 (permalink) |
| Junior Mitglied Registriert seit: 26.02.2010
Beiträge: 40
Abgegebene Danke: 5
Erhielt 11 Danke für 10 Beiträge
|
Danke erstmal für die Antwort, und nee sicher bin ich mir nicht wo genau Zeit verloren geht. ![]() Datenbankzugriff erfolgt in beide Richtungen via Singleton, das mit den Zeitmessungen hab ich mir aber auch schon überlegt und nur mal kurz ausprobiert, ein Datensatz parsen und einfügen lag jeweils bei 500ms ![]() Ich hab allerdings jetzt noch einiges "optimiert" (zumindest hoffe ich das ), z.b. alles auf Stringbuffer umgestellt und darauf geachtet beim iterieren nicht massenhaft Objekte zu erzeugen usw, werd damit nachher mal noch weitermachen und dann heute abend mal schauen wies jetzt läuft, und vor allem was wieviel Zeit braucht. Aktuell konnte ich immerhin in 18min mal 5000 Datensätze parsen, aber das ist natürlich immer noch viel zu lang ![]() Ich glaub immer noch, dass mein Problem architekturbedingt ist, durch xlink ist es mir möglich auf jeden einzelnen Datensatz von Messdaten als XML File zuzugreifen, das hatte ich eigentlich als Vorteil gesehen, bedeutet aber auch das ich jeden einzelnen Eintrag parsen & inserten muss, Also z.b. meinserver.de/sensor01/1 bis meinserver.de/sensor01/5000 sind dann jeweils generierte XML Files mit einzelnen Datensätzen. mfg |
| | |
| | #4 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 06.10.2009
Beiträge: 60
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
|
Hmm, nur weil die Zahl 5000 Datensätze auftaucht. Bei mir dauern die Inserts in die sqlite-db ca. 2 Minuten. 1 Datensatz = 12 Spalten. Der Download incl. "parsen" ca. 20 Sekunden. Übertragen werden die Daten komprimiert und in einem binären Schema | Länge/Wert Format. Die Werte können also sequenziell "angesprungen" werden. Als Server wird eine MySQ-DB verwendet. Bisher hat sich noch niemand beschwert, dass es zu langsam wäre. Vll. bist Du was die Schnittstelle zur DB angeht doch etwas flexibler. XML, JSON ist vll. ned das passende für Dich - oder Du beschränkst Dich eben doch auf den Sync nach einer DB-Initalisierung. Evtl. kannst Du die Daten auf dem Server schon in eine sqlite exportieren und läds die fertige Datei auf das Gerät !? Grüße und viel Erfolg, RB |
| | |
| | #5 (permalink) |
| Ehren-Mitglied Modell: HTC Desire Registriert seit: 21.07.2009
Beiträge: 9.876
Abgegebene Danke: 93
Erhielt 1.785 Danke für 1.389 Beiträge
|
Ich vermute mal, die 5000 (synchronen?) Web-Requests bremsen das ganze aus.
__________________ Thyrion Siemens C25 / Nokia 6510 / SE K700i / Samsung Galaxy I7500 (rooted) / HTC Desire (rooted / S-ON) Kein Support via PN und E-Mail. Bitte das Forum nutzen! Traut Euch, die Suche beißt nicht! - Android-Hilfe.de - Forenregeln - Eine Bitte an alle Android-Neulinge... Kein Punkt? Kein Komma? Keine Hilfe! schreibst du alles klein? dann sind deine shift-tasten aber ganz schön einsam. DRÜCK sie mal öfter! |
| | |
| | #6 (permalink) |
| Ehren-Mitglied |
Das vermute ich auch. Tausende kleiner XML-Dateien einzeln laden klingt für mich auch unglaublich langsam.
__________________ CyanogenMod 7 Nightly - AmonRa Recovery 2.0 - Nexus One Kein Support via PN und E-Mail. Bitte das Forum nutzen. "Es ist Mode geworden, die Freiheitsrechte des Bürgers in den Mittelpunkt zu stellen." - Siegfried Kauder |
| | |
| | #7 (permalink) |
| Junior Mitglied Registriert seit: 26.02.2010
Beiträge: 40
Abgegebene Danke: 5
Erhielt 11 Danke für 10 Beiträge
|
Ja eben, das wars was ich ja vermutet hatte (sollte man eigtlich mit logischen Denken selbst drauf kommen), mittlerweile weis ich es auch sicher ![]() Die Webrequests gehen pro Vorgang 200-300ms, den Datensatz (5 Spalten) dann in die DB schreiben ca 10ms. @RED-BARON Danke erstmal, bezogen sich deine Werte auch auf 5000 Datensätze ? Hättest du zufällig ein Beispiel bzw noch ein paar Stichwörter für mich wie ich die Daten komprimiert im Binärformat übertrage, ich glaube ich stehe gerade etwas auf dem schlauch? Ich denke es wäre kein Problem den Inhalt der MySQL Datenbank auf dem Server noch jeder Aktualisierung in sqlite zu exportieren und zum Download anzubieten, das war ja auch meine erste Idee nachdem ich gemerkt habe wie langsam das ganze ist. Sollte mithilfe von talend Arbeit von ein paar Minuten sein. Ein anderer Ansatz wäre, wenn ich einfach auf dem Server ein PHP Skript ablege, das mir dann je nach Aufruf die ganze Tabelle, oder was eben gewünscht wäre als JSON File ausliefert. Damit hätte ich zumindest mal die große Anzahl an Requests umgangen, wie lang das ganze dann zum parsen braucht müsste ich halt mal noch schauen. Was würdet ihr denn empfehlen ? Geändert von -MrPink- (13.05.2011 um 13:47 Uhr) |
| | |
| | #8 (permalink) |
| Ehren-Mitglied Modell: HTC Desire Registriert seit: 21.07.2009
Beiträge: 9.876
Abgegebene Danke: 93
Erhielt 1.785 Danke für 1.389 Beiträge
|
a) Wieso überträgst du in XML und nicht in z.B. JSON oder Plain CSV (und dabei einfach im WebServer HTTP-Compression aktivieren)? Es ist doch immer die gleiche Datenstruktur, oder? Und bei "Messwerten" wohl auch immer nur Zahlen, das sollte sich super komprimieren lassen - ok, dadurch hast du wieder etwas Verlust beim dekomprimieren, aber denk auch an "kleine" Bandbreiten im Mobilnetz. b) Lass dir pro Sensor alle benötigten Werte geben und nicht einzeln
__________________ Thyrion Siemens C25 / Nokia 6510 / SE K700i / Samsung Galaxy I7500 (rooted) / HTC Desire (rooted / S-ON) Kein Support via PN und E-Mail. Bitte das Forum nutzen! Traut Euch, die Suche beißt nicht! - Android-Hilfe.de - Forenregeln - Eine Bitte an alle Android-Neulinge... Kein Punkt? Kein Komma? Keine Hilfe! schreibst du alles klein? dann sind deine shift-tasten aber ganz schön einsam. DRÜCK sie mal öfter! |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Auf was für Ideen XP kommt :) | geminga | Smalltalk und Offtopic | 18 | 10.11.2010 10:46 |
| Android-Projekt, suche Ideen... | mephisti | Android App Entwicklung | 10 | 09.10.2010 13:35 |
| Noch mehr Speed Ideen | dahool | Root / Hacking / Modding für Samsung Galaxy S | 43 | 13.09.2010 21:02 |
| 2D Spiel - Wegfindung, Ideen | funcoder | Android App Entwicklung | 4 | 25.01.2010 11:12 |
| Ideen für ne Applikation? | mastix | Android App Entwicklung | 2 | 17.08.2009 14:31 |