| Autor | Zpráva | ||
|---|---|---|---|
| Lukas28 Profil * |
#1 · Zasláno: 19. 10. 2013, 00:48:04
Ahoj, půjdu rovnou k věci.
Mam v databázi 2 tabulky. InteractionClass a Interaction. InteractionClass má uložené v databázi name, size, color apod. Věci které se vícemene něměni. V podstatě je v relaci s tabulkou Interaction. Interaction ma id jednoho z těch InteractionClass. Uvedu radějí i příklad. CREATE TABLE interaction_class( id INT UNSIGNED NOT NULL AUTO_INCREMENT, default_name VARCHAR(50), .... PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE interaction( id INT UNSIGNED NOT NULL AUTO_INCREMENT, interaction_id INT UNSIGNED NOT NULL, .... PRIMARY KEY(id), INDEX(x, y), FOREIGN KEY (interaction_id) REFERENCES interaction_class (id) ) ENGINE = InnoDB; Ma otazka zni. Jestlize si pri startu serveru nahraji vsechny InteractionClass do tzv. cache (Map<Integer, InteractionClass>) tak jestli je to vzhledem k vykonu lepsi reseni? Tzv jestli nemam radeji vzdy pouzivat nejake dotazy pres vice tabulek (resp. JOIN). Jeste bych dodal ze tech InteractionClass bude rekneme neco okolo 300-500. Diky za radu. |
||
| Alphard Profil |
#2 · Zasláno: 19. 10. 2013, 01:45:35
To záleží na tom, jak s tím chcete pracovat. Některé vrstvy, třeba NotORM v PHP, tahají data z tabulek jednotlivě (bez joinů), aby ušetřily celkový přenášený objem duplikováním dat. Výhodnost cachování určitých tabulek závisí na poměru vytížení aplikace a složitosti implementace.
V jiných případech je naopak pro efektivní práci třeba joinovat na úrovni db a v tomto způsobu cachování by tedy nebyl žádný přínos. Já bych to nedělal, dokud nebudou problémy s výkonem. Pokud nastanou, identifikoval bych skutečně pomalé dotazy a podle toho vybral řešení. |
||
|
Časová prodleva: 12 let
|
|||
0