Voor mijn werk heb ik een aantal websites ontwikkeld.
Platform: Ubuntu, Apache 2.2, PHP 5.3, MySQL 5.1
Deze websites gebruiken zowel een eigen database als een algemene database die voor alle websites wordt gebruikt. Die algemene database wordt niet rechtstreeks benaderd vanuit code van de sites zelf, maar door een verzameling classes die door alle websites gemeenschappelijk wordt gebruikt.
Huidige situatie: Alles draait op één machine. De MySQL-server bevat dus een database voor elke website én de algemene database. Welke website gebruikt één MySQL-connectie (MySQLi-extension). Standaard database is de eigen database. Omdat het gebruikte account ook rechten heeft op de algemene database, wordt het onderscheid uitsluitend gemaakt in de queries: "SELECT * FROM tabel_in_lokaal" vs. "SELECT * FROM algemeneDB.tabel_in_algemeneDB".
Dit kan niet zo blijven, omdat de websites niet op één server blijven draaien.
Ik heb ruwweg 2 mogelijkheden in gedachten om flexibiliteit door te voeren:
1. De algemene database komt op een eigen server. De eigen database van de websites draait op dezelfde server als de betreffende website. Er worden twee verbindingen gelegd: Eentje met de algemene database en eentje met de eigen database. Queries zijn inmiddels al gescheiden, er zijn geen gecombineerde queries die zowel de algemene als de eigen database benaderen.
2. Elke webserver draait de (kopie van) algemene database. Op een of andere manier worden die databases synchroon gehouden.
Zelf vind ik mogelijkheid 1 het meest aantrekkelijk. Simpel en gestructureerd. Punt van zorg is performance, omdat er verbinding wordt gelegd met een externe machine. Wel bij dezelfde provider in hetzelfde netwerk, dus lokaal. Hoe denken jullie over deze opties? Zijn er nog andere opties?
Platform: Ubuntu, Apache 2.2, PHP 5.3, MySQL 5.1
Deze websites gebruiken zowel een eigen database als een algemene database die voor alle websites wordt gebruikt. Die algemene database wordt niet rechtstreeks benaderd vanuit code van de sites zelf, maar door een verzameling classes die door alle websites gemeenschappelijk wordt gebruikt.
Huidige situatie: Alles draait op één machine. De MySQL-server bevat dus een database voor elke website én de algemene database. Welke website gebruikt één MySQL-connectie (MySQLi-extension). Standaard database is de eigen database. Omdat het gebruikte account ook rechten heeft op de algemene database, wordt het onderscheid uitsluitend gemaakt in de queries: "SELECT * FROM tabel_in_lokaal" vs. "SELECT * FROM algemeneDB.tabel_in_algemeneDB".
Dit kan niet zo blijven, omdat de websites niet op één server blijven draaien.
Ik heb ruwweg 2 mogelijkheden in gedachten om flexibiliteit door te voeren:
1. De algemene database komt op een eigen server. De eigen database van de websites draait op dezelfde server als de betreffende website. Er worden twee verbindingen gelegd: Eentje met de algemene database en eentje met de eigen database. Queries zijn inmiddels al gescheiden, er zijn geen gecombineerde queries die zowel de algemene als de eigen database benaderen.
2. Elke webserver draait de (kopie van) algemene database. Op een of andere manier worden die databases synchroon gehouden.
Zelf vind ik mogelijkheid 1 het meest aantrekkelijk. Simpel en gestructureerd. Punt van zorg is performance, omdat er verbinding wordt gelegd met een externe machine. Wel bij dezelfde provider in hetzelfde netwerk, dus lokaal. Hoe denken jullie over deze opties? Zijn er nog andere opties?