Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich wollte fix fragen ob man 2 Datenbanken Parallellaufen lassen kann und was ich dafür machen muss?

Dies ist für mein Projekt sehr wichtig.

Beispiel wie ich es mir vorstelle:

Datenbank1 enthällt sämtliche Userspezifische Angaben

Datenbank2 enthällt sämtliche Seitenspezifische Angaben

Aber beide Datenbanken müssen für eine Seite erreichbar sein.

Klar kann man alles in eine Datenbank packen. Aber für dieses Projekt muss es so wie gewünscht sein, sonst geht das ganze Projekt in die Hose oder wenn ich nur eine Datenbank nutzen werd, wird sie irgendwann RIESIG werden.

mfg Aoshi

PS.: Ja ich weiß, manchmal stell ich echt doofe Fragen, aber nur dann wenn die Suchfunktion nicht weiter hilft :(

Geschrieben (bearbeitet)
Ich wollte fix fragen ob man 2 Datenbanken Parallellaufen lassen kann und was ich dafür machen muss?

Klar kannst du das. Wenn es dasselbe DBMS ist, musst du es halt 2mal installieren oder 2 Instantzen mit je einem eigenen Configfile starten. Dabei sollte dann ein unterschiedlicher Platz für die Datenablage und vorallen ein unterschiedlicher Port eingestellt sein.

wenn ich nur eine Datenbank nutzen werd, wird sie irgendwann RIESIG werden.

Was ist für dich RIESIG?

Ich frage das, weil ich aktuell mit einem Datenimport zu tun habe und das erstmal über eine VM getestet wird. Wir mussten schon 2mal die Platte vergrößern und letzten war das ganze dann bei 32GB. Ist deine genauso groß? ;)

Ach ja, das ist ein einzelnes DBMS und mit den richtigen Indizes dauert eine Abfrage trotzdem nur ca 15ms.

Nachtrag: Also ok, die 32GB waren ein Spitzenwert. Nach etwas Aufräumarbeiten (überflüssige Indizes gelöscht etc.) ist das ganze jetzt bei 19GB, wobei da eine Tabelle inkl Indizes ca 11 GB belegt.

Bearbeitet von JesterDay
Geschrieben

Ok, diese Werte wird er nicht erriechen.

Aber für das Projekt müssen mehrere Tabellen angelegt werden (Datenbank2 so die zahl der Tabellen 20 + 20 + 20 usw. und für die Datenbank1 sind es nur 4 und später paar mehr).

Deshalb wollte ich die SQL Datenbank splitten und wenn die Daten angefordert werden er dann entweder aus der 1. oder 2. Datenbank nimmt. Jenachdem was er sucht.

Also beide Datenbanken liegen auf dem gleichen Server (vorerst).

Installiert ist MySQL (eben halt ein Webserver mit Plesk).

Somit kann ich leider direkt nichts am server ändern (sofern es nötig ist).

Daher dacht ich das es mit PHP gehen würde, hier der normale vorgang:

	$dbHost1 = "localhost";
$dbUser1 = "root";
$dbPass1 = "blubb";
$dbName1 = "datenbank1";
$sqlconnect = @mysql_connect("$dbHost1","$dbUser1","$dbPass1") or die("Zurzeit keine Verbindung zur Datenbank möglich!");
$sqlselectDB = @mysql_select_db("$dbName1") or die("Die Datenbank <b>$dbName1</b> konnte nicht gefunden werden!");[/PHP]

Jetzt müsste das genau das gleiche sein:

[PHP] $dbHost2 = "localhost";
$dbUser2 = "admin";
$dbPass2 = "bla";
$dbName2 = "datenbank2";
$sqlconnect = @mysql_connect("$dbHost2","$dbUser2","$dbPass2") or die("Zurzeit keine Verbindung zur Datenbank möglich!");
$sqlselectDB = @mysql_select_db("$dbName2") or die("Die Datenbank <b>$dbName2</b> konnte nicht gefunden werden!");

Also wie setze ich beide zusammen damit ich beide Datenbanken gleichzeitig parallel nutzen kann aber dennoch verschiedene Datenbanken sind.

mfg Aoshi

PS.:@JesterDay, du scheinst ja ganz fit darin zu sein, wa.

Ich beschäftige mich erst seid anfang diesem Jahr damit und versuche zu lernen indem ich es aktiv anwende. Daher keine komischen Fachausdrücke bitte.

Vermute aber das du mit Inditzes mit Tabellen bzw. eintragungen meinst oder? ;)

Geschrieben

Willkommen beim automatischen "Was ist eigentlich die Frage" Service :)

- es geht um php

- es geht um den zugriff auf MYSQL Datenbanken

(oder muss ich denk link "wie man fragen stellt" raussuchen ? ^^)

Indizes sind referenzwerte innerhalb des DBMS "wo" bestimmte informationen zu finden sind, somit arbeitet es schneller. Das hat eigentlich wenig mit den eigentlich gespeicherten Informationen gemeinsam. Eine suchmaschine deiner wahl oder ein sog. "wiki" kann dir mehr sagen ;)

dein Code ist verwirrend, entweder 2 verschiedene hosts oder nicht. 2 Datenbanken auf einem Host sind kein problem, aber es wäre das gleiche als ob du alle tabellen auf eine Datenbank packst -> ich sehe keinen Geschwindigkeitsvorteil.

2 Datenbanken in PHP anzusteuern ist kein Problem, du musst halt mit select_db hin und her springen oder die Datenbank direkt im SQL-Statement verwenden.

Geschrieben

Ich nehme beides. Der zugriff auf beide SQL Datenbanken sollte möglichst mit PHP erfolgen.

Es geht ja nicht um die Performance, das sagte ich nicht, obwohl später falls das Projekt größeren anlauf haben wird ichs eventuell auf 2 unterschiedlichere Hosts setzen werde, sondern eher um die Datenverwaltung (obwohl, warum anfangs eine Datenbank nutzen wenn du später sowieso 2 nutzen musst da beide dann doch getrennt werden).

Ob du es glaubest oder nicht, du hast quasi die Frage wie ich es anstellen kann beantwortet, wobei es mir unklar ist ob es gehen wird.

