Autor | Zpráva | ||
---|---|---|---|
MaK Profil |
#1 · Zasláno: 14. 10. 2015, 10:14:04 · Upravil/a: Moderátor (editace znemožněna) 14. 10. 2015, 15:18:52
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 |
#3 · Zasláno: 14. 10. 2015, 13:31:55
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ů. |
||
Časová prodleva: 9 let
|
0