Array vs. mySQL

  • Moin!
    Ich hatte mir überlegt vielleicht mySQL in mein Projekt einzubinden. Da ich mit riesigen Array´s umgehen muß (2D) dachte ich mir das diese Daten vielleicht mit mySQL schneller/besser zu verarbeiten sind. Um ein Beispiel zu nennen:
    Im Array1 werden eigentlich nur Koordinaten und sonstige Daten gesetzt.
    Im Array2 dagegen weden 'Temporäre Daten' zwischengespeichert, welche sich auch ständig ändern.
    Array3 ist prinizipiell ein 'LogFile'.
    Sooo, Array2 ist in seiner Grösse variabel und Array3 wird kontinuierlich größer.

    Jetzt denke ich, weil der Speicherverbrauch des Hauptprogrammes gelegentlich bei fast 200MB liegt, diese Daten in eine SQL auszulagern; damit AU3 nicht ständig die Puste ausgeht.
    Ich laß schon darüber das SQL sogar schneller sei als Standart Array´s, stimmt das?!?
    Ich wollte mich mit der UDF von Progandy versuchen, ließ es aber bislang bleiben weil ich mir nicht sicher war ob der 'Aufwand' sich lohnen würde...

    Ich weiß ja das einige damit schon Erfahrung haben, was meint Ihr dazu?? Ist SQL wirklich 'schneller' als meine Riesen-Array´s?? Und kann ich gleichzeitig mit 2 Programmen ein-und-die-selbe SQL Datenbank abfragen; währe auch das möglich ?(


    Grüsse!

    Einmal editiert, zuletzt von Techmix (15. März 2011 um 11:36)

  • Generell würde ich sagen sind Array's schneller weil diese ja im Arbeitsspeicher sin.
    Wenn dein Programm allerdings zuviel Speicher frisst, oder wenn es lange dauert die Array's zu erzeugen würde ich zu SQL tendieren.

    • Offizieller Beitrag

    Es kommt drauf an, was du mit den Werten anfangen willst. Eine komplexe SQL-Abfrage auf Array-Ebene umzusetzen ist sicher wesentlich zeitintensiver.
    Wie gesagt: Der Verwendungszweck ist hier entscheidend.
    Und warum MySQL? SQLite ist doch auch eine prima Alternative und bereits in AutoIt integriert.

  • SqLite währe natürlich auch eine Alternative. Nur habe ich bislang keine Erfahrung mit SQL gesammelt, deswegen ja auch die Fragestellung ;)
    Das Problem ist einfach das Ein- und Auslesen der Array´s, da z.B. Bilder und auch Programme in den Speicher geladen werden (sollen). Und SQL ist ja eine DLL, also kann ich dann ja 'Multithreading' verwenden spich: Der DLL sagen was sie tun soll (welche Daten gerade geladen werden sollen) und mein AU3 Programm kann seine Arbeit in der Zwischenzeit weiter durchführen. Ausserdem denke ich das die SQL ja auch gespeichert werden kann; also das beim nächsten Programmstart die entsprechenden Daten bereits vorhanden sind und nicht jedesmal erneut eingelesen werden müssen.
    Es ist nicht nur der Speicherverbrauch der mir zu schaffen macht, besonders die Zeit die benötigt wird um an die erforderlichen Daten zu gelangen ist explizit hoch, zumal die Hautfunktionen in dieser Zeit stillstehen...

    Ich hatte bereits ein solches 'Problem' mit Excel-Abfragen gehabt, und dieses ganz gut lösen können indem ich die Excel-Abfragen in ein externes Programm ausgelagert hatte (mit TCP steuerung). Dieses geht diesmal aber nicht so einfach, wegen den Datenmengen...

    Grüsse!

  • chip:
    Danke für den Link; aber ich suche prinizpiell nach einer Alternative zu den Au3 standart, egal ob jetzt SQL oder nicht. Und die UDF von Progandy läuft nunmal mit einer DLL und kann mir somit meine AU3 freihalten! Sowas funzt ganz gut!! und deswegen habe ich auch daran gedacht, zumal die UDF von Progandy sowie die 'EzMySql' die einzigsten waren die mir direkt vor die Füße fielen :)

    @all:
    Wie gesagt ich suche nache einer 'schnellen' Datenbankabfrage die am besten über DLL Calls eigenständig Arbeitet. Das Empfangen der Datenmengen sei jetzt mal dahingestellt; wichtig ist mir das meinem Hauptprogramm nicht die Puste ausgeht. Ich dachte ja auch schon selber daran mir eine DLL mit C zu Basteln, wollte mir aber die Arbeit ersparen und schauen ob es nicht schon was ähnliches 'fertiges' gibt; bzw. ich mich damit abfinden muß...

    Grüsse!

    • Offizieller Beitrag

    Wie gesagt ich suche nache einer 'schnellen' Datenbankabfrage


    Bist du dir da sicher? Eine Datenbankabfrage lautet z.B. (als Pseudo-Abfrage):
    Suche: KDNR, Name, Adresse, Telefonnummer
    von: Tab_Kunden, Tab_Umsatz
    wenn: Tab_Kunden.KDNR = Tab_Umsatz.KDNR und JahrVon(Tab_Umsatz.DATUM) = 2010
    sortiert nach: KDNR
    Dabei ist eine SQL-Datenbank unschlagbar. Als reinen Datenspeicher würde ich eine SQL-DB nicht mißbrauchen.

  • chip:
    Danke für den Link; aber ich suche prinizpiell nach einer Alternative zu den Au3 standart, egal ob jetzt SQL oder nicht. Und die UDF von Progandy läuft nunmal mit einer DLL und kann mir somit meine AU3 freihalten! Sowas funzt ganz gut!! und deswegen habe ich auch daran gedacht, zumal die UDF von Progandy sowie die 'EzMySql' die einzigsten waren die mir direkt vor die Füße fielen :)

    Was ist für die Au3 Standard? Du willst einen reinen Datenspeicher und dazu ist eine Datenbank wie SQL nicht gedacht.

    Da dein Array3 ja, wie du schreibst, nur ein logfile ist dann ist es ja sowiso recht unnötig das in einem Array zu machen. Mach es einfach die jedes andere Programm und speichere das log in einer .log ab.
    Genauso dein Array 2 wenn das wirklich echte temporäre Daten sind dann ab damit in eine .tmp

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Nunja, schonmal Danke für die ganzen Antworten!
    Ich überlege mir nochmals wie ich das wohl angehen werde; und mache dann ´ne Rückmeldung. Ich werde mal etwas Testen :)

    Grüsse!