Multiuser Client/Server Anwendung mit Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Freitag 23. Mai 2008, 13:26

Hi,
ich möchte eine Kunden- und Lagerverwaltung in Python schreiben. Als Datenbank verwende ich MySQL. Die Anwendung soll auch von mehreren Usern gleichzeitig genutzt werden können.

Ich überlege jetzt wie ich das angehe. Soll ich die komplette Anwendung in den Client Rechner packen und MySQL auf einen eigenen Server oder wäre es besser die Anwendung selbst in einen Client und Server aufzusplitten, also das der Client selbst eigentlich nur ein grafischer Frontend ist? Ließe sich dafür XML-RPC verwenden?
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Freitag 23. Mai 2008, 13:39

burli hat geschrieben:Ich überlege jetzt wie ich das angehe. Soll ich die komplette Anwendung in den Client Rechner packen und MySQL auf einen eigenen Server oder wäre es besser die Anwendung selbst in einen Client und Server aufzusplitten, also das der Client selbst eigentlich nur ein grafischer Frontend ist? Ließe sich dafür XML-RPC verwenden?
Eigenständiger Server, mit *RPC ist imho eine gute Wahl.
Nachteile bei der nur-Client/DB-Lösung wären mögliche Inkonsistenzen, wenn veraltete Clients installiert sind, und niedrigere Sicherheit (clients brauchen db-zugriff, server kann da feiner granulieren)
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Freitag 23. Mai 2008, 16:39

Den Server würde ich nicht nur aus MySQL bestehen lassen. Gründe: MySQL müsste nach Außen offen sein und du kannst das Backend für die Datenhaltung nicht ändern. Auch muss jeder Client die aktuellen Zugangsdaten kennen, mal eben ohne großen Aufwand das Passwort wechseln (sei es aus Regelmäßigkeit oder nach einem [realen, drohenden oder nicht ausgeschlossenen] Zwischenfall) fällt dann aus. Zudem ist es ein leichtes, mit den Zugangsdaten Schabernack zu treiben, die Datenbank zu manipulieren, schädigen oder eigentlich nicht freigegebene Inhalte auszulesen. Dazu kommt, dass die Verbindung im Normalfall meines Wissens komplett ungeschützt ist.

Wie wäre es mit einer Web-Applikation? Vorteile: Es muss keine Software auf den Clients installiert werden (Browser sind ja nicht erst seit gestern Teil eines jeden aktuellen Desktop-OS) und du hast allen Code auf dem Server, was Updates enorm vereinfacht. HTTPS sorgt für eine zusätzliche Absicherung der Übertragung.
Zuletzt geändert von Y0Gi am Freitag 23. Mai 2008, 16:43, insgesamt 1-mal geändert.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Freitag 23. Mai 2008, 16:41

Von Web Applications halte ich wenig. Dafür ist die Anwendung imho zu komplex
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Freitag 23. Mai 2008, 16:44

Definiere "komplex" für deinen Fall.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 23. Mai 2008, 17:46

Y0Gi hat geschrieben:Definiere "komplex"
Definition von 'komplex' im Kontext 'Web'.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Freitag 23. Mai 2008, 19:30

burli hat geschrieben:Von Web Applications halte ich wenig. Dafür ist die Anwendung imho zu komplex
Angesichts der Tatsache, dass es sowas von kommerziellen Anbietern bereits als Webanwendung gibt, würde ich das jetzt nicht unbedingt unterschreiben ;)
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Freitag 23. Mai 2008, 19:50

