Datentransfer von PC Software zu Webserver datenbank Mysql

BTCStorage

Ensign
Registriert
Mai 2020
Beiträge
166
Hallo, ich moechte gerne etwas bauen und bei euch nachfragen welche Technik ich am besten einsetzen sollte.
Was ich bauen will ist folgendes, auf dem PC laeuft eine Software mit der man Crypto Waehrungen handeln kann, diese Software soll Handelsergebnisse an meine Mysql Datenbank senden, am besten jede Minute oder Sekunde, das heist also viel Datentransfer und gleichzeittig soll es auch noch moeglich sein das mehrere Leute ihre Handelsergebnisse/Daten auf mein Webserver senden koennen.
Das heist also wenn alles gut laeuft und ich habe vielleicht 100-1000 Benutzer und alle sollen gleichzeittig ihre Daten an mein Webserver senden koennen zum Abspeichern.

Das sind natuerlich schon eine Menge an Voraussetzungen und ich weis im Moment noch nicht welche Technik man einsetzen soll, zudem bin ich eigentlich auch nur ein geweohnlicher Webentwickler, ich weis wie man Daten an eine PHP Datei senden kann ueber GET oder POST und dann mit der PHP Datei in der Datenbank abspeichern. Aber wenn man so viele Daten und von so vielen Benutzern gleichzeittig versenden und abspeichern will, frage ich mich ob entweder der PHP Server oder die Mysql Datenbank ueberlastet werden oder wie man das generell am besten macht.

Koennt ihr mir Tipps geben was man da einsetzen sollte, muss man da vielleicht in Richtnung Node.js etwas einsetzen oder ganz andere Programmiersprachen?

Die Handelssoftware die eingesetzt wird hat auch eine eigene Programmiersprache und generell eine Funktion fuer den Aufruf von Webseiten wo man dann entweder Daten als Variablen an die URL senden kann, also HTTP GET Variante oder man kan auch per HTTP POST die Daten an die Webadresse versenden. Es gibt auch Moeglichkeiten DLL Dateien zu importieren, beispielweise Windows DLL Dateien und deren Funktionen oder eigene DLL Dateien zu erstellen.
 
Thaxll'ssillyia schrieb:
Nur so mal gefragt: Hast du schon mal was programmiert?

Ich habe nur einfache Sachen bisher gebaut zum Beispiel mit PHP und Javascript Daten in eine Datenbank schreiben/auslesen, also so Standarzeug fuer Webentwickler. Ich habe auch mal mit Node.js etwas ausgetestet und verstehe etwas die Syntax von Sprachen wie C++.

Wenn ihr mir sagen koennt in welche Richtung ich suchen muss ist das auch schon hilfreich, ich nehme an wenn ich jetzt 100 oder 1000 Leute die ganze Zeit meine PHP Datei benutzen lasse damit die Daten in meiner Datenbank speichern wird PHP oder Mysql an seine Grenzen kommen oder?

Als ich bisjen ueber Node.js gelesen hatte dachte ich vielleicht waere es eine bessere Loesung wenn man die Leute Anfragen zum Speichern von Daten zum Node.js Server senden laest, vielleicht ist Node.js fuer sowas besser als PHP, aber was ist dann mit der Mysql Datenbank wird die nicht trotzdem ueberlastest?

usw ich bin zur Zeit erst mal Ideen am suchen wie man sowas ueberahupt aufbauen kann.
 
Als aller erstes: beides kann eine Bremse sein.
Wenn dein PHP-Code schlecht geschrieben ist, also unnötige Schritte drin sind, dann musst du CPU-Kerne und RAM hinterher werfen um die 1000 Nutzer/Minute abarbeiten zu können.
Bei gutem Code ist der Verbrauch dann in der Skalierung deutlich besser.
Was gut und schlecht ist musst du selber herausfinden, da viele Wege zum Ziel führen können.

Bei der Datenbank ist es ähnlich und kann sehr schnell sehr kompliziert werden.
Wie viele SQL-Trigger existieren und müssen mit der Datenbank respektive den Tabellen arbeiten?
Wie ist die Konfiguration deiner Datenbank? Kannst du sie komplett in den RAM laden und asynchron auf die Festplatte schreiben lassen? Musst du große und viele Elemente in die Tabellen schreiben lassen?
Kann man die Aktionen ggf. auf Datenbankebene parallelisieren?
Je nachdem muss man dann auch hier viele CPU-Kerne, viel RAM und ggf. noch schnellere Festplatten dem System zur Verfügung stellen, damit deine Ziele erreicht werden können.

Mal eben was zusammenschreiben geht nicht, da viel zu viele Faktoren da rein spielen.
 
GTrash81 schrieb:
Als aller erstes: beides kann eine Bremse sein.
Wenn dein PHP-Code schlecht geschrieben ist, also unnötige Schritte drin sind, dann musst du CPU-Kerne und RAM hinterher werfen um die 1000 Nutzer/Minute abarbeiten zu können.
Bei gutem Code ist der Verbrauch dann in der Skalierung deutlich besser.
Was gut und schlecht ist musst du selber herausfinden, da viele Wege zum Ziel führen können.

Bei der Datenbank ist es ähnlich und kann sehr schnell sehr kompliziert werden.
Wie viele SQL-Trigger existieren und müssen mit der Datenbank respektive den Tabellen arbeiten?
Wie ist die Konfiguration deiner Datenbank? Kannst du sie komplett in den RAM laden und asynchron auf die Festplatte schreiben lassen? Musst du große und viele Elemente in die Tabellen schreiben lassen?
Kann man die Aktionen ggf. auf Datenbankebene parallelisieren?
Je nachdem muss man dann auch hier viele CPU-Kerne, viel RAM und ggf. noch schnellere Festplatten dem System zur Verfügung stellen, damit deine Ziele erreicht werden können.

Mal eben was zusammenschreiben geht nicht, da viel zu viele Faktoren da rein spielen.

In meinem bisherigen PHP Code habe ich das so gebaut das nachgeschaut wird ob eine Anfrage zum Schreiben vorhanden ist, beispielweise if(isset(GET Variable) && GET Variable==schreiben) {}

Wenn also die PHP Datei aufgerufen wird weil jemand was reischreiben will wird noch eben nachgeschaut ob die Variablen richtige Namen haben und dann wird im Prinzip bereits ein Mysql Query gebildet der an die Datenbank gesendet wird zum Speichern.

Aus der Datenbank selber wird nichts zusatezlich abgefragt, das erleichtert vielleicht schon die Arbeit etwas fuer den Mysql Server.

Ich frage mich im Moment ob man das ueberhaupt mit PHP machen sollte, es hoert sich bei dir nicht so an das du generell von PHP abratest. Wuerde der Einsatz von Node.js hier den irgendeinen Vorteil bringen, soweit ich mich erinnern kann soll Node.js doch gerade fuer Loesungen besser sein wo viele Benutzer gleichzeittig Anfragen senden oder?

Oder waere der Einsatz von ganz anderen Techniken noch besser?
 
BTCStorage schrieb:
ganz anderen Techniken noch besser?
Ja, anstatt einer klassischen SQL-Datenbank, egal ob mariadb, mysql, postgresql, mssql oder sonst was für eine würde ich da zu einer Time Series DataBase raten. Ist für die geplante Art der Datenspeicherung deutlich sinnvoller und performanter.
 
snaxilian schrieb:
Ja, anstatt einer klassischen SQL-Datenbank, egal ob mariadb, mysql, postgresql, mssql oder sonst was für eine würde ich da zu einer Time Series DataBase raten. Ist für die geplante Art der Datenspeicherung deutlich sinnvoller und performanter.

Das ist interessant, das kannte ich auch nicht zuvor.

Denkst du das man nur bei der Datenbank etwas machen sollte oder auch die Programmiersprache fuer die Eingabe der Daten besser auswaehlen?
 
Kann ich nicht beurteilen, bin eher in der Infrastrukturecke (Ops/Security/Architektur/Monitoring) beheimatet. Aber wenn ich deine Anforderung richtig verstehe willst du z.B. sekündlich den Wert von etwas erfassen und genau das ist der perfekte Anwendungsfall für solche TSDBs.
Anhand von Zeitpunkt und Wert kannst du dann anschließend jegliche Änderung berechnen.

Ob und welche Programmiersprache und Umsetzung geeignet ist hängt maßgeblich von zwei Faktoren ab: Die Sprache/Umsetzung sollte performant genug sein um die ankommenden Daten schnell genug weg schreiben zu können und zweitens mit welchen Sprachen und Methodiken du vertraut bist. Es bringt ja nix wenn dir Sprache/Framework XYZ empfohlen wird was du überhaupt nicht kennst und dann dadurch weniger performanten Code erzeugst.
Im Zweifel Loadbalancer davor und das verarbeiten und aufbereiten der Daten parallelisieren.
 
Man kann sowas heute auch gut über REST und SOAP Services lösen, die dann mit einem Message Queue-System (ActiveMQ, RapidMQ) zusammenarbeiten, dann spielt die Datenbank dahinter auch nicht die große Rolle. Generell kann Postgres sehr wohl mit vielen Anfragen und Datenmengen zurechtkommen, ebenso "lachen" die großen Datenbanken auch über Menge von Anfragen, das sollte wohl eher heute nicht mehr das Bottleneck darstellen. Da hängt es eher von anderen Faktoren wie Netzwerkgeschwindigkeit, Performance der Server etc. ab, wie schnell die Anfragen verarbeitet werden können. Ob man für diesen Fall dann unbedingt eine TSDB braucht, halte ich für fraglich.

Gut, in meinen Fällen sind das auch richtige Client-Server Architekturen mit DI und ESB-Systemen, da kommt kein PHP zum Einsatz.
Ergänzung ()

BTCStorage schrieb:
Denkst du das man nur bei der Datenbank etwas machen sollte oder auch die Programmiersprache fuer die Eingabe der Daten besser auswaehlen?
Die Programmiersprache ist eigentlich egal, die meisten machen heute eh direkt JDBC und fertig.
 
Stimme dir voll und ganz zu, dass eine vernünftig aufgesetzte Datenbank, egal welche der großen 3 oder 4, damit zurecht kommt. Ich lese bei deinem Beitrag heraus, dass du beruflich mit relationalen DBs zu tun hast? Falls dem so ist: könnte es sein, dass da ein leichter Hang zu Maslows Hammer vorliegt?^^

Unabhängig davon bin ich aber immer ein Freund von der passenden Lösung für das jeweilige Problem. Die Kurse von irgendwelchen Aktien/Fonds/Währungen sind mMn eine perfekte Zeitreihe. Pro Zeitpunkt gibt es einen zugehörigen Wert.
Bei einer relationalen SQL müsste man doch afaik jeden potentiellen Wert erfassen und jeden Zeitpunkt und dann immer eine Verbindung herstellen zwischen Zeit und Wert oder irgendwie die Veränderung zum vorherigen Wert.
Muss aber auch sagen, dass ich mit DBs, egal ob relational, nosql, tsdb und so weiter nur am Rande zu tun habe und daher eher die konzeptionellen Eigenheiten kenne und nicht alle Details.
 
snaxilian schrieb:
Stimme dir voll und ganz zu, dass eine vernünftig aufgesetzte Datenbank, egal welche der großen 3 oder 4, damit zurecht kommt. Ich lese bei deinem Beitrag heraus, dass du beruflich mit relationalen DBs zu tun hast? Falls dem so ist: könnte es sein, dass da ein leichter Hang zu Maslows Hammer vorliegt?^^
Korrekt. Nicht ich bestimme das, die Kunden. ;) Darunter sind auch MongoDB, Exasol, HDFS....
 
  • Gefällt mir
Reaktionen: snaxilian
Meine Grundidee war ja einfach jede Sekunde eine PHP Datei vom Benutzer aufrufen lassen und die Daten GET von der URL abspeichern, wenn aber 100 oder 1000 Benuter gleichzeittig sowas machen wuerden, habe ich mir gedacht das PHP oder Mysql ueberlastet werden.

Momentan hoert sich das so an das es keine grose Ueberlastung gibt.
 
Darüber könnten wir jetzt tagelang diskutieren, was jetzt hier genau eine gute Lösung und bessere Strategie ist. Ich täts nicht so machen, sondern über eine Queueing Technologie, und nicht über Benutzer, die irgendwas direkt irgendwo aufrufen.
 
  • Gefällt mir
Reaktionen: snaxilian
PHuV schrieb:
Darüber könnten wir jetzt tagelang diskutieren, was jetzt hier genau eine gute Lösung und bessere Strategie ist. Ich täts nicht so machen, sondern über eine Queueing Technologie, und nicht über Benutzer, die irgendwas direkt irgendwo aufrufen.

Ich denke die Loesung mit GET Variablen ist zwar die einfachste aber nicht die beste.

Kannst du den genauere Beispiele sagen wie das mit Queuering funktioniert? Der Begriff scheint irgendetwas in Richtung Warten zu bedeuten.
 
Beispielhafte Techniken wurden bereits in #9 genannt. Beide Programme dort nutzen am Ende dies hier: https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

Sehr stark vereinfacht gesagt ist das eine Warteschlange. An einem Ende stellen Anwender ihre Anfragen in diese Warteschlange ein. Am anderen Ende der Warteschlange hast du irgendeine Software die diese Anfragen aus der Warteschlange nimmt/löscht, die korrekte Antwort auf die Anfrage raus sucht und das Ergebnis dem Anfragenden zurück gibt.
Vorteil dabei ist: Hast du plötzlich einen Ansturm an Anfragen dann wird nicht plötzlich deine Datenbank überlastet sondern die Queue wird einfach länger.
Nachteil: Anfragen dauern ggf. länger bis eine Antwort kommt aber die Anfrage geht nicht verloren.
 
  • Gefällt mir
Reaktionen: PHuV
Waere der Einsatz von Node.js hier nicht auch ein Vorteil? Soweit ich Node.js verstanden habe, kann man damit erreichen das mehrere Anfragen gleichzeittig bearbeitet werden koennen ohne Warteschlange sondern mit Callback, so zu sagen wuerde jede Benutzer Anfrage mit Node.js direkt angenommen werden und sobald der Server oder die Datenbank bereit ist, wuerde die Anfrage bearbeitet werden? Oder habe ich da Node.js falsch verstanden?

Oder kommt das gleiche dabei raus wie wenn 100 oder 1000 Benutzer eine PHP Datei gleichzeittig aufrufen?

Abgesehen von Node.js oder PHP scheint auch die Datenbank eine grose Rolle zu spielen oder haengt es mehr von der Leistung ab die der Server hat, also CPU und RAM, solche Sachen?

Ist schon alles bisjen kompliziert aber sobald man etwas mehr Durchblick hat worauf alles ankommt kann man auch besser auswaehlen was man jeweils einsetzet.
 
Node.js ist mir ein Begriff, wurde aber aufgrund der anderen genannten Technologien fallen gelassen bzw. wurde dann nicht weiter verwendet. Warum, weiß ich nicht, da müßte ich mal unsere Entwickler anhauen.
 
Ich bin mich zur Zeit in das Thema Node.js am reinlesen, aber bisher habe ich das so verstanden das es irgendwie fuer viele gleichzeitige Anfragen gut geeignet ist.

Ich kann aber noch nicht einschaetzen ob es dann die Mysql Datenbank trotzdem nicht mag wenn so viele Anfragen gleichzeitig kommen, also egal ob von PHP oder Node.js oder ob Node.js wirklich ein Vorteil bringt in diesem Konstrukt Gegenueber PHP. Es hoert sich aber irgendwie so an wenn ich Infos ueber Node.js lese, aber man findet auch nicht so leicht ein direktes Beispiel das genau mein Vorhaben wieder spiegelt und dann ganz klar sagt ob Node.js oder PHP dort besser past.
 
Zurück
Oben