Přepínání mezi databázemi

(tento dotaz se pochopitelně netýka wz.cz)

Chtěl jsem se zeptat jak moc je dobry přepínat ve skriptu mezi databázemi. Tedy -> zda se mi vyplatí mít jednu databázi a v ní 2000 tabulek nebo mít 5 databází po čtyř set tabulkách a přepínat až 3x ve skriptu...
+ tedy jsem se chtěl zeptat jak mezi databázemi nejlépe přepínat.
Toto je jen můj soukromý názor nepodložený zkušeností.

Pokud se jedná o jeden projekt, inklinoval bych k jedné databázi. Když se podívám, jak MySQL ukládá databáze a tabulky, myslím, že je to rozumnější: databáze je adresář a tabulka soubor. Takže se budeš pohybovat v jednom adresáři, což by mělo být rychlejší.

Důvodem pro rozdělení databáze může být (v rámci jednoho projektu) hlavně zátěž serveru. Pokud server je přetěžován, pak dát část tabulek do jiné databáze na jiný server.

Ovšem rozdělovat tabulky jednoho projektu do různých databází na stejném stroji mi nepřipadá výhodné.
Přepínání: http://cz2.php.net/manual/cs/function.mysql-select-db.php a příklady v diskuzi.
definice na wikipedii:
Databáze je určitá uspořádaná množina informací (dat) uložená na paměťovém médiu. ... (zbytek je o SŘBD).

Ja bych to doplnil jeste tak, ze se jedna o mnozinu dat spolu vzajemne souvisejicich, nejakym zpusobem provazanych. Mam namysli to, ze pokud je treba nejaky velky projekt, ktery je rozdeleni do nejakych vetsich oddelenych celku, kazdy by mohl mit "svou vlastni" databazi. V jinem pripade bych to nechal pohromade - pokud se nejedna o pripad, ktery popisuje zbi.
explicitní, tedy předepsané rozdělování tabulek do více db je kravina, vyždycky to bude pomalejší. Důvody (jenom několik málo těch, které mě napadají):
- musí se vytvářet více spojení, což je pomalejší jak jedno spojení, navíc větší pravděpodobnost selhání atd
- pokud chci spojit jednu tabulku z jedné db s tabulkou v druhé db ztráci se možnost optimalizace dotazu, pokud se to vůbec povede nenapdá mě db, kde by to šlo
- nenapdá mě případ, kdy by bylo rychlejší dotazovat se na dvě tabulky na dvou db než dotazovat se na dvě tabulky v jedné db.

2000 tabulek v 1 db? Zrovna mám před sebou, řekněme, středně velký projekt (za přibližně 1M Kč), kde je 140 tabulek (nepočítám pohledy). Asi bude existovat něco, kde bude tabulek více, ale, podle mě, kde je víc jak 300 tabulek, tak tam není něco vpořádku.
jedinej důvod co mě vedlo k rozdělení do více databází je skutečně velké množství tabulek, což mi připadalo velmi nepřehledné. Je jenom otázka do jaké míry se to vyplatí.

MzM:
počty tabulek prosím neřeš. Předpokládejme že by mohlo jít něco na způsob toho, že máš informační portál se zprávami a na každý den bys tvořil tabulku. (je to nesmysl, teď jde o pochopení)... přijde mi lepší 100 tabulek po 1000 řádcích než tabulka s 100 000 řádky.
"přijde mi lepší 100 tabulek po 1000 řádcích než tabulka s 100 000 řádky" PROČ?

Nevidím problém se 100 000 řádky. Samozřejmě server musí být přiměřeně hardwarově výkonný.
2 zbi:
Tak to bys měl vidět.
Povídej, co bych měl vidět?
>přijde mi lepší 100 tabulek po 1000 řádcích než tabulka s 100 000 řádky

vykonnejsi je imho tabulka s 100 000 radky nez 100 tabulek po 1000 radcich. V tomto pripade by se vyplatilo premyslet o tom, jaky databazovy stroj na takova data pouziju...
už jste se někdy setkali s tabulkou se 100 000 řádky? řekl bych že ne.

už za zajimavou věc se považuje to, když někde jede databáze v pohodě s 80 000.... ale jak kde. s výkoným strojem by možná i pár set tisíc nebyl problem.
No nevideli, ale muze existovat. Co takhle 100 000 klientu? Je lepsi je rozdelit na 100 tabulek po 1000, nebo 1 tabulka po 100 000? Z hlediska praktickeho bych zvolil 1 tabulku.
Ono vlastne jde o to, co chcete delat. Rict obecne co je lepsi, neni to prave. Ale rict to na konkretnim priklade, tak to uz jo. V podstate lze rict, ze obe metody jsou lepsi, nebo horsi. Jen vedet, ktery kam patri.
Tak na priklade s temi klienty.
1) Jedna tabulka na vsechny klienty. Vyhoda - vse v jednom, snadne filtrovani a vyhledavani, lepsi statisticky prehled. Nevyhoda - pomale zpracovani z dusledku mnoha zaznamu, dlouhe prochazeni.
2) Pocet tabulek podle kriterii (1 tabulka = 1 pismeno, nebo 1 oddeleni) a v ni odpovidajici radky. Vyhoda - lepsi prehled, rychlejsi vyhledavani a zpracovani v ramci kategorie(tabulky), pristup zaznamu jen pro urcite oddeleni. Nevyhoda - komplikovane filtrovani a vyhledavani vsech zaznamu, coz vede i k dlouhemu zpracovani.

Jen proste musite vedet, co je pro vas a databazi lepsi pouzit.
Jinak k prvotni otazce. Obecne se da rici, ze jedna databaze = jeden projekt. Na jeden projekt mit 2 nebo vice databaze neni dobre, pokud to neni nutne. Jednoduse - je lepsi pristupovat po celou dobu k jedne databazi, nez zbytecne prepinat.
>už jste se někdy setkali s tabulkou se 100 000 řádky? řekl bych že ne.
setkal - v praci. treba: 50 000 klientu, kazdych 14 dnu jedna faktura za odber zbozi - dejme tomu 110 000 novych zaznamu za mesic, 1 320 000 za rok.
MF: tabulka se 100000 řádky? No, každou chvilku. Tuhle jsme tu měli db, která měla nazačátku asi 20GB (po importu dat ze starého systému) a předpokládá se 10G dat každý rok. Kolik mají tabulky řádků to nevím, ale jde to do miliónů. Myslím, že ani milión řádků tabulky není důvod k rozdělování do více tabulek, to je myslím ta největší kravina, co bys mohl udělat. A určitě se tím zpracování nezrychlí (Tomík).

Fakt, věřte mi, z praxe vím, že více tabulek na jednu věc je kravina. Dokonce jsem se s něčím takovým setkal a nebylo to dobré (neřeknu, co to bylo, to je tajné ;-) ).
MzM:
>Fakt, věřte mi, z praxe vím, že více tabulek na jednu věc je kravina. Dokonce jsem se s něčím takovým setkal a nebylo to dobré (neřeknu, co to bylo, to je tajné ;-) ).

Tajne? Zeby tvoje zacatky s MySQL? ;) :D
donny, :-D začátky s MySQL bych tu nezmiňoval, i když to byly taky stotisíciřádkové db. ;-)
<HTML>Jestli nekdo povazuje 100 000 radku za problem pak by si mel precist k cemu databaze jsou a netyka se to jen tezkotonaznich databazi.
Pri spravnem pouziti indexu tohle neni zadny problem, rozhodne lepsi nez nejake joinovani nebo selectovani ze 100 tabulek naraz (nelede na ten sileny dotaz co by to byl) :D</HTML>
<HTML>Ale abych se drzel tematu...
Prepinat mezi DB problem neni, ale nepouzival bych k tomu klasicke mysql_*
php funkce, ale nejake univerzalni knihovny ktere k tomuto primo vybizeji nutnosti predavat identifikator (spojeni apd...) jako napr. ADOdb nebo DBX</HTML>