[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 23. Mai 2008, 20:08

Hallo burli!

Ich halte ziemlich viel von Datenbankanwendungen mit Client-Server-Architektur. Warum? Weil gute Datenbanken (ich meine jetzt nicht MySQL) einem die Arbeit sehr erleichtern können.

Arbeiten, die du nicht mehr eigens programmieren musst, wenn du ein gutes Datenbanksystem verwendest:

- Benutzeranmeldung
- Einteilung der Benutzer in Gruppen
- Überwachen der Zugriffsberechtigungen (nicht jeder darf gleich viel)
- Datenübermittlung (lokal und auch über das Netzwerk)
- Datenkonstistenz überwachen
- Unvollständige Transaktionen rückgängig machen
- Ausgeklügelte Suchanfragen (z.B. mit Unterabfragen)

Eine gute Datenbank nimmt einem viel Arbeit ab, um die man sich selber kümmern müsste, wenn man einen eigenen Server programmiert. Erst recht, bei solchen Aufgabenstellungen wie einer "Kunden-/Lagerverwaltung".

Überlege dir mal, welche Arbeiten dir ein Serverprogramm in deiner Anwendung abnehmen kann, die das Datenbanksystem nicht schon ausgeklügelter und vielleicht auch besser kann. Das wird nicht besonders viel sein.

Ich empfehle auf MySQL zu verzichten, PostgreSQL zu verwenden und direkt von den Clients aus auf die PostgreSQL-Datenbank zuzugreifen. Das ist schneller in der Anwendung und in der Programmierung und hat sich bereits seit vielen Jahren im Einsatz bewährt.

Programmiere so, dass du globale Module hast, die sich um den Datenbankzugriff kümmern und die Programmlogik enthalten. Diese Module kannst du dann in den verschiedensten Client-Programmen einsetzen. Nur weil du dann keine laufende Serveranwendung hast, heißt das noch lange nicht, dass du für jeden Client die Anwendung neu schreiben musst. Halte dich ein wenig an die Trennung in Datenbankschicht, Middleware und Client. Dann kannst du dein Programm jederzeit um z.B. eine Weboberfläche, eine andere GUI oder Automatisierungsschnittstelle erweitern.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Freitag 23. Mai 2008, 21:29

Hi Gerold,
was macht Postgresql anders/besser als MySQL?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 23. Mai 2008, 22:42

burli hat geschrieben:was macht Postgresql anders/besser als MySQL?
Hallo burli!

Mit PostgreSQL kannst du Tabellen erstellen. Dann kannst du Tabellen untereinander in Beziehung stellen. Du kannst genau regeln, was passieren soll, wenn sich Daten, die miteinander in Beziehung stehen, ändern oder diese gelöscht werden.

Du kannst Prozeduren in der Sprache PL/PGSQL erstellen. Diese Sprache geht über das "normale" SQL hinaus. Man kann damit sogar Ergebnisse einer Abfrage durchlaufen, mit diesen Daten arbeiten, filtern, ändern, oder was auch immer und dann so zurück geben, dass der Client so damit arbeiten kann, als ob er einfach nur eine SQL-Abfrage ausgeführt hätte.

Man kann diese Prozeduren nicht nur in PL/PGSQL schreiben. Nein, mann kann auch Python als Serversprache einsetzen. Was ich bis jetzt aber noch nie gemacht habe.

Du kannst Tabellen partitionieren, so dass alte Daten, die selten gebraucht werden, in einem eigenen Speicherbereich liegen und nur dann mit eingebunden werden, wenn diese benötigt werden.

Du kannst Prozeduren definieren, die automatisch aufgerufen werden, wenn Daten einer Tabelle ausgewählt, gelöscht oder geändert werden. Habe ich schon erwähnt, dass diese Prozeduren auch in Python geschrieben werden können? Das bedeutet, dass du durch eine SQL-Abfrage eines deiner Clients z.B. ein Email vom Server aus verschicken lassen könntest.

Du kannst Regeln definieren, welche beim Hinzufügen oder Ändern von Daten prüfen ob die Daten diesen Regeln entsprechen.

Du hast Rollen zur Verfügung, welche du benutzen kannst um Benutzer und Gruppen zu erstellen und diesen Berechtigungen auf Tabellen zu geben. Diese Rollen kannst du auch für ein eigenes Berechtigungssystem verwenden, da du für jeden Benutzer (Rolle) dessen Zugehörigkeit abfragen kannst.

Als ersten Filter kannst du schon mal einstellen, welcher Computer auf welche Datenbanken zugreifen darf. Und ob auf die Datenbank nur lokal oder entfernt zugegriffen werden darf. Du hast mehrere Authentifizierungsmethoden zur Verfügung: Passwort, MD5, CRYPT, Kerberos, LDAP, PAM,...

Das SQL von PostgreSQL hält sich so gut wie möglich an Standards. In wie weit sich die möglichen SQL-Konstrukte (INNER, OUTER, LEFT OUTER, UNION, ...) von MySQL unterscheiden, kann ich dir nicht sagen. BEGIN TRANSACTION und COMMIT TRANSACTION haben bei PostgreSQL eine Wirkung. Bei MySQL braucht es einen speziellen Tabellentyp dafür. Aber bei den (meistgebrauchten) MyISAM-Tabellen von MySQL gibt es (glaube ich) keine Transaktionen.

Ausgabe von Ergebnissen in XML, Volltextsuche, Regular Expressions in SELECT-Abfragen, Views und temporäre Views, Transaktionen, Row Locking, Verschlüsselte Datenübertragung (SSL), ...

PostgreSQL ist ein Datenbanksystem, dem ich Daten anvertrauen kann. Das sich auch um die Integrität der Daten kümmern kann. Außerdem ist PostgreSQL schon seit vielen Jahren OpenSource. Ein freies Datenbanksystem, welches benutzt, weitergegeben und modifiziert werden darf, ohne dass ich mir vorher eine Lizenz kaufen muss.

Hier steht auch noch was: http://www.postgresql.org/about/

mfg
Gerold
:-)
Zuletzt geändert von gerold am Samstag 24. Mai 2008, 09:39, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Samstag 24. Mai 2008, 08:16

Hi Gerold,
danke für die ausführliche Darstellung, aber es gibt ein paar Punkte die für mich gegen Postgresql sprechen. Am wichtigsten ist wohl: ich hab keine Ahnung von Postgresql und ich brauche auch Zugriff auf meine Webseite und da läuft eh MySQL. Und doppelt lernen will ich nicht unbedingt. Ich denke mit MySQL lässt sich das auch realisieren

tinyerp & co kenne ich. Überzeugt mich aber nicht richtig. Und sowas in HTML & co programmieren muss man auch erstmal können
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Sonntag 25. Mai 2008, 10:00

Gerold, ich bin bei leibe kein Experte, was DBs angeht, aber hat sich MySQL inzwischen nicht auch weiter entwickelt? Constraints für cascaded deletes, trigger und stored procedures (allerdings nicht in Python) kann MySQL auch. Die Aufteilung der Tabellen einer Datenbank in Dateien (tables spaces) kann man ebenfalls beeinflussen. User und Gruppen mit unterschiedlichen Zugriffsrechten (inklusive Beschränkung der Rechner/IP) gibt es auch. Das MySQL verschiedene Tabellentypen mit verschiedenen Eigenschaften (Transaktionen ja/nein) hat, ist doch eher ein Vor- als ein Nachteil. Zu einem XML-Datentyp (wie ihn etwa Derby aka Sun DB hat) habe ich nichts gefunden, aber Volltextsuche kann MySQL wieder.

Zu MySQL hätte ich dann noch anzubieten, dass wahrscheinlich Facebook die weltgrößte Installation von MySQL betreibt - angeblich haben die mehr als 1.800 Datenbank-Server (und insgesamt mehr als 10.000 Server) im Einsatz.

PS: Ich würde bei der Aufgabenstellung eine Webanwendung als portabelste, am einfachsten installier- und verteilbare und erweiterbare Lösung ansehen - auch wenn sie vielleicht nicht so einfach zu realisieren ist.

Stefan
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 25. Mai 2008, 11:13

sma hat geschrieben:Zu MySQL hätte ich dann noch anzubieten, dass wahrscheinlich Facebook die weltgrößte Installation von MySQL betreibt - angeblich haben die mehr als 1.800 Datenbank-Server (und insgesamt mehr als 10.000 Server) im Einsatz.
Yahoo ist mit Postgres auch ganz gut dabei (mit Modifikationen, aber das ist bei Facebook warscheinlich auch nicht anders). Es kommen immer mal wieder Geschichten auf Reddit wie MySQL die Sicherheit von Daten nicht sicherstellt. Nichts gegen mehrere Datenbankbackends, aber das Problem ist, dass die brauchbaren Backends alle nicht MySQL AB gehören, sondern etwa Oracle und die irgendwie so in der Schwebe stehen. Daher schreibt MySQL AB jetzt an "Maria", womit sie ein brauchbares eigenes Backend bringen wollen,
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sonntag 25. Mai 2008, 11:38

sma hat geschrieben:Gerold, ich bin bei leibe kein Experte, was DBs angeht, aber hat sich MySQL inzwischen nicht auch weiter entwickelt?
Hallo Stefan!

Ich bin Experte für Microsoft SQL-Server und langsam (seit ein paar Jahren) entwickle ich mich auch in Richtung PostgreSQL weiter.

Als ich eine Alternative zum MS SQL-Server suchte, informierte ich mich über die Vor- und Nachteile einiger Datenbanksysteme. Was mir beim MySQL-Server bitter hochstieß, war dass manche (vielleicht auch gute) Tabellentypen damals unter einer Lizenz standen, die nicht mit meinen damaligen Zielen vereinbar waren. Und MyISAM ist für Projekte, die Datensicherheit voraussetzen, auch heute noch nicht geeignet.
Außerdem habe ich es alle paar Monate mit MySQL-Datenbanken (mit MyISAM-Tabellen) zu tun, die nicht mehr konstistent sind, und muss beim Übernehmen der Daten die Datenbestände oft händisch nachbessern oder auch Datenverluste in Kauf nehmen.

Damals gab es noch keine Prozeduren in MySQL und das ist ein großes Manko wenn man die zusätzliche Power von gespeicherten Prozeduren kennengelernt hat. Denn eines ist bei einem zentralen Datenbankserver ziemlich wichtig: Je besser man die Daten bereits im Server filtern und vorbereiten kann, desto weniger Daten müssen über das Netz geschickt werden. Und das Netzwerk ist meist der dünnste Flaschenhals im System. Außerdem kann man mit gespeicherten Prozeduren, große SQL-Anweisungen zusammenfassen. So überträgt der Client nicht mehr bei jedem Aufruf die ganze, lange SQL-Anweisung, sondern nur mehr den Aufruf einer Prozedur. Was sich bei sich oft wiederholenden Szenarien sehr schnell rentiert.

Ja, natürlich hat sich MySQL in der Zwischenzeit weiterentwickelt. Wie weit diese Entwicklung fortgeschritten ist, kann ich nicht sagen, da ich mich seit Jahren nicht mehr damit auseinandergesetzt habe. Vor ein paar Jahren war zumindest PostgreSQL der klare Favorit für mich. PostgreSQL bot damals schon annähernd gleich viel Komfort wie der MS SQL-Server. Inzwischen hat sich PostgreSQL sehr in Richtung Oracle weiterentwickelt.

Persönliche Meinung: Ich glaube, dass PostgreSQL für einen "Datenbankprogrammierer" immer noch die bessere Wahl ist. So schnell kann MySQL gar nicht aufholen, denn PostgreSQL entwickelt sich ja auch ständig weiter.

Allerdings muss ich auch dazu sagen, dass PostgreSQL einem nur dann etwas bringt, wenn man sich mit dessen Features auseinandersetzt und sie einsetzt.

Wer einfach nur einen Speicherplatz für seine Daten sucht und alles im Programm macht, für den bietet PostgreSQL kaum mehr oder weniger Vorteile als MySQL. Wer so programmiert, darf sich aber auch nicht wundern, wenn die Performance mit zunehmender Datenmenge einknickt. Richtige Datenbankprogrammierung rentiert sich immer dann, wenn man es mit sehr vielen Daten zu tun hat. Damit meine ich "Millionen", nicht nur "Tausende".

Ich will mich mit niemandem anlegen. Wer MySQL für leistungsfähiger oder besser hält, kann damit Recht haben. Ich weiß es nicht.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten