Jump to content

Žebříček

Populární obsah

Showing content with the highest reputation on 11/27/22 in all areas

  1. Zajímavej dotaz. Přemýšlel jsem jak co nejefektivněji toho dosáhnout. První dotaz je, máš SQL nebo noSQL databázi? Podle toho bych se odpíchnul dál. Vzhledem k tomu, že jsi nespecifikoval, tak počítám s SQL. (NoSQL by zde byla zrovna lepší). Ujasněme si, že chceme označit příspěvky, které jsou nové od poslední návštěvy. Počítám s tím, že každý user má uid, každý topic má uid a každá příspěvek má čas vložení příspěvku. Aby se zabralo co nejméně místa a přístup byl co nejrychlejší, řešil bych to extra tabulkou tzv. M:N tabulkou, jež by vypadalo takto: | uid | topic_id | user_id | timestamp | uid = primární klíč topic_id = index na vlákno. (Odkaz na primarní klíč topicu, například tento topic má id 56539 - viz url) user_id = index na usera. (Odkaz na primární klíč usera) timestamp = poslední zaznamenaná návštěva usera A teď funkčnost: Uživatel vstoupí do vlákna příspěvků a načte si příspěvky. Pokud je funkce kterou chceš zapnutá. tak se dotáže na db: SELECT uid, timestamp FROM last_activity WHERE topic_id = id_vlakna AND user_id = id_usera LIMIT 1 Pokud něco vrátí, znamená, že už tam byl. Pokud ne, uživatel ještě topic nenavštívil. Timestamp je poslední návštěva, podle toho můžeš označit příspěvky co uživatel ještě neviděl. Jakmile vleze na topic, voláš db a updatuješ tabulku: UPDATE last_activity SET timestamp = now() WHERE uid = uid_predchoziho_vysledku Pokud tam ještě nebyl, záznam vytvoříš... Proč timestamp a ne ID příspěvku jako poslední přečtený: Příspěvek není něco, co tam vždy, můžeš být. Poslední příspěvek někdo může smazat a svým způsobem id příspěvku nemusí být vzestupný. Příspěvek id 1 může být novější než příspěvek id 2 - může být třeba přesunutý. Nevýhody SQL: navržená tabulka last_activity bude do nekonečna vzrůstající a velmi rychle. Čím více userů se podívá, tím více záznamů. 5 000 000 záznamů mi mysql už moc nedávalo. Řešení: noSQL: U nosql by se tyto informace dali napsat přímo k záznamu topicu jako JSON, kde by byly informace o všech uživatelích, co topic navštivili. Řešení 2: Udělat s sql nosql. Přidat sloupec do tabulky seznamu topiců, kam se bude psát jako JSON informace o všech uživatelích jako řešení o řádek výše. Nevýhody noSQL a řešení 2: Pokaždé když se někdo dotáže na informace kdy se naposledy podíval do topicu, tak se stáhnou všechny informace pro všechny usery. Nikoli jen pro jednoho konkrétního.
    1 point
×
×
  • Create New...