• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Asynchrone MySQL

Hooq

Minecrafter
Registriert
27 Oktober 2017
Beiträge
2
Alter
20
Diamanten
302
Hey liebe MCSEU Community,

Ich komme gleich zum Thema: wie programmiert man am besten eine asynchrone MySQL? Ich habe gehört, wenn viele Abfragen nacheinander verlaufen, dass es viel Performance frisst. Ich freue mich schon auf eure Antworten. Ein ein paar Beispiele wären auch ganz nett. :D

Mit freundlichen Grüßen,
Hooq
 
Zuletzt bearbeitet:

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Worker Pool für SQL Aufgaben und dann da alles an Queries reinkippen und mit Callback rausholen. Das wird dir nur vermutlich nichts sagen, aber dein Problem hat nichts mit SQL oder Minecraft zu tun, sondern ist Softwarearchitektur. Wie man mit Worker Pools arbeitet braucht bisschen Erfahrung und vielleicht auch Projekte in denen man mal ne Library genutzt hat, die sowas macht.

Da Minecraft selbst überhaupt keine Multithreading API hat, ist es als Lernbeispiel extrem ungeeignet. Da wirst du nie mit in Berührung kommen. Von daher für dich der selbe Tipp, wie für alle anderen auch: Wenn du keine Ahnung hast, dann lass es. Der naive Ansatz mit einfachen Dateien ist für Anfänger deutlich besser, als Datenbanken. Ich könnte da jetzt noch ins Detail gehen und dir erklären, warum asynchrones Datenbank IO in Minecraft eh fast nie umgesetzt werden kann, aber ich glaub nicht, dass dich das überzeugen würde. Wie gesagt, Bukkit ist dafür nicht gebaut.

Ich habe gehört, dass es viel Performance frisst, sobald viele Abfragen nacheinander gemacht werden. Meine Frage wäre daher, wie man am besten eine asynchrone MySQL programmieren kann.
Das ist übrigens absolut falsch. Die Abfragen brauchen die Zeit, die sie nunmal brauchen. Aufgrund der Tatsache, dass du von dem Thema wenig Ahnung hast, kann ich dir aber versichern, dass die Ausführungszeit für deine Anfragen irrelevant sein wird. Was vermutlich deutlich teurer wird, sind schlecht implementierte Datenbankzugriffe, wie sie von Anfängern nunmal fast durchgehend gebaut werden.

Also sofern du fertig werden möchtest ohne dir Fallen zu bauen, vergiss den Ansatz mit der Datenbank und arbeite einfach mit Dateien un In-Memory Daten. Falls du das Thema lernen willst und bereit bist da mehrere Wochen drin zu versenken und auch die notwendige Zeit hast. Guck dir an, wie man Aufgaben mit explizitem Threading in Worker Pools parallelisiert und was Callback Architekturen sind. Und wenn du das verstanden hast, benutzt du bitte DataSource.

Vorher überlegst du dir aber vielleicht auch, wie du die entsprechenden Events in Bukkit verzögern willst und wie du mit Delays in der Abfrage umgehst. Du kannst den Server nämlich nicht so lange anhalten, bis du deine Daten hast. Und du musst davon ausgehen, dass die Datenbank nicht erreichbar ist und entsprechend deinen State irgendwie konsistent halten. Den Teil vergessen dann leider die Meisten. Eine Datenbank ist nicht cool und sie ist auch nicht besser als Flatfiles. Sie ist eigentlich sogar schlechter, aber ab einem gewissen Punkt kommt man oft nicht mehr ohne aus. Das ist dann der Moment, wo man in den sauren Apfel beißt und die Datenbank einbindet, nicht vorher.
 

Chojo-chan

Teammaid
Social Media
Moderator
Administrator
Registriert
24 März 2013
Beiträge
293
Alter
5
Diamanten
645
Minecraft
Hadde
Das gehört zum guten Ton. Du hast eine Frage. Wir investieren unsere Zeit darin sie zu beantworten. Wenn du deine Frage löscht, können sie andere nicht finden. Wenn das jeder so macht müssen wir jedes mal das selbe erklären und können nicht auf die gleiche Fragestellung verweisen.

Wenn du nett bist stellst du deinen Beitrag oben wieder her. Dann können wir die Antwort wiederherstellen und vielleicht ist nicht nur dir sondern dann auch dem nächsten mit dem gleichen oder ähnlichen Problem geholfen. So funktionieren Foren.
 

Hooq

Minecrafter
Registriert
27 Oktober 2017
Beiträge
2
Alter
20
Diamanten
302
Das gehört zum guten Ton. Du hast eine Frage. Wir investieren unsere Zeit darin sie zu beantworten. Wenn du deine Frage löscht, können sie andere nicht finden. Wenn das jeder so macht müssen wir jedes mal das selbe erklären und können nicht auf die gleiche Fragestellung verweisen.

Wenn du nett bist stellst du deinen Beitrag oben wieder her. Dann können wir die Antwort wiederherstellen und vielleicht ist nicht nur dir sondern dann auch dem nächsten mit dem gleichen oder ähnlichen Problem geholfen. So funktionieren Foren.
Ich habe die Frage schon gelöscht, bevor die erste Antwort reinkam, weil ich sie eigentlich zurückziehen wollte. Naja, sie ist wieder da und ich denke jetzt ist alles wieder gut :)
 
Oben