Připojení databáze, jejíž název se dozvím až po přihlášení uživatele

- kastanekdavid
 - Člen | 39
 
Zdravím,
pracuju na aplikaci pro zpracovávání xml feedů. Pro každého uživatele se bude feed ukládat do zvláštní, a již existující, MySQL databáze, kterou potřebuji napojit až po přihlášení uživatele (protože do té doby neznám příslušný název DB).
Nemůžu tím pádem pracovat s deklarací databáze v config.neon.
Někteří radí vytvořit si připojení v BasePresenteru (po přihlášení) pomocí metody addService(). To ale způsobí, že ani nemůžu v config.neon deklarovat žádnou službu, která využívá toto databázové spojení, protože ho při inicializaci aplikace nenajde.
Už na tom sedím tak 8 hodin a nevím si rady. Nakopne mě někdo? :)

- kastanekdavid
 - Člen | 39
 
No tak představ si, že feed představuje klíčová data z e-shopu daného uživatele. Každý uživatel může feedem poslat prakticky jakýkoliv množství různě pojmenovaných tabulek, který jsou v některých případech tak obrovský, že mi přijde z hlediska výkonu lepší držet je v oddělených databázích.

- saimons
 - Člen | 293
 
No ja si myslim, ze by to nemel byt problem. Kolik muze jeden XML obsahovat produktu, radove tisice a to je pro DB zanedbatelne cislo, je na to stavena. Pak se urcite nake produkty budou opakovat, takze by se dalo pres vazebni tabulku delat parovani k jednotlivym uzivatelum. Pouzivame DB (MySQL 5.5) kde mam v jedne tabulce 10ky mil. zaznamu a neni s tim jediny problem. Teda uz je na to potreba nake lepsi VPS nebo samostatnej server, ale nake zakladni VPS neni o mc drazsi nez hosting.
Editoval saimons (30. 4. 2013 11:38)

- Petr Hudík
 - Člen | 49
 
Domnívám se, že by bylo výhodnější se tomuto rozdělení vyhnout a tabulky nechat spojené nebo aplikace oddělit.
Pokud se rozhodneš pro rozdělení db, tak jednom projektu jsem řešil přepínání db na základě domény, vykopírováno z toho projektu, obsah configu.neon:
	web:
		class: myWeb
	database:
		class: Nette\Database\Connection
		create: @web::getDatabaseService
	authorizator:
		class: Authorizator
a getDatabaseService pak vypadalo takto:
		return new Nette\Database\Connection('mysql:host=localhost;dbname='.$this->dbName, $this->user, $this->password);
					Editoval Petr Hudík (30. 4. 2013 13:05)

- kastanekdavid
 - Člen | 39
 
Nakonec jsem se přiklonil k řešení problému pouze jednou databází.
Vytvořením instance Nette\Database\Connection v presenteru bych nemohl v config.neon odkazovat na toto připojení z žádné služby, a tedy bych si asi rozhodil celý návrh aplikačky (nebo tomu možná jen nerozumím :) ).
Každopádně díky všem!