Jetzt würde ich es so probieren:

    $dbHost1 = "localhost";
$dbUser1 = "root";
$dbPass1 = "blubb";
$dbName1 = "datenbank1";

$dbHost2 = "localhost";
$dbUser2 = "admin";
$dbPass2 = "bla";
$dbName2 = "datenbank2";

$sqlconnect = @mysql_connect("$dbHost1","$dbUser1","$dbPass1") or @mysql_connect("$dbHost2","$dbUser2","$dbPass2") or die("Zurzeit keine Verbindung zur Datenbank möglich!");
$sqlselectDB = @mysql_select_db("$dbName1") or @mysql_select_db("$dbName2") or die("Die Datenbank konnte nicht gefunden werden!");[/PHP]

So müsste doch PHP immer selbst entscheiden welche die passendere wäre.

mfg Aoshi

Geschrieben

also mir hat es sich noch nicht erschlossen wieso man für eine sache zwei datenbanken braucht. Projekt geht nur dann in die hose wenn man auf teufel komm raus das realisiert was der unwissende kunde will und man ihn nicht vernünftig beraten will.

so ad hoc fällt mir keine applikation ein, wo es wirklich sinn macht.

Geschrieben

So müsste doch PHP immer selbst entscheiden welche die passendere wäre.

Es macht keinen Unterschied ob du dich mit einem oder dem anderen Nutzer an der DB anmeldest. Allein die Datenbank ist ja eine andere, aber wie willst du da dann sicherstellen, dass die Daten in beiden gleich ist?

Dein php Code versucht sich zuerst mit einer zu verbinden, wenn das schiefgeht mit der zweiten. Da entscheidet php gar nicht was passender ist.

Wobei ich mir da bei php jetzt gar nicht sicher bin ob das da so geht.

Das einzigste was du damit erreichst ist die anzahl an Tabellen in einer DB. Das spielt aber nur für den Nutzer, also bei der ansicht eine Rolle.

Wenn du vollen zugriff und keine Beschränkung bei der DB Anzahl hast, dann machst du am besten für jede Anwendung eine eigene DB. Aber für eine DB nochmal das ganze aufzuteilen ist sinnlos.

Und ein Index (Singular von Indizes) ist einfach eine Information für den Server, wo er bestimmte Inhalte von Spalten innerhalb der Tabelle findet. Denke das kann man ganz einfach so umschreiben. Es wird dabei dann praktisch nochmal eine Tabelle angelegt, nur eben in einer anderen Reihenfolge. Deswegen brauchen Indizes (wenn es mehrere sind oder auch mehrere Spalten umfassen) meist auch mehr Platz als die Tabelle selbst.

Und ich weiß nicht wegen dem "so fit" ;) .. auf jeden Fall finde ich es nur immer lustig wenn Leute hier mit RIESIGEN Tabellen ankommen, weil ich schon einige wirklich riesige hatte ;) Aber ich war davor genauso :D

Geschrieben
Aber für dieses Projekt muss es so wie gewünscht sein, sonst geht das ganze Projekt in die Hose oder wenn ich nur eine Datenbank nutzen werd, wird sie irgendwann RIESIG werden.

Datenbanken sind extra dafür gemacht RIESIGE Datenmengen zu verwalten. Auch eine mysql sollte mit 20,30 oder mehr GB keine Probleme haben.

An einer zu großen DB ist sicherlich noch kein Projekt gescheitert - eher an mangeldem Wissen über die Datenbank selbst. Da helfen dann auch 3 oder 4 Datenbanken nichts mehr.

Dim

Geschrieben

Ich kann Dir nur raten, ein Projekt = eine Datenbank. Du wirst, wenn Du Teile des Projektes in eine andere DB auslagerst irgendwann Probleme bekommen. Weil Du nicht mehr weißt, wo was gespeichert wurde.

Ich schließe mich da den Vorpostern an, Datenbanken sind für "riesige" Datenmengen, aber nur wenn das Design korrekt ist, sonst wird es schief gehen. Viele DBMS unterstützen innerhalb einer DB Schemata, mit der man auch eine logische Trennung von Tabellen realisieren kann also z.B. eine Schema für die Benutzer mit allen Tabellen die userbezogene Daten enthalten, eines für das CMS usw.

Wenn Du an Ausfallsicherheit / Performance arbeiten musst, dann wären Replikationsserver / Clusterserver eher das Stichwort

HTH Phil

Geschrieben

Also ich muss hier einiges klar stellen damit die vorstellung passender wird.

1. Diese beiden Datenbanken werden keine gleichen Tabellen haben oder auch keine ähnliche.

Es geht nicht darum das die eine Datenbank eine kopie der anderen ist.

2. Für dieses Projekt sind 2 Datenbanken sehr hilfreich. Da am ende es sonst irgendwas von über hundert Tabellen haben dürfte wenn ich alles in einer Stecke.

Darum wollte ich jetzt schon versuchen die Datenbanken zu trennen (wie es sich eigendlich so gehört).

Zudem ist dieses Projekt von keinem Kunden oder so der sich es wünscht. Sondern ist rein Privater sache, somit meiner sache.

3. Es würde nicht direkt scheitern wenn ich es nicht hinbekomme es über 2 Datenbanken laufen zu lassen. Es wäre nur einfacher für die erweiterungen und wartung der Datenbanken.

Somit geht es zurzeit auch nicht über die Performance.

4. Ehrlich gesagt versuche ich mit sowas zurzeit etwas neues, wobei es in geringen bzw. kleinen massen schon gibt.

5. Ich kann und werde über dieses Projekt keine genauen auskünfte geben, abgesehen das es rechtliche gründe hat, mag ich es auch nicht das irgendwer mir dann die idee klaut^^;;

Daher versuche ich zurzeit die Datenbank jetzt schon zu teilen, da ich wenn ich es später machen müsste, die ganze ******e umbauen müsste, worauf ich ehrlich gesagt keine lust habe da mir dieses Projekt genug kopfzerbrechen bereitet.^^

