Griffith - media collection manager
May 21, 2012, 07:01:48 PM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News: New mailing lists,
 
   Home   Help Search Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: Usprawnienie bazy  (Read 1472 times)
jlmrafael
Newbie
*
Offline Offline

Posts: 4


View Profile
« on: February 24, 2011, 12:25:30 AM »

Witam
Tajemnicą poliszynela jest, że w miarę jak rośnie liczba filmów, Griffith znacznie zwalnia i jego użytkowanie nie cieszy już tak bardzo jak na początku. Można byłoby to usprawnić oszczędzając kilkadziesiąt bezcennych milisekund przerabiając bazę danych, a właściwie tabelę "movies". Utrzymywania tak dużej tabeli i tak nie ma większego sensu więc czemu by jej nie podzielić.

Kontrolka\tabelka (nie wiem jak to nazywacie w Pythonie) w Griffith zawiera tylko kilka podstawowych pól takich jak: numer, plakat gatunek, obejrzany, czas trwania, tytuł oryginalny, reżyser, rok, ocena, czy niedawno dodane utworzony i uaktualniony. Łącznie 12. Uprzedzę może wątpliwości, spowolnienie jest duże nawet przy włączonych tylko kilku polach oczywiście pomijając plakat. W bazie danych tych kolumn (wybacz że nie wymienię) jest 39.

Warto rozważyć w przyszłej wersji podzielenie tej tabeli. Wystarczy na dwie. Podstawowa miał by tylko i wyłącznie dane takie jak w kontrolce. Reszta przeżucona byłaby do drugie tabeli i oczywiście powiązana kluczem z tabelą podstawową (klucz na kolumnie movie_id). Dzięki temu nie trzeba utrzymywać jednej tak dużej tabeli i takiej ilości danych co znacznie usprawniłoby wyszukiwanie w kontrolce\tabeli w programie. W przypadku, gdy klikniemy na film lepiej będzie wówczas wykonać złączenie na tych dwóch tabelach, tak aby pobrać niezbędne do wyświetlenia w programie(z prawej strony) dane. Nie wiem jakie Python obsługuje zapytania, zapewne te najbardziej podstawowe SELECT, FROM, WHERE, ORDER BY więc nie będzie z tym problemu. Jeżli chodzi o złączenia to możecie wykorzystać tzw. alternatywną składnie, poniżej przedstawię przykład (w miarę realistyczny dla przyszłej bazy)

SELECT  * --(tu oczywiście kolumny, które są nam potrzebne)
FROM movies, movies_ext --załóżmy że movies_ext to nowa nazwa nowej tabeli
WHERE movies.movie_id = movies_ext.movie_id AND  movies_ext.movie_id = 44 -- przykłąd alternatywnego złączenia przed AND, po AND liczba 44 reprezentuje ID filmu którego dane chcemy pobrać


Wykonanie skryptu nowej bazy też nie będzie trudne. Do dwóch tabel tymczasowych (odpowiadającym nowym tabelą) wpisujemy dane z aktualnej tabeli movies. następnie kasujemy tą tabelę i tworzymy dwie nowe, do których wpisujemy dane z tabel tymczasowych.

Na razie to chyba na tyle. Liczę na rozważenie propozycji.

Pozdrawiam


« Last Edit: February 24, 2011, 12:30:55 AM by jlmrafael » Logged
Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006-2007, Simple Machines Valid XHTML 1.0! Valid CSS!