Autor Zpráva
Lukas28
Profil *
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
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í.

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: