Artykuły jmail's software

Potęga widoków – część I

by on sie.07, 2009, under SQL

Widoki Twoim przyjacielem

Wszyscy wiedzą, co to jest widok w Bazie danych?

Nie?

No to taką wiedzę musicie nabyć drogą dowolną. Bo dzisiaj zamierzam powiedzieć Wam trochę więcej na temat widoków. Rozpocznę od bazy danych w MySQL’u, którego osobiście nie lubię, ale będę opierał się o przykłady z XNovy, a tam jest tylko to paskudztwo dostępne – chociaż kto wie, może pokuszę się o migrację na PostgreSQL całego silnika. jFancy już na Postgre działa…

Ale do brzegu. Widok to taka wirtualna tabela, w której możemy przechowywać zawężone już znacznie wartości z tabel jakie znajdują się w bazie danych.

XNova przykład – mamy tabelę users w której mamy nawkładane takie stado niepotrzebnych informacji, które są w 90% wypadków nie używane, że szkoda gadać.

Załóżmy, że w grze mamy dostępne tylko 4 technologie (dla uproszczenia, żeby listingi były krótsze). Każde wywołanie strony powoduje wywołanie tej tabeli i jakiejś operacji dla niej.

Zazwyczaj zależy nam na szybkim działaniu, jednak to co się dzieje w takim wypadku w bazie danych to jest groch z kapustą. Dlaczego nie mamy przechowywać w widoku tylko wartości dla użytkowników aktywnych w ciągu ostatnich powiedzmy 90 minut? Dzięki temu co zyskamy? Zyskamy dzięki temu wszystko co niezbędne do przetwarzania interface’u dla gracza aktywnego. A więc do dzieła!

Założyliśmy, że będą to 4 technologie. Szpiegowska, i te trzy militarne co w grze występują. Zainteresowanych odsyłam na forum http://xnova-support.pl w celu pobrania silnika i zrozumienia o czym ja gadam.

Na początek więc przyjmujemy założenia. Wsadzamy tam niezbędne dane do działania użytkownika i będą tam dane użytkownika aktywnego z ostatnich 90 minut (ponieważ jestem późno w nocy wiec ja wsadzę dane z ostatnich 12 godzin – z 90 minut to ze dwudziestu może będzie ;) )

Tworzę widok

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 create or replace view
  users_v
 as
  select
   id
   ,username
   ,spy_tech
   ,military_tech
   ,defence_tech
   ,shield_tech
  from
   prefix_users
  where
   onlinetime > unix_timestamp() - 12 * 60 * 60

Teraz sprawdźmy czy nam to coś dało. Wykonuję zapytanie

1
2
3
4
5
6
7
8
9
10
11
 select
  id
  ,username
  ,spy_tech
  ,military_tech
  ,defence_tech
  ,shield_tech
 from
  prefix_users
 where
  onlinetime > unix_timestamp() - 12 * 60 * 60;

Czas ok. 0,0130. Całkiem przyjemny – ale nadal trzeba zwrócić uwagę, że to jest przy nieobciążonym serwerze.

Teraz wykonuję prostsze zapytanie:

1
2
3
4
 select
  *
 from
  users_v

Na wyjściu dostanę te same dane, jednak o ile prostsze jest zapytanie?
A jaki czas. Czas niestety zbliżony bo ok 0,0129. Więc dużo nie zyskaliśmy.

Moglibyście teraz powiedzieć i co mi ten widok da. Co da? Na ten temat porozmawiamy sobie w części drugiej. To taki mały wstępniaczek. W ciągu dnia jeszcze na obciążonym serwerze sprawdzę jakie czasy się uzyskuje i dam znać.

:, , ,

Leave a Reply

Kalendarz

Sierpień 2009
P W Ś C P S N
« lip   wrz »
 12
3456789
10111213141516
17181920212223
24252627282930
31  
Linki sponsorowane:
ethica * katalog * rss * perfumy