Autor Zpráva
MaK
Profil
Mám velké množství "listů" (řádově tisíce). "List" není nic jiného než seznam (max 2048) celočíselných id v nějakém pořadí. Např.: 123,456,789,159,753,...

Vzhledem k tomu, že před použitím potřebuju tato id propojit s ostatními tabulkami v DB, nemá smysl list držet v memcached.

Zatím jsem to řešil způsobem, jeden list - jedna tabulka (engine=MEMORY).

Rád bych všechny listy sloučil do jedne tabulky:

CREATE TABLE lists
(
    list_id            INTEGER UNSIGNED NOT NULL,
    i                SMALLINT UNSIGNED NOT NULL,    -- podle toho řadi při select
    id                INTEGER UNSIGNED NOT NULL,
 
    PRIMARY KEY (list_id, i) USING BTREE

) ENGINE=MEMORY;    

Nepůjdu s rychlostí dolů? Nebude select listu, čekat na insert/update jiného listu? Neměl bych zamýšlenou tabulku rozdělit na 16 tabulek a tím rozdělit zátěž?
Předem děkuju

Moderátor Petr ZZZ: Titulek „Polepším si?“ byl sice originální, ale téměř bezobsažný. Příště zkus prosím vymyslet lepší.
Joker
Profil
MaK:
Ten problém s výkonem reálně existuje?

Tisíce seznamů o maximálně 2048 položkách dává maximálně řádově miliony záznamů, které mají tři číselné sloupce.
Podle mě taková tabulka je skoro to poslední, co by potřebovalo výkonově optimalizovat (nebýt zkušeností, že -zejména v IT- je možné úplně všechno, tvrdil bych, že taková tabulka nemůže být pomalá).

edit: Když ještě uvážím, že vzhledem k předchozí organizaci tabulek ten systém zřejmě nepracuje s více seznamy zároveň.
tiso
Profil
MaK: Zaujímalo by ma ako reálne prebieha práca s terajším systémom. Záleží na tom poradí? Pretože mysql negarantuje poradie pri IN(...). Takže buď pokladáš n dotazov, alebo výsledok potom nejako zoraďuješ.
MaK
Profil
tiso:
Současné tabulky (v systému jeden list = jedna tabulka) vypadají takhle:

CREATE TABLE xxx
(
    i                INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    id                INTEGER UNSIGNED NOT NULL,
    PRIMARY KEY (i) USING BTREE

) ENGINE=MEMORY;    

Podle "i" se řadí a zároveň "WHERE i BETWEEN x AND y" nahrazuje LIMIT. Dotaz jsem tím nechtěl zbytečně zesložiťovat.


Joker:
tvrdil bych, že taková tabulka nemůže být pomalá).
Já si to také myslím, ale nejsem schopen to zdůvodnit a dokonce ani později změřit. Vše stojí jen na "domnivám se". Nemám nějaký EXPLAIN, kterým bych svojí to podpořil.

edit: Když ještě uvážím, že vzhledem k předchozí organizaci tabulek ten systém zřejmě nepracuje s více seznamy zároveň.
Každý uživatel vytváří a prohlíží listy, které sdílí s ostatními uživateli. Jedná se jakousi cache výsledků dotazů všech uživatelů.

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: