sql >> Databáze >  >> RDS >> Mysql

Struktura dat pro různé typy turnajů/soutěží (liga, ladder, single/double eliminace atd.)

Je zde několik otázek/problémů, takže se pokusím odpovědět na každý z nich.

Všechny interakce s turnaji by měly být v reálném čase/odráženy mnoha uživatelům.

Pro malý až střední provoz na vašem webu to nemusí být problém. Pro hustší provoz to rychle začne být zásadní problém.

Zvažte jako příklad, jak často chcete pomocí svých volání AJAX dotazovat databázi. Každou vteřinu? Takže pokud máte 100 lidí s otevřenou stránkou, máte každou sekundu 100 volání do databáze? Zjistíte, že to rychle zabije vaši databázi.

I když je to trochu mimo téma, důrazně bych doporučil prozkoumat, jak ukládat výsledky turnajů do mezipaměti předem. Statistiky atd. můžete ukládat do mezipaměti a buď je nechat vypršet, nebo je vypršet proaktivně, ale rozhodně věnujte nějaký čas jejich zkoumání.

Statistiky/výsledky v reálném čase

Mějte na paměti, že spojení v relačních databázích nějakou dobu trvá. Pokud výrazně normalizujete svou turnajovou strukturu, může být získávání statistik bolestivé. Nejtěžší částí systému pro zefektivnění budou souhrny a statistiky z každého turnaje.

Když navrhujete databázi/tabulky/pohledy/uložené procedury, mějte na paměti konečný cíl – rychlé získání statistik. To může znamenat ne příliš mnoho normalizace dat (aby se zabránilo příliš velkému počtu spojení). Může to také znamenat, že budete věnovat velkou pozornost vašim datovým typům – například pomocí bitů/shorts/atd. místo celých čísel.

Jak modelovat různé typy turnajů

V turnajových modelech se nevyznám, ale mám konkrétní rady, jak modelovat. =)

Několik otázek, které byste si měli položit:

  1. Mají všechny turnaje společná pole? Jinými slovy, pro turnaj typu round robin uložíme 10 polí. Pro jeden vyřazovací turnaj máme uloženo 11 polí. Pokud sdílejí stejných 10 polí, pak bych doporučil umístit všechny typy turnajů do jednoho stolu a poté použít pole typu turnaje k určení typu turnaje pro vaši aplikaci.

  2. Nemají všechny turnaje společná pole? Vytvořte jim samostatné stoly – jeden pro každý typ turnaje. Můžete vytvořit jednu tabulku pro sdílená data, ale pak mít různé tabulky pro konkrétní informace.

  3. Budou se turnajová pole postupem času rozrůstat ? Postupem času budete chtít přidat pole k typům turnajů. Pokud předpovídáte, že se turnaje časem stanou velmi unikátními a velmi konkrétními, oddělte je. V opačném případě skončíte se spoustou polí, která obsahují spoustu hodnot NULL.

  4. Uvažovali jste o řešení NoSQL ? Pěkná věc na obchodě NoSQL je, že denormalizuje data, takže nemáte spojení. Také můžete mít heterogenní (různé typy dat) ve stejné "tabulce" nebo kontejneru. Jen něco, co je třeba zvážit, protože by vám to mohlo výrazně usnadnit život. Podívejte se na MongoDB jako příklad.




  1. Jak inicializovat kontejner mysql při vytvoření na Kubernetes?

  2. OBJECTPROPERTY() vs OBJECTPROPERTYEX() v SQL Server:Jaký je rozdíl?

  3. Jak funguje COPY a proč je mnohem rychlejší než INSERT?

  4. Jak migrovat z MSSQL na MySQL