Autor Zpráva
aDAm
Profil
Ahoj, řeším teď jeden problém.
Mějme např. dvě stránky, které poskytují obsah. Obě tyto stránky umožňují přihlášení uživatele. Každá z těcht ostránek má svou vlastní databázi. Jak zařídit to aby tyto dvě stránky měly sdílené např ty uživatele? Když se někdo zaregistruje na Stránce č.1 automaticky bude mít účet na Stránce č.2. Napadly mě řešení:

1. Na tabulce s usery budou triggery co při vložení či editaci záznamu v jedné tabulce jedné databáze provedou totéž v druhé tabulce a databázi. Klíčovat by se to dalo např. pomocí emailů

2. Udělat třetí databázi kde by byly sdílené prostředky (může jich být více) a pak jen spojovat tabulky napříč databázema. Tady ale asi bude problém s výslednou rychlostí kdy se budou např. ke komentářům joinovat informace o uživateli co?

Pro práci s DB využívám Doctrine2, ale zatím nemám ověřeno zda by řešení dle bodu dvě podporovala.

Co je podle vás správná cesta? Ať už z hlediska rychlosti tak i udržitelnosti.
peta
Profil

SELECT * FROM tabulka WHERE ...
SELECT * FROM databaze1.tabulka WHERE ... 
Pokud to mas na jinem serveru, tak si udelas do programu 2 ruzna pripojeni k sql. Ale nejsem si jisty, jak se pak pise sql dotaz s obema pripojenimi, jestli to vubec jde.

google = php mysql multiple database

http://stackoverflow.com/questions/274892/how-do-you-connect-to-multiple-mysql-databases-on-a-single-webpage
Nov 8 '08 at 16:42
$dbh1 = mysql_connect($hostname, $username, $password); 
$dbh2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);

mysql_query('select * from tablename', $dbh1);
mysql_query('select * from tablename', $dbh2);
Feb 21 at 11:19
    $conn = mysql_connect("hostname","username","password");
    mysql_select_db("db1",$conn);
    mysql_select_db("db2",$conn);

    $query1 = "SELECT * FROM db1.table";
    $query2 = "SELECT * FROM db2.table";
aDAm
Profil
Jak spojit dvě DB pomocí nativních SQL příkazů samozřejmě vím, a když řeším nějaké updaty tak to používám. Můj dotaz směroval k tomu zda je to či ono řešení ok pro dvě a více aplikací. Navíc rozhraní pro db mám doctrine2
Kajman
Profil
aDAm:
Tady ale asi bude problém s výslednou rychlostí kdy se budou např. ke komentářům joinovat informace o uživateli co?

Proč by to mělo nějak ovlivnit rychlost? Pokud to jsou různé databáze v rámci jednoho serveru, tak pochybuji, že tam bude měřitelný rozdíl.
aDAm
Profil
Kajman:
jj bude to v rámci jednoho serveru a jednoho účtu. Pokud to nebude mít dopad na rychlost tak tím lépe.

Teď teda jak se s tím popere Doctrine2 když bude mít třeba entitu z jedné DB a ta bude obsahovat LAZY entity z druhé DB
aDAm
Profil
Takže doctrine2 to žere bez problému, akorát sem se musel zbavit prefixu tabulek co jsem si zaregistroval v eventech a mít ho tam natvrdo, ale to neva, to je jen pozůstatek z předchozích aplikací ;) Stačí tedy jen správně napsat anotaci entity

/**
 * @ORM\Entity(repositoryClass="EntityRepository")
 * @ORM\Table(name="DATABASE.TABLE")
 */
 class Code extends \Core\Doctrine\Entity
{
  ....
}
 

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: