Array in Sqlite3 speichern

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Sirius3: Eine Relationale Algebra über einer 1-elementigen Menge ist zwar ziemlich langweilig, aber immer noch eine Relationale Algebra. Immerhin kann man darauf Selektionen, Projektionen und Self-Joins ausführen.

@snafu: Klar ist ein RDBMS nicht immer die geeignete oder sogar beste Lösung, aber unter bestimmten Bedingungen ist eine DB mit einer einzigen Tabelle immer noch besser, als eine CSV-Datei.
In specifications, Murphy's Law supersedes Ohm's.
Kornblumberg
User
Beiträge: 7
Registriert: Donnerstag 5. März 2015, 14:39

Hey Leute,

das schöne an solchen Foren ist ja immer das sich der TE erstmal ne Weile rechtfertigen und erklären soll :roll: :) .

Das eigentliche Thema Zwecks der Geschwindigkeit wurde noch nicht geklärt...

Um es nochmal zu erwähnen... Die Geschwindigkeit ging beim Lesen über den seriellen Port so in den Keller das ich gerne die Liste komplett in einem Abwasch in die Datenbank geschrieben hätte.. Ist das normal? Habt ihr diese Probleme auch oder geht das bei euch alles relativ zügig??

Um mich nochmal zu rechtfertigen.. Natürlich ist es für diese spezielle Anwendung etwas sinnfrei eine Datenbank zu nutzen...
Wenn wir jetzt aber mal ein paar Wochen/Monate vorraus denken dann kann es gut kommen das der Zeitpunkt der Messung festgehalten wird.. bei/von wem es durchgeführt wurde.. Das gefilterte Signal erstellt wird... Events bestimmt werden usw... Soweit bin ich jetzt aber noch nicht.. Das Problem nach hinten zu schieben wird mich aber auch nicht vorwärts bringen...

MfG

Und wenn einer explizit zu meiner Fragestellung noch was sagen würde wäre ich sehr dankbar.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kornblumberg hat geschrieben: das schöne an solchen Foren ist ja immer das sich der TE erstmal ne Weile rechtfertigen und erklären soll :roll: :) .
Nein, das schöne an so einem Forum wie dem unseren ist, dass sich die Leute hier *Gedanken* um *Dein* Problem machen und eben nicht stumpf alles daran setzen, die von Dir als mutmaßlich sinnvoll erachtete Lösung auf Biegen und Brechen zu realisieren. Dafür ist es oft wichtg zu kapieren, *was* Deine Anforderungen und Restriktionen sind und ggf. auch zu ermitteln, ob es sich evtl. nicht doch um ein XY-Problem handelt. Dies ist leider oft der Fall...

Oft bekommt man dann auch Hinweise auf Alternativen, die man selber gar nicht kennt oder an die man nicht gedacht hat. So etwas erachte ich als enorm wertvoll und bin dankbar dafür!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Kornblumberg
User
Beiträge: 7
Registriert: Donnerstag 5. März 2015, 14:39

natürlich ist das auch gut so!

Sonst wäre es auch quatsch.. aber manchmal wäre eine direkte Antwort auch super :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hatte Dir doch einen feinen, sauberen Ansatz gegeben! Hast Du damit schon experimentiert?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Kornblumberg: Bezüglich der Geschwindigkeit hatte ich doch etwas geschrieben. Natürlich hat das Auswirkungen auf die Samplerate und auch auf Schwankungen weil nicht jedes Sample wegschreiben gleich viel Zeit benötigt. Und das kann wie gesagt auch schon für das wegschreiben von einzelnen Samples in eine Datei gelten, nicht nur bei vergleichsweise hochkomplexen Datenbanken.

Der Datenbankentwurf gibt nicht mehr als eine Messung pro Datenbank her, darum nützt der auch nichts wenn man später mal einen ordentlichen macht in dem dann das geht was man braucht. Und bei Datenbanken ist das eher so das man sich da einmal am Anfang viel Gedanken macht und einen Entwurf hinlegt der dann nahezu in Stein gemeisselt ist. Geht natürlich nicht immer aber DB-Entwürfe sind in der Regel nichts was sich mit dem Programm dynamisch entwickelt, ganz einfach weil das ändern des Entwurfs und migrieren der Daten normalerweise problematischer und zeitintensiver wird, je mehr Daten man bereits in so einer Datenbank gespeichert hat.

Konkret: Schreib die Daten erst nach dem Samplen in Dateien/Datenbanken/Plots/… wenn die Samplerate möglichst hoch und die Schwankungen möglichst klein sein sollen. Setz Dich mit SQL auseinander und versuche zu verstehen warum Du die Fehlermeldung bekommst wenn Du versuchst eine ganze Liste von Werten für den Platzhalter für *einen* Wert einzusetzen. Und dann schau Dir die `Cursor.executemany()`-Methode an. (Wurde nicht alles davon schon gesagt?)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn ums _schnelle_ schreiben in die DB geht spricht das noch mehr für Redis ;-)

Zumal sich in Redis das "DB-Schema" gut abbilden lässt: als Schlüssel der (eindeutige) Name der Messreihe, als Wert eine Liste der Messwerte.

Gruß, noisefloor
BlackJack

@noisefloor: Man könnte auch die Daten als Numpy-Array als BLOB in die SQLite-Datenbank schreiben. Und im Grunde gibt es ja noch gar kein Schema, also im Sinne von man hat sich vorher Gedanken darüber gemacht welche Daten wie gespeichert werden sollen und welche Abfragen die DB dann effizient ermöglichen soll.

Und ob eine Redisdatenbank übers ”Netz” schneller als eine eingebettete SQLite-Datenbank ist, würde ich auch erst einmal messen wollen. Und natürlich schliesst sich dann auch gleich die Frage an ob der Geschwindigkeitsunterschied, egal in welcher Richtung, überhaupt relevant ist.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@BlackJack: ich meinte das anders - Redis sollte wenn schon auf dem Messrechner laufen. Aber man kann halt hinterher auch über's Netzwerk auf die Daten zugreifen.
Und ob eine Redis-Datenbank übers ”Netz” schneller als eine eingebettete SQLite-Datenbank ist, würde ich auch erst einmal messen wollen.
Wenn du das Ergebnis hast würde mich das auch interessieren ;-)

Gruß, noisefloor
BlackJack

@noisefloor: Ich hatte Netz deswegen extra in Anführungszeichen gesetzt. Netzkommunikation auch auf dem lokalen Rechner ist etwas anderes als eine eingebettete Bibliothek direkt im gleichen Prozess aufzurufen.
Antworten