Daher frage ich hier erneut, kann man per PHP es so einrichten das dieser beide SQL Datenbanken parallel nutzt?

Da ich wie gesagt zurzeit nur einen Webserver und keinen RootServer habe, kann ich auch nichts anderes machen als es mit PHP oder andere Websprachen laufen zu lassen.

mfg Aoshi

Geschrieben

1. Diese beiden Datenbanken werden keine gleichen Tabellen haben oder auch keine ähnliche.

Es geht nicht darum das die eine Datenbank eine kopie der anderen ist.

Das ist hier auch in allen Postings nicht so verstanden worden.

2. Für dieses Projekt sind 2 Datenbanken sehr hilfreich. Da am ende es sonst irgendwas von über hundert Tabellen haben dürfte wenn ich alles in einer Stecke.

Darum wollte ich jetzt schon versuchen die Datenbanken zu trennen (wie es sich eigendlich so gehört).

Zudem ist dieses Projekt von keinem Kunden oder so der sich es wünscht. Sondern ist rein Privater sache, somit meiner sache.

Es geht sicher nicht darum, dass Dir jemand Ideen klaut, nur Du hast ein Projekt und dazu der Ratschlag, mache eine Datenbank. Wenn Du eine logische Trennung haben möchtest, dann nutze z.B. anstatt mySQL Postgres und die dort enthaltenen Schemata, dann kannst Du Deine Tabellen in dieser Form ansprechen "datenbank.schema.tabelle", wobei Du wenn Du innerhalb einer Datenbank bist, die Tabelle mit "schema.tabelle" ansprechen kannst.

Es bleibt nach wie vor unverständlich warum 2 Datenbanken und es geht auch nicht klar heraus, ob Du wirklich 2 Datenbanken auf dem selben DBMS Dienst oder 2 Datenbanken auf unterschiedlichen DBMS Diensten haben möchtest.

Die Idee mit "mysql_select_db()" wird so nicht funktionieren, denn was passiert wenn Du in den beiden Datenbanken erreichbar sind. In beiden Fällen liefert der bool True zurück.

3. Es würde nicht direkt scheitern wenn ich es nicht hinbekomme es über 2 Datenbanken laufen zu lassen. Es wäre nur einfacher für die erweiterungen und wartung der Datenbanken.

Somit geht es zurzeit auch nicht über die Performance.

Du kannst einmal über die oben genannten Schemata arbeiten (ob sowas inzwischen auch von mySQL unterstützt wird, müsstest Du nachlesen). Es würde sich evtl auch anbieten die logische Tabellen über ein eigenes Präfix für die Tabellen zu steuern.

5. Ich kann und werde über dieses Projekt keine genauen auskünfte geben, abgesehen das es rechtliche gründe hat, mag ich es auch nicht das irgendwer mir dann die idee klaut^^;;

Dann wäre es nett, wenn Du aufgrund der fachlichen Komponente beschreiben könntest, warum 2 Datenbanken, die im Grunde völlig eigenständig existieren, sinnvoll sind. Gegenargumente sind sicherlich, dass beim Design so etwas extrem aufwendig ist, ebenso die Pflege, da in einem solchen Design 2 Tabellen mit identischen Namen vorkommen können. Zugriffsrechte auf beiden Datenbanken müssen entsprechend gepflegt werden. Sollte eine Trennung des DBMS bestehen, dann müssen hier auch 2 Dienste laufen, die ebenfalls gewartet und gesichert werden müssen. Ebenso musst Du ein Backup immer von 2 Datenbanken erzeugen.

Daher versuche ich zurzeit die Datenbank jetzt schon zu teilen, da ich wenn ich es später machen müsste, die ganze ******e umbauen müsste, worauf ich ehrlich gesagt keine lust habe da mir dieses Projekt genug kopfzerbrechen bereitet.^^

Ich sehe hier alleine schon im Design der Datenbank ein Problem, denn das ERD Modell beschreibt alle Entities für ein Modell. In Deinem Modell müssten 2 ERDs existieren, die aber miteinander in Beziehung stehen.

Daher frage ich hier erneut, kann man per PHP es so einrichten das dieser beide SQL Datenbanken parallel nutzt?

Bitte definiere einmal "parallel". Bei Replikation kümmert sich PHP nicht darum, sondern das DBMS selbst. Innerhalb von PHP musst Du die Datenbank selbst setzen, eben mit "mysql_select_db()" oder als Präfix für die Tabelle. Wenn Du zwei Dienste nutzen willst, dann musst Du zu jedem eine eigene Verbindung aufbauen.

Da ich wie gesagt zurzeit nur einen Webserver und keinen RootServer habe, kann ich auch nichts anderes machen als es mit PHP oder andere Websprachen laufen zu lassen.

Ich rate Dir davon wirklich ab für eine Anwendung 2 Datenbanken zu verwenden. Wenn Du zurzeit auf mySQL entwickelst, dann würde ich Dir empfehlen Dir ADODB anzuschauen, damit Du Dich von dem DBMS löst, somit läuft die Anwendung z.B. auch auf Postgres, MS SQL o.ä.

Phil

Geschrieben

Daher frage ich hier erneut, kann man per PHP es so einrichten das dieser beide SQL Datenbanken parallel nutzt?

Du kannst bei jeder Abfrage die DB-Ressource mitgeben, die du beim connect zurückerhälst. Dann geht die Abfrage an genau diese DB. Automatisch geht da aber nichts.

Bzw. wenn du keine Ressource mitgibst nimmt php automatisch die letzte.

Geschrieben (bearbeitet)

Mit Parallel laufen meine ich das nicht die daten in beide Tabellen bei beiden Datenbanken geschrieben (also keine Spiegelung) werden sondern folgendes:

Datenbank1 ist die Webaplikation zuständig wie News, Downloads, eben alles was man auf der seite einstellen kann ausser Userspezifische und Forenspezifische Daten.

Datenbank2 ist für die Userspezifischen daten wie login, usereinstellungen, avatar, signatur usw. zuständig.

Datenbank3 ist für das Forum zustänig und deren einstellung.

Daher wird keine Tabelle gleichnamig sein. Also wenn in der Datenbank1 die Tabelle "options" gibt, so wird diese nicht in der Datenbank2 oder Datenbank3 zu finden sein.

Alles in einer Datenbank zu legen wäre natürlich möglich. Aber später hätte die eine Datenbank weit über 100 Tabellen und der Server wäre überlastet wenn nur 10 user diese Aplikation nutzen würden (wobei 100 oder mehr User eingeplant sind).

Ich kann dann die Datenbank entweder auf nen sehr teuren Server legen damit die Performance ausgeglichen wird oder ich die gesamte Aplikation von grund auf neu Programmiere damit ich diese Später auseinanderreißen muss (abgesehen davon das ich die Datenbank ebenfalls manuel auseinander nehmen muss) damit ich eben die Datenbanken auf verschiedene Server legen kann.

Da ich alles selbst Programmiere wie die Webaplikation und auch das Forum, so wollt ich aus einfachhaltshalber 3 Datenbanken (oder mindestens 2) verschiedene Datenbanken haben die über das gleiche DBMS laufen.

Abgesehen von der einfachheit wäre es Technisch zurzeit für diese Aplikation nicht möglich in jeder einzellne PHP Datei ein eigenes SQL Connect zu erstellen, da bei mir alles beim aufrufen einer Section in die Index geladen wird.

Zudem kommt es vor das die Userabfrage und eben Aplicationsabfrage in der gleichen PHP liegen (z.B. ob die Usergruppe berechtigt ist änderungen an einstellungen zu tätigen).

Zudem kann ich zurzeit eben nichts ausser HTML, CSS und Lerne gerade PHP, SQL und JavaScript bzw. Ajax.

Da ich dies nicht studiert oder sonst anders erlernt habe, bring ich mir quasi alles selbst bei.

Aus euren Beiträge lese ich herraus das es nicht möglich sei, oder wisst ihr es nicht da dieser fall noch nicht vorgekommen war?

Zu der Frage ob die Datenbanken das gleiche DBMS nutzen oder nicht hatte ich oben schon beschrieben. Diese werden das gleiche nutzen und auch auf dem gleichen Host liegen!!!

Zusammen gefasst:

Alle drei bereiche sollten am liebsten eigene Datenbanken haben aber eine Webaplikation soll mit allen dreien komunizieren können (oder mindestens 2).

Diese Aplikation wird in laufe der Zeit erweitert wo weitere Tabellen angelegt werden müssen und daher am Ende bei nur einer Datenbank sicherlich weit über 100 Tabellen besitzen wird.

Da ich aber nur begrenzte fähigkeiten habe und auch zurzeit nur einen Webserver (somit nur einen FTP server) zur verfügung habe, käme eine andere lösung ausser das ganze mit PHP und MySQL/PHPMyAdmin nicht in frage. (Später wenn wirklich genügend user da sein werden und der Webserver diese ganzen abfragen nicht mehr bewältigen kann, so wird ein RootServer dafür eingerichtet. Da aber dieses Projekt erst in der anfangsentwicklung steht und RootServer nicht auf bäumen wachsen und abgesehen davon ich es jetzt auch nicht Local Testen könnte, bleibt nur diese möglichkeit über PHP und MySQL/PHPMyAdmin)

mfg Aoshi

PS.: Ich hoffe ich konnte all eure Fragen Beantworten. Was ich aber noch am ende Sagen wollte ist, das ich weiß das es möglich ist, da ich es selbst bei der subfirma bei der ich zurzeit arbeite genau so ist (diese benutzen 3 verschiedene Server, 1 Server für die Datenbank, 1 Server für die Webaplikation und 1 Server für die restilichen aber notwendige Daten).

PPS.: Ein "Ja, ist möglich" oder ein "Nein, ist nicht möglich" würde mir ja schon reichen.

Bei ja: Am besten natürlich mit der möglichkeit wie es funktionieren könnte (ohne das ganze FachChinesisch, da ich mich erst seid anfang diesen Jahres mit PHP und SQL beschäftige und wie schon erwähnt ich mir alles selbst beibringe durch rumprobieren usw.)

Bei nein: Naja ne begründung wäre toll aber wenns nicht geht, geht es eben nicht.

Bearbeitet von Aoshi
Geschrieben

Daher wird keine Tabelle gleichnamig sein. Also wenn in der Datenbank1 die Tabelle "options" gibt, so wird diese nicht in der Datenbank2 oder Datenbank3 zu finden sein.

Das magst Du im Moment einmal so sagen können. Durchaus kann aber in der Realität ein solcher Fall eintrete (beliebte Fehler sind "option" und "options"). Deshalb sollte solche Problem durch ein entsprechendes System Design ausgeschlossen werden.

Alles in einer Datenbank zu legen wäre natürlich möglich. Aber später hätte die eine Datenbank weit über 100 Tabellen und der Server wäre überlastet wenn nur 10 user diese Aplikation nutzen würden (wobei 100 oder mehr User eingeplant sind).

100 Tabellen !? Das ist nicht viel. 100 oder auch 1000 konkurierende Zugriffe in einer Datenbank sind durchaus in der Praxis üblich. Hier greift aber auch das Design und zusätzlich die eingesetzte Hardware. Ein fehlerhaftes Design kann selbst die beste Hardware nicht ausbügeln.

Ich kann dann die Datenbank entweder auf nen sehr teuren Server legen damit die Performance ausgeglichen wird oder ich die gesamte Aplikation von grund auf neu Programmiere damit ich diese Später auseinanderreißen muss (abgesehen davon das ich die Datenbank ebenfalls manuel auseinander nehmen muss) damit ich eben die Datenbanken auf verschiedene Server legen kann.

Wenn Deine Applikation jetzt schon Performance Probleme aufweist, dann würde ich Dir raten, ganz schnell Dein Design zu überdenken. Außerdem haben heutige alle DBM Systeme eine sehr hohe Skalierbarkeit (Stichwort Cluster). 100 oder auch 1000 konkurierende Zugriffe sind durchaus kein Problem.

Abgesehen von der einfachheit wäre es Technisch zurzeit für diese Aplikation nicht möglich in jeder einzellne PHP Datei ein eigenes SQL Connect zu erstellen, da bei mir alles beim aufrufen einer Section in die Index geladen wird.

Letztendlich passiert dies aber, denn nachdem die PHP Datei geparst wurde, terminiert der Interpreter. Je nachdem wie die Verbindung (persistent / nicht-persitent) aufgebaut wurde, bleibt sie einen weiteren Zugriff erhalten oder wird nach einer gewissen Timeout-Zeit geschlossen. Ein erneuter Aufruf von einem PHP Script kann entweder zu einer neuen Verbindung, dem Benutzer einer "frei" gegebenen Verbindung oder dem Benutzen der gleichen Verbindung führen. Ist aber eine Konfigurations- und Designsache.

Zudem kann ich zurzeit eben nichts ausser HTML, CSS und Lerne gerade PHP, SQL und JavaScript bzw. Ajax.

Da ich dies nicht studiert oder sonst anders erlernt habe, bring ich mir quasi alles selbst bei.

Aus diesem Grund versuchen wir Dir auch entsprechende Ratschläge zu geben. Je nach Größenordnung des Projektes solltest Du nicht ein reines Lerning-by-Doing machen, denn so wird das Projekt irgendwann an eine Grenze stoßen. Bei der Entwicklung von Projekten geht es zu Beginn um eine solide Planung, um z.B. Skalierbarkeit entsprechend zu bewerten. Außerdem sollte man durchaus verschiedene Systeme im Hinblick auf deren Einsatz bewerten. Nicht immer ist die *AMP Lösung die für das Projekt sinnvollste.

Aus euren Beiträge lese ich herraus das es nicht möglich sei, oder wisst ihr es nicht da dieser fall noch nicht vorgekommen war?

Ich denke, dass hier einige durchaus auch größere Projekte, wie das von Dir beschriebene, betreuen und durchaus bewerten können, inwieweit Dein Vorhaben sinnvoll ist oder nicht.

Alle drei bereiche sollten am liebsten eigene Datenbanken haben aber eine Webaplikation soll mit allen dreien komunizieren können (oder mindestens 2).

Diese Aplikation wird in laufe der Zeit erweitert wo weitere Tabellen angelegt werden müssen und daher am Ende bei nur einer Datenbank sicherlich weit über 100 Tabellen besitzen wird.

Die Anzahl der Tabellen oder wer mit wem kommuniziert ist im Grunde unerheblich, außer sie ist durch Quotas beschränkt.

Da ich aber nur begrenzte fähigkeiten habe und auch zurzeit nur einen Webserver (somit nur einen FTP server) zur verfügung habe, käme eine andere lösung ausser das ganze mit PHP und MySQL/PHPMyAdmin nicht in frage.

Ein Webserver ist kein FTP Server.

(Später wenn wirklich genügend user da sein werden und der Webserver diese ganzen abfragen nicht mehr bewältigen kann, so wird ein RootServer dafür eingerichtet. Da aber dieses Projekt erst in der anfangsentwicklung steht und RootServer nicht auf bäumen wachsen und abgesehen...

Ein Rootserver und ein Webserver sind hier auch 2 verschiedene Schuhe. Du hast auf Deinem Rootserver, dann wohl auch einen Webserver laufen.

... davon ich es jetzt auch nicht Local Testen könnte, bleibt nur diese möglichkeit über PHP und MySQL/PHPMyAdmin)

Wieso nicht? Es gibt fertige Pakete für fast jedes OS, das Dir ein *AMP System zur Verfügung stellt.

PS.: Ich hoffe ich konnte all eure Fragen Beantworten. Was ich aber noch am ende Sagen wollte ist, das ich weiß das es möglich ist, da ich es selbst bei der subfirma bei der ich zurzeit arbeite genau so ist (diese benutzen 3 verschiedene Server, 1 Server für die Datenbank, 1 Server für die Webaplikation und 1 Server für die restilichen aber notwendige Daten).

Möglich ist immer viel, ob und in wieweit dies auch eine sinnvolle Lösung ist, muss man im Einzelfall klären. Letztendlich kann ich um eine sehr hohe Skalierbarkeit zu erreichen, 3 Systeme, die jeweils wiederum als Cluster betrieben werden können realisieren: Webserver (als Cluster) für die Auslieferung der Seiten, Applikationsserver (als Cluster) für die Bearbeitung der Daten und Datenbankserver (als Cluster) für die Datenhaltung.

In einem solchen System hätte ich nur eine Datenbank, aber durch Redundanzen einmal eine Ausfallsicherheit und Performancesteigerung.

PPS.: Ein "Ja, ist möglich" oder ein "Nein, ist nicht möglich" würde mir ja schon reichen.

Automatisiert nein, bzw nur in der Form wie es @JesterDay beschrieben hat.

Du kannst innerhalb einer Verbindung die Datenbank immer hin und her ändern oder auch 2 Verbindungen zu dem selben Host zu den unterschiedlichen Datenbanken aufbauen, aber bedenke dann dabei dass pro Scriptaufruf 2 oder mehr Verbindungen aufgebaut werden. Wenn sie nicht ordnungsgemäß geschlossen werden, dann wird irgendwann keine neue Verbindung mehr zum DBMS aufgebaut werden können.

Bei ja: Am besten natürlich mit der möglichkeit wie es funktionieren könnte (ohne das ganze FachChinesisch, da ich mich erst seid anfang diesen Jahres mit PHP und SQL beschäftige und wie schon erwähnt ich mir alles selbst beibringe durch rumprobieren usw.)

Bei nein: Naja ne begründung wäre toll aber wenns nicht geht, geht es eben nicht.

Ich bitte Dich, da Du neu in diesem Bereich bist, Dir erst die notwendigen praktischen, sowie theoretischen Grundlagen an zu eigenen, um solche Projekt auch kompetent durchführen zu können bzw. arbeite mit jemanden zusammen, der in diesem Bereich das entsprechende Wissen und Erfahrung vorweisen kann. Große Projekte, die mal schnell zusammen gecoded wurden, sind eigentlich dazu verurteilt zu scheitern bzw. müssen irgendwann einem aufwändigen Redesign unterzogen werden.

Phil

Geschrieben

Danke dir das du so ausführlich warst.

Wiederum muss ich bei manchen dingen dir wiedersprechen.

Das magst Du im Moment einmal so sagen können. Durchaus kann aber in der Realität ein solcher Fall eintrete (beliebte Fehler sind "option" und "options"). Deshalb sollte solche Problem durch ein entsprechendes System Design ausgeschlossen werden.

Naja das mit den "option" war ein beispiel. Ehrlich gesagt gibt es Präfix am anfang wie z.B. "user_option" und "aplikation_option" usw.

100 Tabellen !? Das ist nicht viel. 100 oder auch 1000 konkurierende Zugriffe in einer Datenbank sind durchaus in der Praxis üblich. Hier greift aber auch das Design und zusätzlich die eingesetzte Hardware. Ein fehlerhaftes Design kann selbst die beste Hardware nicht ausbügeln.

Ja aber ich bin ein Anfänger und somit wäre für mich die Wartung sehr aufwändig. Daher versuche ich es im vorfeld zu vereinfachen.

Wenn Deine Applikation jetzt schon Performance Probleme aufweist, dann würde ich Dir raten, ganz schnell Dein Design zu überdenken. Außerdem haben heutige alle DBM Systeme eine sehr hohe Skalierbarkeit (Stichwort Cluster). 100 oder auch 1000 konkurierende Zugriffe sind durchaus kein Problem.

Zurzeit gibt es natürlich keine Performanceprobleme da es zurzeit um die 10 Tabellen gibt (gesamt) und es noch sehr weit im Anfangsstadium befindet.

Ein Webserver ist kein FTP Server.

Ja streng genommen liegst du richtig. Webserver ist eben z.B. apache.

Leider meine ich damit das ich nicht wirklich an ServerAplikationen zugrif habe und diese auch nicht ändern kann. Also eben nur einen FTP Server.

Du kannst innerhalb einer Verbindung die Datenbank immer hin und her ändern oder auch 2 Verbindungen zu dem selben Host zu den unterschiedlichen Datenbanken aufbauen, aber bedenke dann dabei dass pro Scriptaufruf 2 oder mehr Verbindungen aufgebaut werden. Wenn sie nicht ordnungsgemäß geschlossen werden, dann wird irgendwann keine neue Verbindung mehr zum DBMS aufgebaut werden können.

Bei mir steht oben in der index.php der verbindungsaufbau und am ende wird diese sowieso geschlossen.

Ich bitte Dich, da Du neu in diesem Bereich bist, Dir erst die notwendigen praktischen, sowie theoretischen Grundlagen an zu eigenen, um solche Projekt auch kompetent durchführen zu können bzw. arbeite mit jemanden zusammen, der in diesem Bereich das entsprechende Wissen und Erfahrung vorweisen kann. Große Projekte, die mal schnell zusammen gecoded wurden, sind eigentlich dazu verurteilt zu scheitern bzw. müssen irgendwann einem aufwändigen Redesign unterzogen werden.

Webentwickler wachsen genauso wenig auf bäumen und das dann jemand seine Freizeit opfern will um mir dinge bei zu bringen verringert die Chance erheblich.

Somit bleibt mir nichts anderes übrig ausser aufs Internet zuzugreifen und durch rumprobieren dies umzusetzen damit ich es aktiv lerne.

Man lernt eh am Besten etwas wenn man es auch umsetzt, da hilft einfaches PHP Buch durchlesen rein garnichts.

mfg Aoshi

Geschrieben

Webentwickler wachsen genauso wenig auf bäumen und das dann jemand seine Freizeit opfern will um mir dinge bei zu bringen verringert die Chance erheblich.

Somit bleibt mir nichts anderes übrig ausser aufs Internet zuzugreifen und durch rumprobieren dies umzusetzen damit ich es aktiv lerne.

Man lernt eh am Besten etwas wenn man es auch umsetzt, da hilft einfaches PHP Buch durchlesen rein garnichts.

Als Anfänger ist aber ein solches Projekt schwer überschaubar. Bei solchen Projekt sollte man eben nicht alles von Hand selbst bauen, z.B. wären hier Sachen wie Zend, ADODB, Webservices, eine 3 gliedriges Systemdesign (DBMS, Anwendungsserver und "FrontEnd"), XML, XSLT, Ajax usw durchaus Sachen, über die man nachdenken kann.

Zusätzlich würde eben ein Projektmanagement im Sinne von Dokumentation und Code Revision dazu gehören, denn ab einer gewissen Größe läuft so etwas schnell aus dem Ruder.

Das Lerning-by-reading ist immer so eine Sache, es wird nur bis zu einem gewissen Grad funktionieren. Hier wäre wirklich zunächst das Konzept der erste Schritt.

HTH Phil

Geschrieben

Wenn ich dein Projekt richtig einschätze hier ein paar tips:

du wirst deinen eigenen Code einige hundert mal umschreiben, einige duzend mal komplett neu schreiben, das ist ein typisches merkmal bei learning by doing. Sei dir dessen Bewusst, nicht das du nachher einen Wust aus 20 code-generationen hast.

Was du programmierst, wird vermutlich schonmal jemand anderes in ähnlicher form gemacht haben. Schau dir an wie der das macht.

Sicher das du alles (Core, Usermanagement, Forum unsw.) alles selbst schreiben willst, kannst und musst ?

Ich arbeite seit langem an einem umfangreichen Projekt (lange: jahre) und hier hat sich eines nach dem anderen Entwickelt, alles auf einmal, hätte ich gar keine Zeit für.

Sicher das du alles neu machen musst ? wenn du deine Idee mit anderen Entwicklern teilst, die evtl. auch gerade lernen oder schon etwas weiter sind, sparst du dir die arbeit das rad zum 3154 mal neu zu erfinden. Ich will dich da abschrecken, aber gemeinsam lernen geht besser als einzeln, sonst korrigiert auch niemand deine fehler, andernfalls kannst du aus den fehlern der anderen auch lernen.

Geschrieben (bearbeitet)

Ich bin mir sicher das es diese art der Webaplikation in diesem umfang noch nicht gibt. Jedenfalls nicht in der form wenn mein Projekt fertig ist.

Klar würde ich über Hilfe freuen. Aber möchte auch meine Urheberrechte nicht abtretten und daher ist kaum einer bereit eine verschwiegenheitsvereinbarung sowie urheberrechtlichevereinbarung zu unterzeichnen.

Aus diesem grund gebe ich auch nichts Relevantes über dieses Projekt preis. Klar wollt ihr mir helfen und bin auch sehr Dankbar zu, aber mich davon abbringen weil ich noch nicht solch ein großes Wissen verfüge wie ihr zum Beispiel, das bringt nichts.

Bücher durchlesen und hoffen das ich davon lerne liegt mir nicht und durch diese Art des Lernens wie ichs momentan habe weiß ich das ich früher oder später alles neu machen muss.

Da ich wahrscheinlich erst am ende dieses Projekts Funktionen und möglichkeit kennen werde die das ganze vereinfachen, schneller ablaufen und sicherer sind.

Aber dies trifft auf alles im Leben zu. Man muss anfangen um daraus lernen zu können um danach nicht die gleichen Fehler zu machen.

Wiederum sollte man von anfang an am besten gleich alles richtig machen. Umso weniger Arbeit hat man wenn man neu ansetzen muss.

Wie auch gesagt, wenn es mit PHP nicht 2 Datenbanken Parallel laufen zu lassen dann geht es nicht und kann es auch sicher nicht ändern.

Wenn es aber so funktionieren sollte, so wäre ich einen großen schritt weiter und hätte was dazu gelesen.

Aber in jeder PHP datei sowas rein zu setzen habe ich auch keine lust drauf:

	<?php
$sqlconnect = @mysql_connect("$dbHost","$dbUser","$dbPass") or die("Zurzeit keine Verbindung!");
$sqlselectDB = @mysql_select_db("$dbName") or die("Die Datenbank <b>$dbName</b> konnte nicht gefunden werden!");
?>

<------inhalt------>

<?php mysql_close($sqlconnect); ?>
[/PHP]

Manchmal sogar mehrfach, nur damit er überprüft ob der user Berechtigt ist den inhalt ein zusehen, dann muss ich dies schliessen, dann muss ich eben z.B. optionsabfragen rein setzen wie z.B. bei Newsänderungen, dann dies wieder schließen, dann es in der Logdatei spreichern, dann dies wieder schließen und dann die änderungen wieder an der News speichern.

mfg Aoshi

PS.: Wir sollte mal bei dem hier zum ende kommen. Solltet ihr eine möglich keit haben wies mit PHP geht schreibt einfach nen beispielcode rein.

Ansonsten nichts ausser das es eventuell nicht geht.

PPS.: Habe gerade was bemerkt. Was hat diese $sqlselectDB bei mir für einen sinn? Denn dies wende ich abgesehen bei der SQL Verbindung sonst nirgendwo O.o

Bearbeitet von Aoshi
Geschrieben
Manchmal sogar mehrfach, nur damit er überprüft ob der user Berechtigt ist den inhalt ein zusehen, dann muss ich dies schliessen, dann muss ich eben z.B. optionsabfragen rein setzen wie z.B. bei Newsänderungen, dann dies wieder schließen, dann es in der Logdatei spreichern, dann dies wieder schließen und dann die änderungen wieder an der News speichern.

Oh je da fehlts ja noch hinten und vorne. Es sog. Connectionpooling, in dem die offenen Connection gehalten werden und nicht immer wieder geöffnet und geschlossen werden müssen.

Ich würde Dir wirklich empfehlen, erstmal kleinere Brötchen zu backen, dann geht der Rest auch bedeutend schneller.

Aber möchte auch meine Urheberrechte nicht abtretten und daher ist kaum einer bereit eine verschwiegenheitsvereinbarung sowie urheberrechtlichevereinbarung zu unterzeichnen.

Aus diesem grund gebe ich auch nichts Relevantes über dieses Projekt preis.

Ja, dass Du an massiver Selbstüberschätzung leidest ist mir mittlerweile klar. :upps

Dim

Geschrieben

Manchmal sogar mehrfach, nur damit er überprüft ob der user Berechtigt ist den inhalt ein zusehen, dann muss ich dies schliessen, dann muss ich eben z.B. optionsabfragen rein setzen wie z.B. bei Newsänderungen, dann dies wieder schließen, dann es in der Logdatei spreichern, dann dies wieder schließen und dann die änderungen wieder an der News speichern.

Man könnte, wenn man notwenige Wissen hat, auch direkt gewisse Daten cachen, dies erledigen auch gewisse Pakete direkt für einen.

PS.: Wir sollte mal bei dem hier zum ende kommen. Solltet ihr eine möglich keit haben wies mit PHP geht schreibt einfach nen beispielcode rein.

Ansonsten nichts ausser das es eventuell nicht geht.

Sicher, denn Du bist sehr uneinsichtig.

PPS.: Habe gerade was bemerkt. Was hat diese $sqlselectDB bei mir für einen sinn? Denn dies wende ich abgesehen bei der SQL Verbindung sonst nirgendwo O.o

Den Sinn, der in der Dokumentation für "mysql_select_db" angegeben ist. Du möchtest ihr einen anderen Sinn geben.

Ein persönlicher Ratschlag: Nimm das an, was Dir geraten wird und ignoriere dies nicht. Vor allem versuche nicht es so zu lösen, wie es Dir im Moment im Kopf schwebt, sondern vielleicht liest Du Dir mal alle Hinweise hier noch einmal in Ruhe durch und denkst darüber nach. Ebenso wie @dim geschrieben hat, fange klein an und lass dieses Projekt von jemanden kompetenteren betreuen.

Phil

Geschrieben (bearbeitet)

So somit kann dieser Thread geschlossen werden.

Denn ich habe die lösung selbst herrausgefunden.

Ich werde es aber noch verraten:


<?php
$dbHost1 = "localhost";
$dbUser1 = "root";
$dbPass1 = "bla";
$dbName1 = "datenbank1";

$dbHost2 = "localhost";
$dbUser2 = "administrator";
$dbPass2 = "blubb";
$dbName2 = "datenbank2";

$sqlconnect1 = @mysql_connect("$dbHost1","$dbUser1","$dbPass1") or die("Zurzeit keine Verbindung!");
$sqlselectDB1 = @mysql_select_db("$dbName1", $sqlconnect1) or die("Die Datenbank <b>$dbName1</b> konnte nicht gefunden werden!");

$sqlconnect2 = @mysql_connect("$dbHost2","$dbUser2","$dbPass2") or die("Zurzeit keine Verbindung!");
$sqlselectDB2 = @mysql_select_db("$dbName2", $sqlconnect2) or die("Die Datenbank <b>$dbName2</b> konnte nicht gefunden werden!");


$site = mysql_fetch_array(mysql_query("SELECT * FROM testdatenbank"), $sqlselectDB1) or die(mysql_error().'<hr />'. $sql .'<hr />');

echo $site['test1'];

$user = mysql_fetch_array(mysql_query("SELECT * FROM userdatenbank"), $sqlselectDB2) or die(mysql_error().'<hr />'. $sql .'<hr />');

echo $user['nickname'];
?>
[/PHP]

(Der $user und $site haben gerade nen kleinen fehler der aber mit dem doppelten Datenbanken nichts zu tun hat: http://forum.fachinformatiker.de/datenbanken/119300-sql-fehlermeldung.html#post1079245)

Also bin ich doch nicht so blöd und unwissend wa. Witziger weise habe ich es dann herrausgefunden wo ich versucht hatte nen anderen fehler zu beseitigen.

Dies fand ich durch zufall bei php.net, link habe ich leider nicht mehr.

Für die zukunft solltet ihr besser nicht mehr nur auf andere rumhacken weil die etwas erreichen wollen (und nicht soviel erfahrung wie ihr habt) und ihr versucht diesem die ideen auszureden.

Stattdessen diesen einfach mal weiter helfen, wenn ihr wirklich soviel über PHP etc. wissen solltet.

mfg Aoshi

PS.: Wer ist der unwissendere. Der Lehrer der nur versucht den Schüler einzureden das er es eh nicht schaft oder der Schüler der soviel würde besitzt um hilfe zu bitten?

Bearbeitet von Aoshi
Geschrieben
PS.: Wer ist der unwissendere. Der Lehrer der nur versucht den Schüler einzureden das er es eh nicht schaft oder der Schüler der soviel würde besitzt um hilfe zu bitten?

Der, der nicht kapiert, dass das was er macht nur Schrott ist. Aber zumindest lernst Du ja grade, wie man ein Projekt in den Sand setzt - auch etwas, das einem später weiterhelfen kann.

Dim

Geschrieben

Oh ja urteilt doch noch schneller darüber, ohna das du wirklich was weißt.

Du weißt doch nichts. Du siehst einen bruchteil eines Quellcodes und schon sagst du "wird in den sand gesetzt".

Aber hey jetzt kommt der Witz des Tages.

Hier darf man also nur was posten wenn man eben schon Fachliches Wissen quasi Perfektioniert hat damit man nicht gerade verurteilt wird.

Urteile nicht über andere, sondern urteile erst über dich selbst.

Könnte auch durch deine Komentare sagen "oh ja, du bist überheblich, kurzsichtig und Arrogant" aber das tuh ich nicht weil ich nur deine Posts kenne und nicht dich.

Sehe erst das gesamtbild bevor man sich ein urteil bilden sollte.

mfg Aoshi

PS.: Unwissendheit schützt nicht vor strafe, aber unwissendheit wird nicht bestraft.

Geschrieben
Du siehst einen bruchteil eines Quellcodes und schon sagst du "wird in den sand gesetzt".

Ganz im Gegenteil. Ich bitte dich sogar keinen Quellcode zu posten, denn irgend jemand könnte auf die Idee kommen, dass das was du hier von dir gibst richtig ist.Daher meine Bitte: Poste nichts von deinem Quellcode. Mir reicht das Konzept das Du hier vorgestellt hast um anhand meiner Erfahrung (etwas das du zum jetzigen Zeitpunkt nicht besitzt) zu erkennen, dass Du nur Mist programmierst.

Hier darf man also nur was posten wenn man eben schon Fachliches Wissen quasi Perfektioniert hat damit man nicht gerade verurteilt wird.

Wie kommst da drauf? Hier haben dir mehrer Personen unabhängig voneinander gesagt, dass Du Mist baust - was anderes ist es nicht. Das hat dir nicht gefallen, tja kann man nix machen. Auch perfektionierter urheberrechtlich geschützter Schrott ist immer noch Schrott. Zumindest ich werd niemandem helfen blindlings gegen die Wand zu laufen - daher helf ich dir auch nicht auf deinem jetzigen Weg weiterzukommen. Wie du zum Erfolg kommst wurde dir ja schon mehrmals gesagt.

Schlimm ist nicht, dass du jetzt so vorgehst wie du es momentan machst, Dein problem ist nur, dass Du denkst du machst alles richtig. Aber wenn man es genau nimmt, wäre dein Ansatz nicht mal richtig, wenn man das gegenteil machen würde.

Ich bin dann mal raus aus dem Thread, kannst gern noch das letzte Wort haben.

Dim

Geschrieben

Ja und bin auch dankbar dazu.

Aber ihr ratet mir ich solle erst PHP richtig lernen. Das tuh ich in form der effektifsten form, indem ich einfach das gelernte umsetze, zudem lernt man eh am besten durch erfahrungen.

Aber trotz meiner dankbarkeit das ihr mir sagt das ich zu blöd für sowas bin, ist es auch nicht das thema dieses Threads.

Selbst jetzt ist es nicht der Bestandteil dieses Themas.

Zudem, wenn jemand meinen Quellcode nimmt und den Thread hier nicht richtig gelesen hat, tja, selber schuld, wer lesen kann ist klar im vorteil.

mfg Aoshi

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...