eTravel - aplikacja wspomagająca planowanie

Transkrypt

eTravel - aplikacja wspomagająca planowanie
Uniwersytet im. Adama Mickiewicza w Poznaniu
Wydział Matematyki i Informatyki
kierunek: Informatyka, Technologie informacyjne i internetowe
Praca inżynierska
eTravel - aplikacja
wspomagająca planowanie
przejazdów
eTravel - An application supporting journey planning
Maciej Klimkowski, 383968
współautorzy: Tomasz Przydróżny, Bartosz Szabanowski
Promotor:
dr Krzysztof Dyczkowski
Poznań, 2016
Poznań .................
Oświadczenie
Ja, niżej podpisany Maciej Klimkowski, student Wydziału Matematyki i
Informatyki Uniwersytetu im. Adama Mickiewicza w Poznaniu oświadczam,
że przedkładaną pracę dyplomową pt: eTravel - aplikacja wspomagająca planowanie przejazdów (część 2) napisałem samodzielnie. Oznacza to, że przy
pisaniu pracy, poza niezbędnymi konsultacjami, nie korzystałem z pomocy
innych osób, a w szczególności nie zlecałem opracowania rozprawy lub jej
części innym osobom, ani nie odpisywałem/am tej rozprawy lub jej części od
innych osób.
Oświadczam również, że egzemplarz pracy dyplomowej w wersji drukowanej jest całkowicie zgodny z egzemplarzem pracy dyplomowej w wersji
elektronicznej. Jednocześnie przyjmuję do wiadomości, że przypisanie sobie,
w pracy dyplomowej, autorstwa istotnego fragmentu lub innych elementów
cudzego utworu lub ustalenia naukowego stanowi podstawę stwierdzenia nieważności postępowania w sprawie nadania tytułu zawodowego.
[TAK]* - wyrażam zgodę na udostępnianie mojej pracy w czytelni Archiwum UAM
[TAK]* - wyrażam zgodę na udostępnianie mojej pracy w zakresie koniecznym do ochrony
mojego prawa do autorstwa lub praw osób trzecich
*Należy wpisać TAK w przypadku wyrażenia zgody na udostępnianie pracy w czytelni
Archiwum UAM, NIE w przypadku braku zgody. Niewypełnienie pola oznacza brak zgody
na udostępnianie pracy.
......................................................
SPIS TREŚCI
iii
Spis treści
Wprowadzenie
1. Przetwarzanie danych w aplikacji rozproszonej
7
14
1.1. System rozproszony . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1.1. Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . 15
1.1.2. Cechy . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1.3. Zalety i wady . . . . . . . . . . . . . . . . . . . . . . . 16
1.1.4. Architektury . . . . . . . . . . . . . . . . . . . . . . . . 17
1.1.5. Przykłady systemów . . . . . . . . . . . . . . . . . . . 17
1.2. Rozproszona baza danych . . . . . . . . . . . . . . . . . . . . 19
1.2.1. Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . 19
1.2.2. Postulaty Date’a . . . . . . . . . . . . . . . . . . . . . 19
1.2.3. Budowa i architektura . . . . . . . . . . . . . . . . . . 22
1.3. Przetwarzanie danych . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.1. Pozyskiwanie i obróbka . . . . . . . . . . . . . . . . . . 23
1.3.2. Komunikacja . . . . . . . . . . . . . . . . . . . . . . . 27
2. Budowa stron internetowych na podstawie frameworków
Bootstrap i Phalcon
33
2.1. Nowe metody budowy stron internetowych . . . . . . . . . . . 34
2.1.1. Informacja ogólna . . . . . . . . . . . . . . . . . . . . . 34
2.1.2. Dynamika zmian w bieżącej dekadzie . . . . . . . . . . 35
SPIS TREŚCI
iv
2.1.3. Zmiana priorytetów w tworzeniu witryn . . . . . . . . 37
2.2. Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2.1. User Experience . . . . . . . . . . . . . . . . . . . . . . 38
2.2.2. Responsive Web Design . . . . . . . . . . . . . . . . . 39
2.2.3. Warstwa klienta . . . . . . . . . . . . . . . . . . . . . . 44
2.3. Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.3.1. Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . 47
2.3.2. Zalety i wady . . . . . . . . . . . . . . . . . . . . . . . 47
3. Projektowanie i implementacja baz danych na przykładzie
MySQL
49
3.1. Relacyjna baza danych . . . . . . . . . . . . . . . . . . . . . . 50
3.1.1. Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . 50
3.1.2. Cechy . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.1.3. Integralność danych . . . . . . . . . . . . . . . . . . . . 53
3.2. Etap projektowania . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2.1. Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . 54
3.2.2. Planowanie bazy spełniającej założenia projektu . . . . 55
3.2.3. Częste błędy w projektowaniu baz . . . . . . . . . . . . 57
3.2.4. Projektowanie bazy dla projektu eTravel . . . . . . . . 59
3.3. Etap implementacji . . . . . . . . . . . . . . . . . . . . . . . . 60
3.3.1. Diagram ERD projektu eTravel . . . . . . . . . . . . . 60
3.3.2. MySQL w projekcie eTravel . . . . . . . . . . . . . . . 61
Podsumowanie
63
Streszczenie
Celem niniejszej pracy inżynierskiej było opracowanie zagadnień teoretycznych, które pozwoliły na stworzenie systemu wspomagania planowania podróży - eTravel. Projekt opiera się na architekturze rozproszonej i wykorzystuje wzorzec REST do udostępniania danych. Wszystkie dane trzymane są
w relacyjnej bazie danych MySQL. Projekt eTravel składa się ze strony internetowej oraz dedykowanej na platformę android aplikacji mobilnej. Przy
budowie warstwy webowej wykorzystane zostało wsparcie gotowych narzędzi
takich jak Bootstrap (frontend) oraz Phalcon (backend). W celu ułatwienia
planowania podróży w mieście Poznań wprowadzono wizualizację tras wyszukiwanych przez użytkowników, wykorzystano OpenStreetMap oraz GoogleMaps API.
Praca inżynierska opisuje teorię dotyczącą systemów rozproszonych, wyróżnia ich zalety i wady oraz dostępne architektury, wskazując na zasadność
użycia w projekcie eTravel. Oprócz tego w pracy przedstawione zostały sposoby zaimplementowania niektórych rozwiązań w konkretnych funkcjonalnościach systemu. Praca demonstruje także metody i etapy budowy strony
internetowej wraz z panującymi trendami oraz wymaganiami rynku i dostosowaniem ich do różnych urządzeń. Opisano sposób prezentacji zasobów
witryny dla użytkownika oraz wady i zalety wybranych rozwiązań, których
użyto w projekcie eTravel. Przedstawiono architekturę komunikacji, przetwarzania oraz przechowywania informacji w bazie danych.
5:1092434329
Abstract
The aim of this engineering thesis was to discuss the theoretical issues which
led to the emergence of the system supporting the „eTravel” project used to
planning journeys. The project is based on the distributed communication
architecture and operates on the REST software used to sharing data. The
all data is stored in the MySQL database. The „eTravel” project provides
its users with access to a website as well as a mobile application dedicated
to mobile phones with Android operating systems. While creating the web
layer, a few ready-made collections of tools such as Bootstrap (frontend) and
Phalcon (backend) were used. In order to simplify journeys planning for users
in Poznań, routs visualizations were intrduced thanks to OpenStreetMap and
GoogleMaps API.
In this engineering thesis the issues regarding the distributed systems were
disscussed. The systems’ advantages and disadvantages were presented along
with the available architectures. Later on, the neccessity of using them while
creating the „eTravel” project was demonstrated. In addition, implementing
a few solutions to the system’s specific areas of functioning were shown.
In the paper the methods and stages of building a website were disccussed
with references to the variable trends, the demands of the market and the
need to adjust the systems to the various appliances. Additionely, the ways
of presenting site resources to a user were described as well as advantages
and disadvantages of the chosen solutions used in the „eTravel” project.
What is more, the issues of the communication architecture, data storing
and proccessing were presented in this paper.
6:5858704897
Wprowadzenie
Wstęp
Ludzie poruszają się za pomocą różnorakich środków komunikacji. Może to
być tramwaj, może to być autobus, a także pociąg. Bardzo ważną rzeczą przy
podróżowaniu jest planowanie. Musimy wiedzieć jakim środkiem lokomocji
możemy dostać się do naszego celu, kiedy kursuje, i najważniejsze - jaki
będzie koszt podróży? Wszystkie te zagadnienia są niewątpliwie kluczem do
takiego zaplanowania podróży, aby przebiegła ona przyjemnie i bezstresowo.
Wyżej wymienione pobudki skłoniły do powstania projektu eTravel. Aplikacja pozwala użytkownikowi zaplanować podróż międzymiastową na terenie
Polski, a także odnaleźć się w obecnej komunikacji miejskiej w Poznaniu.
Dzięki aplikacji mobilnej oraz webowej, użytkownik może skorzystać z aplikacji w każdej chwili i w każdym miejscu, jeśli tylko posiada połączenie z
internetem.
Oczywiście istnieją już rozwiązania pozwalające na efektywne planowanie
podróży, ale nie łączą one w sobie wszystkich możliwych funkcjonalności. Z
jednej strony planujemy podróż międzymiastową, z drugiej zaś po dotarciu
do celu, musimy skorzystać z kolejnej aplikacji, która obsługuje komunikację
miejską. Aplikacja eTravel umożliwia to wszystko w jednym miejscu.
7:1099044835
Wprowadzenie
8
Opis projektu
Projekt eTravel to połączenie różnych technologii w jedną całość, która pozwala na efektywne planowanie podróży. Główna część to aplikacja webowa
napisana w PHP oraz dodatkowo aplikacja mobilna dla systemu Android.
Intuicyjny oraz nowoczesny interfejs, a także szybkość działania i dbałość o
sprawdzone informacje to rzeczy, które cechują projekt. Dane pobierane są z
wielu źródeł, w tym wewnętrznej bazy danych, a udostępniane przez REST,
dzięki czemu mamy gwarancję szybkości przesyłu danych. Tak więc nieważne
jest czy korzystamy z aplikacji webowej czy też mobilnej, dane są synchronizowane i zawsze aktualne. Do tego dochodzi łatwość użytkowania (ang. UX),
na który położono duży nacisk przy realizacji projektu. Nie ma tu zbędnej
treści, a co ważne, jej spora część jest zwizualizowana. Na sam koniec warto
dodać, że projekt zakłada pełną personalizację, czyli możliwość utworzenia
swojego konta co daje pewne korzyści. Diagram przepływu danych został
zaprezentowany na rysunku 1, z kolei diagram klas na rysunku 2.
Główna funkcjonalnością projektu eTravel jest wyszukiwarka połączeń.
Wyświetla się ona na stronie głównej i umożliwia wpisanie punktu początkowego oraz końcowego naszej podróży (Rysunek 3). Następnie musimy sprecyzować wybór punktów, czyli miejscowości oraz opcjonalnie możemy wybrać
tryb podróży, czas i datę (Rysunku 4). Finalnie uzyskujemy tabelę z wynikami wyszukiwania (Rysunek 5).
Cel i zakres pracy
Celem projektu „eTravel” było stworzenie multiplatformowego oprogramowania do planowania podróży. Głównym i najtrudniejszym zadaniem było
stworzenie skomplikowanego systemu mającego za zadanie wspomagać pla-
8:1039546830
Wprowadzenie
9
nowanie podróży środkami komunikacji miejskiej miasta Poznań, przewoźników publicznych, a także prywatnych na terenie Polski. Zgodnie z założeniem
i trendem w projektowaniu nowoczesnych aplikacji, nastąpił trójwarstwowy
podział aplikacji. W projekcie wyróżniono następujące warstwy:
• interfejs użytkownika (komunikacja z aplikacją, zwracanie danych),
• API (modyfikacje i nadzór danych, zarządzanie klientem),
• baza danych (przechowywanie danych, bezpośrednie operacje na zbiorach danych).
Funkcjonalności
• Lokalizator przystanków - pozwala na określenie przystanków znajdujących się w określonym promieniu wokół miejsca, w którym znajduje
się obecnie użytkownik. Używa modułu GPS lub WiFi do określenia
położenia. Wyświetla przystanki na mapie wygenerowanej przez Google Maps API i pozwala na zapoznanie się z najbliższymi odjazdami
z wybranego markera.
• Najbliższe odjazdy - funkcja pozwalająca na zapoznanie się z najbliższymi odjazdami autobusów/tramwajów z danej stacji. Określa wszystkie linie przebiegające przez dany przystanek i liczbę minut do odjazdu
łącznie z ich kierunkiem.
• Wyszukiwarka połączeń - główna funkcjonalność projektu, polegająca
na wyszukiwaniu połączeń komunikacyjnych na zasadzie międzymiastowej oraz miastowej w Poznaniu. Dzięki wyszukiwarce możemy znaleźć
połączenia PKS, PKP oraz MPK.
9:8703247710
Wprowadzenie
10
• Opinie – każde połączenie międzymiastowe może zostać skomentowane
przez osobę, która korzystała z tego połączenia. Opinia może być wykorzystana w celach informacyjnych dla innych pasażerów, a także w
celu poprawy jakości usług danego przewoźnika.
• Wizualizacja tras – aby wspomóc orientację dla pasażera, który korzysta z usług MPK Poznań, stworzona została wizualizacja tras tramwajowych oraz autobusowych poszczególnych linii.
• Zarządzanie profilem - każdy użytkownik ma do dyspozycji możliwość
zarządzania swoim profilem
Zakres prac projektowych obejmuje następujące zagadnienia zrealizowane
przez poszczególnych członków zespołu:
1. Bartosz Szabanowski:
• aplikacja mobilna na platformę Android,
• nawiązywanie współpracy z podmiotami zewnętrznymi,
• systemy rozproszone,
2. Tomasz Przydróżny:
• zdefiniowanie przypadków użycia dla projektu,
• projektowanie relacyjnej bazy danych,
• implementacja bazy MySQL,
3. Maciej Klimkowski:
• geolokalizacja,
• wizualizacja,
• frontend.
10:9982419062
Wprowadzenie
11
Autorzy poszczególnych rozdziałów pracy:
• Rozdział 1. „Przetwarzanie danych w aplikacji rozproszonej”, Bartosz
Szabanowski
• Rozdział 2. „Budowa stron internetowych na podstawie frameworków
Bootstrap i Phalcon”, Maciej Klimkowski
• Rozdział 3. „Projektowanie i implementacja baz danych na przykładzie
MySQL”, Tomasz Przydróżny
11:7009752643
Wprowadzenie
12
Rysunek 1. Diagram przepływu danych
Rysunek 2. Diagram klas
12:3547314203
Wprowadzenie
13
Rysunek 3. Widok początkowy - wyszukiwarka
Rysunek 4. Widok wyboru parametrów
Rysunek 5. Widok końcowy z wynikami wyszukiwania
13:9635067421
Rozdział 1
Przetwarzanie danych w
aplikacji rozproszonej
autor: Bartosz Szabanowski
14:1005701598
1.1 System rozproszony
15
1.1. System rozproszony
1.1.1. Wprowadzenie
Definicja
System rozproszony to zbiór niezależnych, połączonych jednostek komputerowych, które dzielą zasoby w celu przetwarzania informacji [1].
1.1.2. Cechy
System rozproszony powinien posiadać następujące cechy [2]:
• Transparentność - system sprawia dla użytkownika wrażenie jednej logicznej całości.
• Odporność na błędy - zdolność systemu do działania, mimo awarii jednego z urządzeń (możliwa jednak utrata wydajności).
• Dzielenie obciążenia - wiele procesów/zadań może być wykonywane w
tym samym czasie na różnych jednostkach. W przypadku, gdy dana
jednostka jest mocno obciążona, zadanie przechodzi do kolejnej, mniej
obciążonej.
• Skalowalność - możliwość rozbudowy systemu w celu uzyskania większej
wydajności poprzez rozszerzenie konfiguracji sprzętowej bądź oprogramowania.
• Współdzielenie zasobów - zasoby są udostępniane dla każdej jednostki,
która wchodzi w skład systemu rozproszonego (np. dane, urządzenia).
15:1141425713
1.1 System rozproszony
16
1.1.3. Zalety i wady
Z cech opisanych w poprzednim punkcie wynikają następujące zalety systemu
rozproszonego:
• Szybkość - skalowalność, a także dzielenie obciążenia powoduje, że systemy rozproszone mogą oferować bardzo dużą wydajność, zdecydowanie
większą niż system scentralizowany oparty na jednej jednostce.
• Niezawodność - awaria jednej z jednostek wchodzącej w skład systemu rozproszonego nie oznacza, że cały system przestaje działać - w
przeciwieństwie do systemu scentralizowanego, gdzie awaria paraliżuje
najczęściej cały system.
• Otwartość - dodawanie elementów takich jak nowy sprzęt bądź usługi
nie narusza integralności całego systemu. Jest to możliwe, dzięki odpowiednim standardom używanych protokołów i interfejsów sieciowych.
Istnieją jednak również wady:
• Uzależnienie od szybkości transmisji danych - system rozproszony polega na przepływie informacji poprzez sieć, tak więc jest uzależniony
od działania i przepustowości tej sieci, w której także mogą zdarzać się
awarie bądź przeciążenia.
• Bezpieczeństwo - o wiele trudniej jest chronić system rozproszony, gdzie
na atak narażona jest każda pojedyncza jednostka wchodząca w skład
systemu - w odróżnieniu do jednego serwera w systemie charakterze
scentralizowanym.
16:6530630702
1.1 System rozproszony
17
1.1.4. Architektury
Wyróżniamy następujące architektury systemów rozproszonych [1]:
• Klient-serwer - istnieje jeden serwer oferujący zbiór usług, z których
korzystać może wiele różnych, niezależnych klientów. Należy wyróżnić
następujące warianty tej architektury:
– Model cienkiego klienta - cała warstwa logiczna znajduje się na
serwerze, zaś użytkownik/klient uruchamia jedynie warstwę widoku.
– Model grubego klienta - serwer spełnia tu rolę jednostki udostępniającej dane, zaś oprogramowanie po stronie klienta odpowiada
za przetworzenie logiczne danych oraz interakcję z użytkownikiem.
• Multi-serwer (architektura wielowarstwowa) - w odniesieniu do architektury klient-serwer, mamy tu wiele serwerów, na których zgromadzone są dane. Dzięki temu przetwarzanie danych jest rozproszone na
kilka jednostek, co wpływa pozytywnie na skalowalność systemu. Taka architektura jest głównie stosowana w aplikacjach o dużej liczbie
użytkowników, gdzie dane są zmienne.
• P2P (sieć równorzędna) - każdy węzeł takiej sieci jest jednocześnie usługodawcą oraz usługobiorcą. Dane wymieniane są poprzez bezpośrednią
komunikację. Jest to architektura, która zapoczątkowała systemy rozproszone i znana głównie z aplikacji typu torrent.
1.1.5. Przykłady systemów
Aktualnie zastosowanie systemów rozproszonych jest ogromne. W życiu codziennym cały czas napotykamy urządzenia wchodzące w skład takich syste-
17:1581152384
1.1 System rozproszony
18
mów. Przykładowe to:
• Bankomaty - każdy bankomat obsługiwany jest poprzez centralny serwer bankowy. Tak naprawdę bankomat jest tylko pośrednikiem, który
żądania użytkownika przesyła do serwera i zwraca odpowiedź, a także
wydaje pieniądze klientowi. Zastosowana tutaj architektura to klientserwer z modelem grubego klienta.
Rysunek 1.1. wykorzystanie architektury klient-serwer w bankomatach
(na podstawie [1])
• Systemy rezerwacyjne (np. w kinach) - chcąc zarezerwować miejsce w
hotelu bądź seans w kinie używamy do tego celu systemu rezerwacji.
Wszystkie dane rezerwacyjne zgromadzone są zazwyczaj na serwerze
centralnym, który przetwarza zapytania i gromadzi dane w bazie. Stosuje się tutaj architekturę klient-serwer, najczęściej z modelem cienkiego klienta.
• Strony WWW - coraz częściej zdarza się, że strona internetowa to tak
naprawdę aplikacja internetowa korzystająca z wielu serwerów, których
używa do pozyskiwania danych bądź logicznego przetwarzania treści
na stronie. Wyróżnia się tutaj architekturę multi-serwer. Przykładem
takiej aplikacji jest projekt eTravel.
18:1156624477
1.2 Rozproszona baza danych
19
1.2. Rozproszona baza danych
1.2.1. Wprowadzenie
Rozdział ten zostanie poświęcony zagadnieniu jakim jest rozproszona baza
danych. Jest to kolejny i szczególny przykład systemu informatycznego, gdzie
wykorzystany jest system rozproszony.
Definicja
Z rozproszoną bazą danych (RBD) mamy do czynienia, gdy wiele baz lokalnych umieszczonych w pewnych węzłach zostaje połączonych ze sobą za
pomocą sieci, tak że możliwe jest uzyskanie dostępu do każdej bazy lokalnej
z dowolnego węzła w sieci [3].
1.2.2. Postulaty Date’a
Pożądane właściwości RBD zostały podsumowane poprzez poniższe postulaty Date’a [4]:
• Lokalna autonomia - każdy węzeł RBD powinien działać niezależnie od
innych węzłów. Do tego wszelkie operacje na danym węźle powinny być
kontrolowane tylko i wyłącznie przez ten węzeł. Oznacza to działanie
niezależnego systemu zarządzania bazą danych w każdym węźle sieci.
• Uniezależnienie od centralnego węzła - z powyższej własności wynika
równorzędność każdego węzła w RBD. Nie może być żadnej centralnej
jednostki, która przetwarzałaby transakcje, ponieważ oznaczałoby to
uzależnienie innych węzłów od jej działania.
19:3086800716
1.2 Rozproszona baza danych
20
• Działanie ciągłe - każda RBD jest szczególnym przypadkiem systemu
rozproszonego, tak więc musi spełniać jego cechy. Jedną z nich jest
niezawodność, czyli usunięcie/dodanie jednego węzła w systemie bądź
aktualizacja oprogramowania nie może spowodować, że system przestanie działać. Cechę te wspomaga także fakt replikacji danych w RBD,
czyli awaria jednego węzła nie oznacza braku dostępu do danych, które
przetrzymywał. Inny węzeł może udostępniać te dane z powodzeniem.
• Niezależność lokalizacji (przezroczystość lokalizacji) - oznacza, że logika
aplikacji, która umożliwia dostęp do danych, nie powinna różnić się
działaniem w zależności od tego z jakiej lokalizacji są pobierane dane.
Niezależnie od ich położenia, użytkownik musi mieć świadomość jakoby
dane były pobierane lokalnie.
• Niezależność fragmentacji - użytkownik nie powinien wiedzieć w jaki
sposób dane są podzielone. Ponadto każdy fragment danych można
umieścić w innym węźle RBD, bez utraty spójności danych.
• Niezależność replikacji - użytkownik nie powinien mieć świadomości czy
korzysta z danych oryginalnych czy też replikowanych trzymanych na
innej bazie lokalnej.
• Niezależność sprzętowa - niezależnie od tego, na jakiej platformie sprzętowej opiera się dany węzeł, musi zostać zachowana poprawność dostępu do danych i działania całej sieci rozproszonej.
• Niezależność od systemu operacyjnego - załóżmy, że mamy system rozproszony baz danych, składający się z 3 jednostek. Na każdym znajduje
się inne oprogramowanie bazodanowe. Niezależnie od tego, wymagane
20:4454003473
1.2 Rozproszona baza danych
21
jest, aby system mógł działać poprawnie, a użytkownik nie widział różnicy w dostępie do danych.
• Niezależność sieciowa - rezultaty jakie uzyskuje użytkownik, nie mogą
być uzależnione od protokołów sieciowych, z jakich korzystają dane
węzły RBD.
• Rozproszone zarządzanie transakcjami - system RBD musi zapewniać
poprawne przetwarzanie transakcji zgodnie z aksjomatami ACID:
– atomowość - każda transakcja może zostać wykonana tylko w całości bądź wcale.
– spójność - po wykonaniu transakcji system nadal pozostanie spójny.
– izolacja - w zależności od określonego poziomu izolacji, zostaje zachowana kontrola nad transakcjami wykonywanymi współbieżnie.
– trwałość - po restarcie systemu bądź awarii, system nadal zapewnia dostęp do spójnych i nienaruszonych danych.
• Rozproszone przetwarzanie zapytań - system RBD gwarantuje, że jest
możliwe wykonanie zapytań z jednego węzła do innych węzłów.
21:1059452653
1.2 Rozproszona baza danych
22
1.2.3. Budowa i architektura
Na rysunku 1.2 została przedstawiona przykładowa realizacja rozproszonego
systemu baz danych. Przedstawia ona klienta, który ze Szczecina łączy się
się z interfejsem i przesyła mu żądanie na zwrócenie pewnych danych. Warstwa logiczna przekazuje jego żądanie do odpowiedniego serwera, który ma
zwrócić dane. Wybrany został najbliższy dostępny serwer, czyli w Gdańsku.
Zgodnie z postulatem o niezależności fragmentacji. Dzięki temu zyskujemy
na wydajności.
Rysunek 1.2. przykładowa architektura RBD
(na podstawie [4])
Architektury:
• Jednorodna - wszystkie bazy lokalne oparte są na tym samym oprogramowaniu, np. Oracle.
• Niejednorodna - bazy lokalne oparte są na różnych systemach operacyjnych, np. Oracle, MSSQL. Przykładem takiej architektury może być
projekt eTravel, gdzie istnieje kilka źródeł danych. Jest to baza oparta
na MySQL oraz druga, oparta na silniku SQLite.
22:7469728942
1.3 Przetwarzanie danych
23
1.3. Przetwarzanie danych
W tym rozdziale zostanie opisany proces przetwarzania danych w aplikacji
rozproszonej, na który składa się pozyskiwanie danych z różnych źródeł, ich
obróbka pozwalająca na jednolity format składowania w bazie danych oraz
komunikacja umożliwiająca wymianę danych pomiędzy jednostkami systemu
rozproszonego. Przykłady będą oparte na projekcie eTravel.
1.3.1. Pozyskiwanie i obróbka
Pierwsza i najważniejsza kwestia to wytypowanie kilku źródeł danych, z których możemy pozyskać informacje do naszej aplikacji. Następnie należy dokonać analizy struktury źródła i na tej podstawie wybrać najlepsze narzędzie do
procesu ekstrakcji. Dane mogą być przechowywane w rozmaitych formatach.
Na przykład:
• relacyjne bazy danych
• płaskie bazy danych (XML, JSON, SQLite, ...)
• źródła stron www
• API
Aplikacja eTravel swoje dane pozyskała z płaskiej bazy danych w formacie
JSON, źródła strony e-podroznik.pl oraz API peka.poznan.pl. Rozważmy
jeden z przykładów. Mamy do dyspozycji dwa pliki, które tworzą płaską
bazę danych MPK Poznań:
• Linie, z których chcemy pozyskać koordynaty prostych, numer linii
(a3), typ linii (a4), przystanek początkowy i końcowy odcinka (stopfrom, stop-to).
23:1073116736
1.3 Przetwarzanie danych
24
1
2
{ " geometry " : { " coordinates " : [ [
16.952150457775801 ,
5 2.3 98 78 76 47 06 71 03
3
4
],
5
[ 16.951971759047101 ,
5 2.3 98 47 13 00 26 39 99
6
7
],
8
[ 16.951597783775401 ,
5 2.3 97 81 67 80 10 44 99
9
]
10
],
11
" type " : " LineString "
12
13
},
14
" id " : 5022609 ,
15
" properties " : { " a1 " : null ,
16
" a2 " : null ,
17
" a3 " : " 5 " ,
18
" a4 " : " T " ,
19
" a5 " : " 0 " ,
20
" a6 " : " 14 " ,
21
" stop_from " : " RRAT03 " ,
22
" stop_to " : " KORN01 "
23
}
Kod źródłowy 1.1. Linia opisana za pomocą JSON
• Przystanki, z których pozyskać trzeba: współrzędne, typ przystanku
(a4), kursujące linie (a2), nazwę (a3).
24:1012874357
1.3 Przetwarzanie danych
25
" features " : [ { " geometry " : { " coordinates " : [
1
16.774494820691402 , 52.4737050253528 ] , " type " :
" Point " } ,
2
" id " : " KIEK22 " ,
3
" properties " : { " a1 " : " 1 " ,
4
" a2 " : " 86 , 95 , 239 " ,
5
" a3 " : " KIEKRZ " ,
6
" a4 " : " A " ,
7
" a5 " : " przystanek autobusowy "
}
8
Kod źródłowy 1.2. P rzystanek opisany za pomocą JSON
W celu zdobycia powyższych danych użyjemy wbudowanej w PHP biblioteki do obsługi formatu JSON. Tak wygląda skrypt (Kod źródłowy
1.3), który pozwoli nam na przekonwertowanie danych zakodowanych
w JSON na obiekt bądź tablicę asocjacyjną.
1
<? php
2
// zwraca zawartosc pliku
3
$contents = file_ get_co ntents ( ’ przystanki . json ’) ;
4
// zwraca tablice asocjacyjna ( klucz = > wartosc )
5
$results = json_decode ( $contents , true ) ;
6
// zwraca obiekt
7
$results = json_decode ( $contents ) ;
8
?>
Kod źródłowy 1.3. K onwersja
25:6173042955
1.3 Przetwarzanie danych
26
Teraz możemy przejść do właściwej części, czyli obróbki pozyskanych
danych. Opieramy się na informacjach zapisanych w tablicy asocjacyjnej. Poniższy listing (Kod źródłowy 1.4) prezentuje wyodrębnienie
wspomnianych wcześniej elementów, z pojedynczego rekordu przystanku. Informacje są zapisane kolejno w nowych tablicach.
1
for ( $i =0; $i < count ( $results ) ; $i ++)
2
$lines = explode ( " ," , $properties [ $i ][ ’ a2 ’ ]) ;
3
$geoY = $geometry [ $i ][ ’ coordinates ’ ][0];
4
$geoX = $geometry [ $i ][ ’ coordinates ’ ][1];
5
$name = $properties [ $i ][ ’ a3 ’ ];
6
$short = $short_name [ $i ];
7
$type = $properties [ $i ][ ’ a4 ’ ];
Kod źródłowy 1.4. P ozyskanie
danych
przystanku
z
pojedynczego
rekordu
Ostatnim elementem jest załadowanie danych do bazy. Prezentuje to
poniższy listing (Kod źródłowy 1.5). Należy zwrócić uwagę na rozbicie
danych na dwie tabele w celu zachowania przejrzystości oraz zwiększenia wydajności przy ich odpytywaniu (szybciej zostanie odpytana
tabela ”lines” o daną linie aniżeli kolumna ”lines” z wierszem ”86, 95,
239”, gdzie należy dodatkowo rozbić string).
1
$mysqli -> query ( "
2
INSERT INTO stations ( geoX , geoY , name ,
short_name , type ) VALUES ( ’ $geoX ’, ’ $geoY ’, ’
$name ’, ’ $short ’, ’ $type ’) " ) ;
26:6900672126
1.3 Przetwarzanie danych
27
3
4
$id = $mysqli - > insert_id ;
5
foreach ( $lines as $line )
$mysqli -> query ( " INSERT INTO lines (
6
station_id , number ) VALUES ( $id , $line ) "
);
Kod źródłowy 1.5. Dodanie danych do bazy
W ten sposób przystanki zostają załadowane do bazy MySQL, lecz
mogą być one również w dowolnym momencie w podobny sposób zaaktualizowane (polecenie UPDATE). Nic nie stoi również na przeszkodzie, aby w przypadku awarii bazy danych, skorzystać z tych informacji
bezpośrednio z pliku, jako płaska baza danych. Dodatkowym atutem
takiego rozwiązania jest fakt, że taki plik stanowi odrębną bazę lokalną
umieszczoną w innym węźle, w tym przypadku jest to serwer FTP.
1.3.2. Komunikacja
W systemach rozproszonych ważną rolę pełni skuteczna komunikacja między
jednostkami pozwalająca na poprawną i szybką wymianę danych. Istnieje
kilka protokołów/interfejsów, które spełniają taką rolę:
1. SOAP
Protokół komunikacyjny oparty o język znaczników XML [5]. Umożliwia przekazywanie wywołań zdalnych procedur poprzez mechanizmy
transportowe takie jak: HTTP, POP, SMTP itd. Podstawowe użycie
prezentują poniższe listingi (Kod źródłowy 1.6, 1.7):
27:4139353539
1.3 Przetwarzanie danych
1
<? xml version = " 1.0 " ? >
2
< soap : Envelope
3
xmlns : soap = " http :// w3 . org /2001/ soap - envelope "
4
soap : encodingStyle = " http ://. w3 . org /2001/12/ soap encoding " >
5
6
7
8
9
10
< soap : Body xmlns : m = " http :// yoursite . com / news " >
<m : GetNewsById >
<m : NewsId >44 </ m : NewsId >
</ m : GetNewsById >
</ soap : Body >
</ soap : Envelope >
Kod źródłowy 1.6. W ywołanie procedury
1
<? xml version = " 1.0 " ? >
2
< soap : Envelope
3
xmlns : soap = " http :// w3 . org /2001/12/ soap - envelope "
4
soap : encodingStyle = " http :// w3 . org /2001/12/ soap encoding " >
5
6
7
8
9
10
< soap : Body xmlns : m = " http :// yoursite . com / news " >
<m : GetNewsByIdResponse >
<m : Title > news example </ m : Title >
</ m : GetNewsById >
</ soap : Body >
</ soap : Envelope >
Kod źródłowy 1.7. Odpowiedź
28:3996677310
28
1.3 Przetwarzanie danych
29
2. REST
Styl architektoniczny budowania aplikacji rozproszonych z wykorzystaniem protokołu HTTP do wymiany danych pomiędzy maszynami [6].
Wykorzystuje architekturę klient-serwer. Składa się zasobów:
/users, /news, /stations - rzeczownik w liczbie mnogiej
na których mogą być wykonane następujące akcje:
• GET - pobierz
• POST - utwórz
• PATCH - aktualizacja częściowa
• PUT - zaaktualizuj
• DELETE - usuń
Każda z akcji powinna zwrócić:
• status HTTP
• opis błędu dla użytkownika
• opis błędu dla dewelopera
Obsługa błędów polega na zwróceniu przejrzystego komunikatu i konkretnego kodu błędu:
• 4xx - błędy po stronie klienta
• 5xx - błędy po stronie serwera
• 2xx - sukces
29:1138506230
1.3 Przetwarzanie danych
30
Przykładowe żądanie w formacie JSON o dodanie użytkownika i odpowiedź w zależności od powodzenia akcji prezentuje kod źródłowy 1.8. Jednak,
aby taka akcja mogła zostać obsłużona wymagane jest odpowiednie REST
API. W eTravel do tego celu został użyty framework php - phalcon. Posiada on wbudowaną obsługę zapytań restowych. Przykładowy kod obsługi
powyższej akcji POST można ujrzeć na listingu (Kod źródłowy 1.9).
1
request
2
{
" username " : " user1 " , " email " : " user1@poczta . pl " , "
3
password " : " qwerty "
4
}
5
6
response
7
200: { " message " : " Uzytkownik zostal dodany poprawnie ! "
}
8
404: {
" field " : " username " ,
9
" userMessage " : " Istnieje juz uzytkownik o podanej
10
nazwie " ,
" devMessage " : " Username must be unique "
11
12
}
Kod źródłowy 1.8. Odpowiedź i żądanie
30:9840552938
1.3 Przetwarzanie danych
31
1
2
$app - > post ( ’/ users ’ , function () use ( $app ) {
3
$user = $app - > request - > getJsonRawBody () ;
4
$phql = " INSERT INTO users ( username , email ,
password ) VALUES (: username : , : email : , : password
:) " ;
$status = $app - > modelsManager - > executeQuery ( $phql ,
5
array (
6
’ username ’ = > $user - > username ,
7
’ email ’ = > $user - > email ,
8
’ password ’ = > sha1 ( $user - > password )
));
9
10
$response = new Phalcon \ Http \ Response () ;
11
if ( $status - > success () == true ) {
$response - > setStatusCode (200 , " Success " ) ->
12
setJsonContent ( array ( ’ message ’ = > " Uzytkownik
zostal dodany poprawnie ! " , ’ status ’ = > 1) ) ;
} else {
13
$response - > setStatusCode (404 , " Failure " ) ->
14
setJsonContent ( array ( ’ userMessage ’ = > "
Istnieje juz uzytkownik o podanej nazwie ! " , ’
developerMessage ’ = > " Username must be unique
!"));
15
}
16
return $response ;
17
}) ;
Kod źródłowy 1.9. Obsługa akcji POST w Phalcon
31:1112722243
1.3 Przetwarzanie danych
32
Najpierw należy wskazać jaka akcja i jaki zasób ma zostać obsłużony
(post, /users). Następnie dane przekazane przez HTTP są pobierane i wstawiane do bazy danych, z uwzględnieniem filtrowania zmiennych (modelsManager). Dalej tworzony jest obiekt odpowiedzi przez Phalcona (Response), w
którym w zależności od powodzenia dodania danych do bazy danych, zwracane są odpowiednie komunikaty i status w formacie JSON.
Rysunek 1.3 prezentuje przepływ danych w aplikacji rozproszonej eTravel
z użyciem REST API. Użytkownik widzi jedynie interfejs aplikacji mobilnej
bądź stronę internetową. Nie wie jednak, że każde zapytanie jest kierowane
do serwera, na którym działa API i dopiero ono dostarcza właściwych danych
z lokalnych baz.
Rysunek 1.3. REST w projekcie eTravel
Podsumowując, wzorzec REST to prosty i lekki wzorzec, który pozwala
na wygodną komunikację w aplikacjach rozproszonych.
32:1891501590
Rozdział 2
Budowa stron internetowych na
podstawie frameworków
Bootstrap i Phalcon
autor: Maciej Klimkowski
33:4283534076
2.1 Nowe metody budowy stron internetowych
34
2.1. Nowe metody budowy stron internetowych
Szybki i dynamiczny rozwój sieci Internet bardzo intensywnie wpłynął na
metody tworzenia stron internetowych. Powodem zmian i rozwoju była popularyzacja internetu oraz stałe zwiększanie jego szybkości. Użytkownicy potrzebowali nowych możliwości. Proces rozwoju trwa nieustannie i przyspiesza
wraz z coraz to większym dostępem ludzkości do sieci.
2.1.1. Informacja ogólna
Pierwsze witryny internetowe opierały swoje działanie na zamieszczonym
przez autora stałym tekście, który użytkownik mógł tylko czytać. Wraz z
rozwojem Internetu oraz zwiększeniem jego szybkości do stron www zaczęto
wprowadzać elementy graficzne oraz zamieszczać fotografie lub obrazy wzbogacające treść zamieszczona w formie tekstu. Doszło jednak do sytuacji, gdy
pula możliwych działań okazała się zbyt mała. Spowodowało to wprowadzenie rewolucyjnych zmian do których przyczynił się stały rozwój idei stron
internetowych oraz ich popularyzacja. Wzbudzały one coraz większe zainteresowanie użytkowników, w tym także dużych instytucji oraz przestępców.
W celu ochrony danych oraz propagowania dalszego rozwoju opracowano nowe standardy, ich celem było stałe zwiększanie bezpieczeństwa danych oraz
użytkowników oraz nowy typ tworzenia stron internetowych, który pozwoli
na bezpośrednią interakcję z użytkownikiem. Ideę tą nazwano „web 2.0”.
Przyjmuje się, że „web 2.0” powstał w 2004 roku. Pojęcie to miało określać
nowy wymiar Internetu. Nowego medium, które przestało być tylko miejscem
prezentacji przekazu, a zaczęło być dostępne dla wszystkich użytkowników.
Działanie sieci Internet od tej pory miało pozwolić na tworzenie treści przez
grupę twórców oraz odbieranie treści przez grupę odbiorców. Przy czym każ-
34:4861152683
2.1 Nowe metody budowy stron internetowych
35
dy z użytkowników mógł należeć do obydwu grup. „Web 2.0” umożliwiał
interaktywność i elastyczność. Od tej pory użytkownicy samodzielnie mogli
tworzyć treść oraz ją edytować oraz reagować na zamieszczane treści. [7]
2.1.2. Dynamika zmian w bieżącej dekadzie
Początek bieżącej dekady to wdrożenie idei „web 2.0” oraz udostępnienie wielu nowych opcji dla użytkownika. Od teraz każdy kto zechciał, brał udział
w tworzeniu witryny internetowej. Możliwe to było poprzez tworzenie różnego rodzaju treści (artykuły, komentarze, wpisy na forach) oraz stopniowe
pojawianie się społeczności użytkowników. Masowo zaczęły powstać strony,
gdzie użytkownicy oprócz tworzenia treści, mogli zakładać także społeczności
stworzone wokół danej witryny oraz współdziałać.
Powiększenie grupy twórców treści na stronach internetowych pozwoliło
na powstanie nowych typów witryn internetowych oraz zwiększenie kanałów przekazu. Na początku obecnej dekady powstały popularne dziś serwisy
społecznościowe (facebook.com, twitter.com), platformy z wideo oraz muzyką (youtube.com), platformy wymiany plików (megaupload.com), sklepy
internetowe (rozwój: allegro.pl, amazon.com) oraz wiele innych typów stron
internetowych, które stały się bardziej multimedialne. Niewątpliwie było to
możliwe dzięki stałe powiększającemu się zasięgowi Internetu oraz dużym
wzrostem jego prędkości.
Duży przyrost stron internetowych spowodował, że ich właściciele musieli
dbać już nie tylko o treść, którą strona zawierała, ale także o wygląd, reklamę
oraz unikalność. Konkurencja stale się zwiększała, użytkowników przybywało,
a kluczem było zdobycie ich dla siebie. Rynek stworzył zapotrzebowanie na
nowe usługi. Zaczęto świadczyć usługi w tworzeniu szat graficznych witryn,
35:8452135270
2.1 Nowe metody budowy stron internetowych
36
optymalizacji i standaryzowania kodu witryn, promocji w wyszukiwarkach
oraz tworzenia szeroko pojętej reklamy. Internet stał się źródłem dochodu i
nadal posiadał ogromny potencjał.
Rozwój techniki i popularyzacja urządzeń mobilnych miały duży wpływ
na strony www. Gdy użytkownicy zaczęli korzystać z Internetu w nowy sposób, np. z telefonu komórkowego, należało dostosować witrynę, tak aby korzystanie z było wygodne. Nowe urządzenia miały mniejszy ekran, działały
wolniej, zazwyczaj posiadały też wolniejsze połączenie internetowe. Wszystkie te aspekty sprawiły, że korzystanie z pełnej wersji strony byłoby uciążliwe.
Tak powstał pomysł tworzenia „mini stron”, były to specjalnie przygotowane, oddzielne wersje witryn internetowych, które wyświetlano użytkownikom
telefonów komórkowych. „Mini strony” charakteryzowały się znacznie okrojoną treścią, brakiem fotografii i obrazków, często brakiem lub małą ilością
grafiki.
Rozwój techniczny przyspieszał jeszcze bardziej, zaczęto tworzyć mnóstwo nowych urządzeń mobilnych jak tablety czy smartfony o różnej wielkości ekranu. Ponadto Internet stawał się jeszcze popularniejszy, a dostęp
do dobrej jakości łącza nie stanowił już problemu. Wskazane elementy składowe w drugiej połowie bieżącej dekady wymusiły zaprzestanie tworzenia
„mini stron”. Urządzenia oraz sieć były dostatecznie szybkie, aby móc ładować pełne strony internetowe, a nie ich bardzo okrojone wersje. Użytkownicy
pragnęli korzystać z jednej wersji strony, mieć dostęp do swoich kont, układu witryny czy posiadać identyczną treść na wszystkich urządzeniach. Nadal
pozostawał jednak problem dostosowania witryn internetowych do różnego
rodzaju rozdzielczości i wielkości ekranów. Urządzenia korzystające z sieci
różniły się diametralnie, od 3,5” smartfonów do 50” i większych ekranów
telewizorów. Problem zdefiniowano jako „świat multiscreen”. Opracowano
36:1025690308
2.1 Nowe metody budowy stron internetowych
37
technologie, które tworzą „płynny” szablon strony. Twórcy stron www mogli
przygotowywać rozbudowaną wersję szablonu, które pozwalają na automatyczne wykrywanie rozdzielczości ekranu oraz same dostosowują witrynę, tak
aby wyświetlała się poprawnie na każdym urządzeniu. Dzięki temu użytkownicy posiadają dostęp do jednej wersji strony (treść, konta, możliwości działania), a jedyną różnicą jest ułożenie i wyświetlenie elementów na ekranie.
2.1.3. Zmiana priorytetów w tworzeniu witryn
Początkowo strony internetowe były miejscem, gdzie autor lub grupa autorów promował swoje idee, pomysły, publikacje lub informacje o sobie lub
swoich dokonaniach. Strona internetowa była wizytówką, miejscem realizacji
swoich własnych założeń i pasji. Ich budowa oraz kompozycja była samoistną
wizją twórcy. W erze „web 2.0” Internet i strony www zaczęły przekształcać się w nowe, dochodowe formy biznesu. Dzięki temu zyskiwać zaczęły
standardy budowy i użytkowania stron. Każdy twórca stron pragnął, aby jego strona była najpopularniejsza, zgodna ze standardami budowy, czytelna,
często odwiedzana, a przy tym szybka i możliwe dogodna w edycji. Zauważono, że to użytkownik jest tym, który dyktuje idee poprzez wybór tego co
jest dla niego najdogodniejsze. Wprowadzono więc systemy ankiet, komentarzy, zgłaszania uwag czy formularzy kontaktowych. Położono duży nacisk na
śledzenie użytkownika i zbieranie informacji o nim, zaczęto tworzyć profile
użytkownika, dostarczać mu treść która go interesuje oraz brać pod uwagę
jego sugestie. Stworzono zaawansowane narzędzia badające ruch na stronie
(np. Google Analytics) oraz pozwalające na uzyskanie szczegółowych danych
o użytkowniku. Rozwinęła się gałąź analizy ruchu na witrynach internetowych oraz e-marketing. Stosowanie standardów, badania ryku oraz odejście
od własnej wizji doprowadziły do zmian priorytetów – obecnie najważniejszy
37:7550494135
2.2 Frontend
38
dla twórcy jest użytkownik. To on dyktuje co czyta, jak wygląda strona i co
go interesuje. Pod wymagania użytkownika dostosowuje się szablony stron,
ich funkcjonalność, elastyczność, świadczone usługi, zamieszczane materiały oraz rozrywkę. Internet niewątpliwie zyskał, stał się najpopularniejszym
środkiem masowego przekazu. Jest także inny niż wszystkie media, bo tak
naprawdę tworzony dla użytkownika, skrojony na jego potrzeby i wymagania,
a jednocześnie rozległy.
2.2. Frontend
Frontend to słowo pochodzące z języka angielskiego, w informatyce oznacza
część strony internetowej przeznaczonej dla użytkownika. Pojęcie to określa
część kliencką, interfejs. Jest to część systemu komputerowego, który znajduje
się najbliżej użytkownika. Frontend zbiera dane od użytkownika, przekazuje
do „backendu” i zwraca użytkownikowi wyniki działania.
2.2.1. User Experience
Wzrost znaczenia użytkownika strony internetowej jako konsumenta doprowadził do powstania nowych metod pozyskiwania informacji biznesowych i
kształtowania modelu danych oraz ich wizualizacji. Obecnie każdy internauta
może przeglądać miliardy stron internetowych, konkurencja jest ogromna, a
pozyskanie użytkownika bardzo trudne. Pozyskanie użytkownika, zatrzymanie go przy sobie oraz przekonanie go do dokonania konwersji na stronie stało
się kluczowe. W tej sposób zrodziło się określenie oraz idea User Experience.
User Experience (skrót: UX) to pojęcie bardzo szerokie, niemożliwe
jednoznacznie do zdefiniowania. Określa bowiem doświadczenia użytkownika,
38:1365731907
2.2 Frontend
39
towarzyszące mu podczas korzystania z usługi, produktu czy dokonywaniu
konwersji. Każde doświadczenie użytkownika jest subiektywną oceną, zależną
od wielu czynników towarzyszących, często niemożliwych do odtworzenia.
Pojęcie to znajduje się na granicy wielu dziedzin nauki: psychologi, sztuki,
wzornictwa, użyteczności oraz technologii.
Główną ideą UX jest zbieranie doświadczeń wielu użytkowników, przetworzenie tych danych, analiza oraz przygotowanie takiej warstwy klienckiej,
która spełni oczekiwania jak największej grupy użytkowników. Dostosowanie
do trendów, przyzwyczajeń użytkownika, intuicyjnej symboliki, czytelności
oraz typografi stało się zdecydowanie łatwiejsze dzięki User Experience.
Rozwój dziedziny doprowadził do projektowania interfejsów wygodnych,
użytecznych, dostosowanych do potrzeb użytkownika/klienta, które są dopracowane w najmniejszych szczegółach, a jednocześnie są łatwe w obsłudze. Zrezygnowano z niepotrzebnych wariantów graficznych, multimedialnych
czy rozbudowanych formularzy. Głównym trendem jest prostota, czytelność,
szybkość, elastyczność oraz funkcjonalność.
Praktyka User Experience stała się bardzo popularna. Producenci i twórcy
mają świadomość jej potęgi. Korzystają z niej wszyscy, począwszy od dużych
korporacji aż do jednoosobowych firm. Inspiracja użytkownika i zachęcenie
go do skorzystania z naszej witryny, dokonania na niej konwersji stało się
kluczowe. [8]
2.2.2. Responsive Web Design
Rewolucja internetowa zwana „świat multiscreen” wymusiła zmiany w tworzeniu witryn. Korzystanie z Internetu na różnych urządzeniach, o różnej
rozdzielczości i wielkości ekranu wymagało elastycznego sposobu wyświetla-
39:2777848730
2.2 Frontend
40
nia informacji. Niemożliwe stało się przygotowanie oddzielnych wersji witryny, bowiem wariantów z jakich korzystają użytkownicy przeglądający sieć
jest zbyt dużo. Głównym celem było stworzenie jednego typu szablonu, dostępnego na wielu platformach, który pozwoli wyświetlić witrynę w różnych
wariantach, jednak nie zaburzy formy przekazywanych treści. Rozwiązanie
udało się wypracować, a ideę nazwano Responsive Web Design.
Responsive Web Design (skrót: RWD) to sposób tworzenia uniwersalnej i elastycznej strony internetowej. Polega na przygotowaniu jednego szablonu, którego układ, wygląd oraz zawarta treść dostosuje się automatycznie
do używanego urządzenia i rozdzielczości ekranu. Reguła Responsive Web
Design oznacza, że strona ma się nie tylko wyświetlić, ale być maksymalnie
zoptymalizowana do używanego urządzenia. Oznacza to przygotowanie do łatwego i szybkiego przeglądania zawartości, wprowadzania treści, korzystania
z funkcji społecznościowych oraz łatwą i intuicyjną nawigację. Bez względu
na rodzaj urządzenia korzystanie z witryny ma być łatwe i komfortowe. [9]
Rysunek 2.1. Responsive Web Design w praktyce
[12]
40:8547652699
2.2 Frontend
41
Pierwszym i najważniejszym krokiem w idei Responsive Web Design jest
automatyczne określenie rozdzielczości ekranu oraz przygotowanie odpowiedniego wariantu szablonu strony internetowej. Możliwe jest to dzięki regułą
media queries. Znaczniki @media dostępne były w kaskadowych arkuszach
stylów (CSS) już zanim powstała idea RWD, jednak to trzecia wersja CSS
zrodziła zapotrzebowanie na ich użycie i stworzenie idei płynnego i elastycznego szablonu witryny. Za pomocą znacznika @media określamy układ kolumn (rozkład sekcji elementów strony) na ekranie. Media queries przyjmują
kilka głównych wartości wejściowych, które określają typ urządzenia, maksymalną lub minimalną szerokość ekranu na których wyświetlamy dany schemat kolumn oraz reguł z pliku CSS. Poniżej zamieszczono przykłady użycia
@media.
1
@media ( min - width : 768 px ) {
// kod pliku css
2
3
}
Kod źródłowy 2.1. @media
definiujący
styl
dla
ekranu
o
minimalnej
rozdzielczości 768 pikseli
1
@media screen and ( min - width : 480 px ) {
// kod pliku css
2
3
}
Kod źródłowy 2.2. @media definiujący styl dla urządzenia mobilnego lub
komputera o minimalnej rozdzielczości 480 pikseli
41:1131159034
2.2 Frontend
1
@media print {
// kod pliku css
2
3
42
}
Kod źródłowy 2.3. @media definiujący styl dla drukarki
1
@media not TV and ( max - width : 1024 px ) {
// kod pliku css
2
3
}
Kod źródłowy 2.4. @media definiujący styl dla wszystkiego oprócz telewizorów
i maksymalnej rozdzielczości 1024 piksele
Projektowanie płynnych i elastycznych szablonów stron internetowych
wymaga tworzenia rozbudowanych kaskadowych arkuszy stylów. W celu ułatwienia i przyspieszenia tego procesu, powstały rozwiązania z predefiniowanymi, wymaganymi klasami i standardowymi zawartościami, które w łatwy
sposób pozwalają na edycję interesujących nas klas i dodanie własnych. Najpopularniejszym na świece tego typu rozwiązaniem jest framework Bootstrap.
Platforma ta pozwala na dogodne budowanie responsywnego wyglądu strony, ponadto oferuje zestaw popularnych technik i bibliotek front-end oraz
zawiera wbudowane skrypty Java Script.
Predefiniowane szablony frameworku Bootstrap pozwalają na szybką zmianę układów witryn i dostosowanie ich do własnych potrzeb. Strona dzielona
jest na dwanaście płynnych obszarów, kolumn. Gdzie dwanaście oznacza całą
szerokość strony, a jeden tylko 1/12 szerokości. Możliwe są zmiany szerokości
obszarów ad-hoc i wyświetlanie różnego ułożenia dla desktopów, smartfonów
42:2257777007
2.2 Frontend
43
i tabletów. Klasy, kolumny decydujące o szerokości strony są zdefiniowane
dla każdego typu w plikach CSS. Jedyną operacją użytkownika jest zmiana
„liczb” w zakresie 1-12. Obszary nie wymagają definicji, ani deklaracji. Bootstrap oferuje ponadto możliwość nadpisywania predefiniowanych klas oraz
definiowanie własnych w plikach CSS, a następnie dodanie ich do wykorzystywanego szkieletu w pliku HTML.
1
< div class = " col - xs -12 col - sm -6 col - lg -8 " > Komunikat </ div >
Kod źródłowy 2.5. Przykład zastosowania kolumn we frameworku Bootstrap
Powyższy kod źródłowy (2.5) przypisuje do znacznika DIV trzy warianty wyświetlania jego zawartości (łańcucha znaków ”Komunikat”) zależnie
od spełnionego warunku. Instrukcje zamieszczone w atrybucoe class należy
interpretować następująco:
• col-xs-12 dla urządzeń o rozdzielczości ekranu mniejszej niż 544 pikseli
wyświetl DIVa na całej szerokości ekranu,
• col-sm-6 dla urządzeń o rozdzielczości ekranu większej niż 544 piksele
wyświetl DIVa na połowie szerokości ekranu,
• col-lg-8 dla urządzeń o rozdzielczości ekranu większej niż 992 piksele
wyświetl DIVa na 2/3 szerokości ekranu.
Testując kod źródłowy (2.5) otrzymamy wynik, które mówi, że powyższe reguły nie działają jak instrukcja warunkowa (pierwsze pasujące dopasowanie), lecz wybierają wariant najlepiej dopasowany. Powyższy kod dla
rozdzielczości ekranu full HD (1920x1024px) wybierze wariant col-lg-8. [10]
43:8153614787
2.2 Frontend
44
Tworząc projekt eTravel stosowaliśmy się do najważniejszych zasad i
trendów w dotyczących tworzenia witryn internetowych. Użyto znaczników
@media w celu zaprojektowania strony w pełni responsywnej oraz elastycznej
i dostosowanej do każdego urządzenia oraz rozdzielczości.
1
@media only screen and ( min - width : 520 px )
// kod pliku css
2
3
{
}
4
5
@media only screen and ( min - width : 1024 px ) {
// kod pliku css
6
7
}
Kod źródłowy 2.6. Fragmenty reguł @media w projekcie eTravel
2.2.3. Warstwa klienta
Zaprojektowanie udanego frontendu nie jest zadaniem łatwym. Musimy spełnić oczekiwania jak największej grupy użytkoników (zgodnie z ideologią User
Experience) i przygotować stronę dostępną na wszystkie urządzenia (Responsive Web Design). Ponadto przygotowany projekt musi działać szybko, być
wydajny po każdej ze stron (klient oraz serwer), posiadać możliwość szybkiej
i łatwej edycji oraz wykorzystywać sprawdzone technologie.
Przygotowanie interfejsu użytkownika rozpoczynamy od zaprojektowania
i stworzenia szablonu graficznego strony. Kolejnym krokiem jest przygotowanie go do transformacji w zakodowany w HTML i CSS projekt. Ostatni krok
to dostosowanie go do używanego przez nas schematu lub rodzaju witryny,
44:3982570133
2.2 Frontend
45
umieszczenie kodu w odpowiednich plikach. Na pozór każdy z etapów jest
krótki, jednak nie jest to prawda. Minimalizując czas na operacje związane z
przełożeniem wyglądu witryny na używalny kod używa się gotowych rozwiązań. Jednym z takich rozwiązań jest wspomniany w poprzednim rozdziale
Bootstrap, którego w celu optymalizacji czasu pracy użyliśmy w projekcie
eTravel.
Bootstrap to rozbudowany zbiór predefiniowanych funkcji i reguł kaskadowych arkuszy stylów. Obsługuje nie tylko responsywność i elastyczność
witryny. Posiada reguły odpowiadające za wygląd nawigacji, przycisków, formularzy, wykresów, nagłówków, akapitów i wielu innych. Modyfikacja prefediniowanych reguł jest łatwa, możemy to zrobić poprzez nadpisanie klasy o
danej nazwie w głównym pliku CSS lub przygotowanie własnej klasy w pliku
CSS, a następnie dodanie jej w atrybucie class pliku HTML dla znacznika,
który chcemy zmodyfikować.
1
< button type = " submit " class = " btn btn - success " name = "
submit " > Wyszukaj </ button >
Kod źródłowy 2.7. Użycie
predefiniowanej
reguły
wyglądu
przycisku
w
projekcie eTravel
1
< button type = " submit " class = " btn btn - success btn - red "
name = " submit " > Wyloguj </ button >
Kod źródłowy 2.8. Modyfikacja predefiniowanej reguły wyglądu przycisku w
projekcie eTravel
45:9250717738
2.2 Frontend
1
. btn - red {
background - color : red ;
2
3
46
}
Kod źródłowy 2.9. Zawartość klasy btn-red użytej w kodzie źródłowym 2.8
Framework Bootstrap posiada także wsparcie dynamicznych języków modyfikacji arkuszy stylu less oraz sass. Języki te pozwalają na tworzenie funkcji
i zmiennych, który znacznie zmniejszają objętość kodu, tym samym prowadząc do optymalizacji działania witryny internetowej. Ponadto framework
wspiera język Java Script oraz najnowsze wersje standardów CSS oraz HTML.
Wszystkie wymienione dodatki i funkcjonalności pozwalają z powodzeniem
zastąpić starą i sprawiającą duże problemy technologię Flash.
1
@color : # ffffff ;
2
@background : # 1 F363D ;
3
. special - bar a {
4
color : @color ;
5
}
6
. special - bar div {
background - color : @background ;
7
8
}
Kod źródłowy 2.10. Użycie less w projekcie eTravel
Tworzenie nowoczesnych i w pełni kompatybilnych stron internetowych
nie wymaga ogromnego nakładu czasu i sił. Spowodowane jest to udostępnieniem gotowych rozwiązań początkowych takich jak Bootstrap.
46:6009724107
2.3 Backend
47
2.3. Backend
Backend to wewnętrzna część strony internetowej, która nie jest widoczna
dla użytkownika. Frontend przekazuje mu dane od użytkownika. Na podstawie pozyskanych danych backend wykonuje określone operacje i zadania.
Jeśli jest to konieczne zwraca wynik do użytkownika poprzez frontend.
2.3.1. Wprowadzenie
Obecnie dostępny jest bardzo szeroki zakres możliwości tworzenia backendu.
Analogicznie do frontendu, tutaj również powstały gotowe rozwiązanie prekonfigurowane, które ułatwiają budowę witryny od strony technicznej i są
łatwe do modyfikacji czy rozbudowy. Bardzo ciekawym i nowoczesnym rozwiązaniem jest framework języka PHP o nazwie Phalcon. System ten jest
bazą całej webowej części projektu eTravel, rozbudowaliśmy go do naszych
potrzeb i wykorzystaliśmy część opcji, które oferuje.
2.3.2. Zalety i wady
Decydując się na gotowe rozwiązania, nawet gdy są one łatwe do modyfikacji
i elastyczne w działaniu zawsze uznajemy pewne kompromisy. Otrzymujemy
pewien zbiór, który ułatwia i przyspiesza naszą pracę, jednak trafiamy też
na wady, które musimy zaakceptować. Tworząc eTravel zdecydowaliśmy się
na framework Phalcon. Poniżej opisano ułatwienia i problemy z jakimi się
spotkaliśmy.
Phalcon posiada bardzo dużo zalet. Przy budowie projektu, którego główną ideą było realizowanie szybkich połączeń między warstwami frontendbackend niewątpliwy nacisk położyliśmy na szybkość działania. Wśród fra-
47:6043825527
2.3 Backend
48
meworków PHP użyty przez nas produkt jest jednym z najszybszych. Jednocześnie jest w pełni funkcjonalny i wzbogacony nowoczesnymi rozwiązaniami.
Ponadto posiada pełne wsparcie REST API, które używamy do bardzo wielu
operacji w systemie eTravel. Od strony technicznej udostępniono najpopularniejszą obecnie architekturę Model-Widok-Kontroler (MVC), możliwości
pracy z różnymi bazami danych (w tym szerokie wparcie baz MongoDB),
prosty routing, system szablonów opracowanych pod widoki i wsparty Bootstrap oraz duże i elastyczne możliwości rozwoju aplikacji, tak aby dostosować
ją do własnych potrzeb. Phalcon zachowuje także kompatybilność względem
starszych wersji, posiada rozbudowaną dokumentację, zastosowanie gotowych
rozwiązań poparte przykładami, ciągle wsparcie i rozwój przez dużą społeczność.
Niestety na rynku nie ma rozwiązań idealnych. Wykorzystywany przez
nas system posiada także cechy negatywne. Możemy do nich zaliczyć wymaganie serwera, który jest w pełni modyfikowalny, a więc wybór hostingu
dla witryny ulega znacznemu zawężeniu. Jako, że jest to framework, rozwijając stronę musimy odwoływać się do stworzonego pierwotnie i narzuconego
nam wzorca oraz opierać na nim wszystkie działania rozwoju funkcjonalności
witryny. Do pełnego rozwiązania części problemów potrzebne jest poznanie
myśli technologicznej jaką posiadali i kierowali się twórcy Phalcon. [11]
Decydując się na gotowe rozwiązanie musimy być świadomi, że posiada
ono poza zaletami także wady. W naszym projekcie Phalcon, mimo swoich
wad, okazał się bardzo dobrym wyborem i pozwolił przyspieszyć prace nad
systemem eTravel.
48:4757669047
Rozdział 3
Projektowanie i implementacja
baz danych na przykładzie
MySQL
autor: Tomasz Przydróżny
49:8640757813
3.1 Relacyjna baza danych
50
3.1. Relacyjna baza danych
3.1.1. Wprowadzenie
Bazy danych przechowują informacje w ściśle określonych strukturach tak,
aby dostęp do nich był szybki i wygodny oraz by łatwo można było zarządzać
ogromnymi zasobami danych. Do obsługi bazy danych wykorzystywany jest
system zarządzania bazą danych, który zapewnia możliwość projektowania
nowych baz danych jak i komunikowania się z bazą danych w celu wyszukiwania informacji czy administrowania danymi i dostępem do nich. Przykładami
popularnych systemów zarządzania bazami danych są: Microsoft SQL Server,
MySQL, Oracle, PostgreSQL.
Definicja bazy danych: ”Zbiór danych zorganizowany zgodnie z pojęciową strukturą opisującą charakterystyki tych danych oraz związki między ich
elementami, stosowany w jednym lub wielu zastosowaniach.” [13]
Wyróżnić można wiele modeli baz danych sklasyfikowanych na podstawie
przyjętego w nich modelu reprezentacji danych. Oto kilka przykładów:
• hierarchiczny - wszystkie dane przechowywane są na zasadzie rekordów
nadrzędnych-podrzędnych i przypominają strukturę drzewa. Każdy rekord (oprócz głównego) jest związany z jednym rekordem nadrzędnym.
Budowanie bazy opartej na tym modelu odbywa się od ogółu do szczegółu w miarę jak zwiększa się poziom zagłębienia drzewa. Jedyną relacją jest jeden do wielu, więc w przypadku gdy jakiś obiekt ma wielu
”rodziców” musi zostać zduplikowany aby została zachowana struktura
drzewiasta.
• sieciowy - zmodyfikowany model hierarchiczny pozwalający na relacje
wiele do wielu bez konieczności duplikacji obiektów w strukturze drze-
50:7272165687
3.1 Relacyjna baza danych
51
Rysunek 3.1. Przykład drzewa danych w modelu hierarchicznym
wiastej. Korzysta on z rekordów i zbiorów: rekordy przechowują pola
zawierające dane, zbiory natomiast określają relację jeden do wielu między rekordami. Każdy rekord może być w wielu zbiorach, jak i posiadać
wiele zbiorów.
Rysunek 3.2. Przykład drzewa danych w modelu sieciowym
• relacyjny - dane są przechowywane w dwuwymiarowych tablicach (wiersze i kolumny) i obsługiwane są na podstawie matematycznej teorii
relacji. Nie istnieje relacja wiele do wielu, ale można zasymulować ją
dodając tabelę pośrednią pomiędzy dwie tabele w relacji jeden do wielu
51:2784138566
3.1 Relacyjna baza danych
52
i wiele do jednego. Obecnie najbardziej rozpowszechniony model stosowany w większości baz danych.
• obiektowy - dane przechowywane są w postaci obiektów, czyli struktur
nazywanych klasami, które wyświetlają zawarte w nich dane. Pola stanowią przykłady tych klas. Dzięki takiemu podejściu dane są w pełni
kompatybilne z danymi używanymi w programach napisanych w obiektowych językach programowania.
• relacyjno-obiektowy - stanowi kompromis między relacyjnymi, a obiektowymi bazami danych. Pozwala na operowanie na danych jak na obiektach, posiada jednak bazę relacyjną jako wewnętrzny mechanizm przechowywania danych. Systemy obiektowo-relacyjne są wyposażane w
wiele cech umożliwiających efektywną produkcję aplikacji. Wśród nich
można wymienić przystosowanie do multimediów, dane przestrzenne,
abstrakcyjne typy danych, metody definiowane przez użytkownika w
różnych językach, kolekcje, typy referencyjne, przeciążanie funkcji, późne wiązanie i inne. Systemy te zachowują wiele technologii, które sprawdziły się w systemach relacyjnych. Dodatkową zaletą jest uniknięcie
konwersji aktualnych baz danych do nowego, obiektowego.
Ze względu na fakt, iż w pracy omawiana jest baza danych na przykładzie
MySQL, który jest oparty na modelu relacyjnej bazy danych, w dalszej jej
części rozważania o bazie danych zostały zawężone do modelu relacyjnego.
3.1.2. Cechy
Przede wszystkim relacyjna struktura charakteryzuje się reprezentowaniem
związków między rekordami jedynie przez wartości danych w kolumnach,
pochodzących ze wspólnej dziedziny. Własnością podejścia relacyjnego jest
52:6443731827
3.1 Relacyjna baza danych
53
przedstawienie w sposób jednolity za pomocą tabel całej informacji, jaką jest
zbiór danych i relacji między nimi. Typ rekordu to nazwana struktura danych,
złożona ze zbioru nazwanych pól; każde pole służy do zapisu pojedynczego
atrybutu obiektu opisywanego przez rekord, i charakteryzuje się określonym
typem danych, np. liczba całkowita (integer), napis (char), data (date), itp.
Na ogół jedno z pól danego typu rekordu wyróżnia się jako klucz, tj. unikalny
identyfikator rekordu wśród rekordów danego typu (często wykorzystuje się
”naturalne klucze” jak np. nr albumu studenta lub nr PESEL w ewidencji
ludności) oraz zakłada się uporządkowanie rekordów wg. wartości jednego
z pól (zwykle klucza, choć niekoniecznie). Typy rekordów tworzą strukturę
drzewa, tj. każdy typ rekordu (z wyjątkiem najwyższego w hierarchii, tzw.
korzenia – root) związany jest z dokładnie jednym typem nadrzędnym. Zarazem każdy określony rekord typu podrzędnego jest związany z określonym
rekordem właściwego typu nadrzędnego.
3.1.3. Integralność danych
Model relacyjny zapewnia dodatkowe, specyficzne postaci reguł integralności.
Przede wszystkim zagwarantowany jest brak powtórzeń wierszy w tabelach
(unikalność) dzięki ustawieniu wartości klucza głównego (primary key) na
unikatowe. Dodatkowo relacyjna baza danych musi posiadać tzw. integralność referencyjną, czyli każda wartość klucza obcego (foreign key) musi być
równa wartości klucza głównego występującego w tabeli powiązanej (istnieje
możliwość nadania wartości NULL kluczowi obcemu). Pociąga to za sobą koniczność określenia zasad funkcji wykonywanych w przypadku zmiany, modyfikacji lub usuwania rekordów z tabel powiązanych. Brak wartości w kolumnie
tabeli łączącej wartości klucza obcego spowodował by jego unieważnienie, i
doprowadził do anomalii w bazie danych. Przykładem takiej anomalii może
53:7493386563
3.2 Etap projektowania
54
być usunięcie wiersza w tabeli nadrzędnej przez co klucz główny przestaje
istnieć, a wszystkie klucze obce z tabel podrzędnych wskazują aktualnie na
nieistniejący wiersz powodując przerwanie relacji między tabelami. Aby nie
dopuścić do takich sytuacji stosuje się trzy podejścia zachowania integralności danych:
• restricted - nie można usunąć wiersza dopóki istnieją jakiekolwiek klucze obce w innych tabelach odwołujące się do klucza głównego
• cascades - usunięcie wiersza powoduje usunięcie wierszy we wszystkich
tabelach zawierających klucze obce odnoszące się do klucza głównego
• nullifies - nieważne wartości kluczy obcych zostają zastąpione przez
wartość NULL.
3.2. Etap projektowania
3.2.1. Wprowadzenie
Projektowanie bazy danych jest kluczowym elementem powstawania dobrze
działającej i wydajnej bazy danych.
Model E-R (Entity-Relationship Model), autorstwa dr. Peter’a Chen’a,
jest początkiem etapu konceptualnego (abstrakcyjnego) każdego projektu relacyjnej bazy danych [14]. Opisuje dziedzinę przedmiotową za pomocą pojęć
takich jak encja, atrybut oraz związek. Jest on opisem bardzo teoretycznym,
wymagającym przełożenia na język praktyki. Jego zadaniem jest opisanie
fragmentu rzeczywistości za pomocą związków encji. W tym modelu używa się definicji, które mają swoje odzwierciedlenie na późniejszym etapie –
wdrożenia projektu w życie.
54:7763048563
3.2 Etap projektowania
55
3.2.2. Planowanie bazy spełniającej założenia projektu
Tworzenie funkcjonalnej bazy ma trzy etapy. Zaczyna się od ogólnego konceptu pozbawionego jakichkolwiek szczegółów implementacyjnych czy ograniczeń wynikających z relacyjności baz danych (dopuszczalne relacje typu
wiele do wielu). Jest to określenie podstawowych założeń, które mają być
spełnione w konkretnym projekcie (wymagania), oraz jakie ma dane przechowywać (np. informacje o użytkownikach lub produktach). czy też zdefiniowanie relacji między krotkami. Następnie tworzy się diagram relacji encji
(ERD), w którym to uwzględnia się podstawowe relacje między tabelami
wraz z krotnościami. Nadal nie ma tam informacji szczegółowych ani czysto
technicznych, lecz wyłania się ogólny zarys bazy w postaci tabel, kolumn
oraz opcjonalnych funkcji czy procedur. Bardzo ważne jest aby na tym etapie skupić się na ogólnej wizji całej bazy zamiast wdawać się w szczegóły
opisujące poszczególne pola w tabelach. Jeden błąd, przeoczenie czy niedopatrzenie może skutkować błędnie zaprojektowaną bazą, która nie spełnia
wszystkich założeń projektu, co często początkujący projektant dostrzega
dopiero na etapie implementacji lub (co gorsza) testowania. Późniejsze naprawianie błędu na tak wczesnym i kluczowym etapie staje się bardzo trudne,
czasochłonne a często wręcz niemożliwe. Następnym krokiem jest wkroczenie na wyższy stopień szczegółowości, czyli wybór kluczy głównych i obcych,
nadanie typów dla pól w tabelach oraz rozbicie relacji typu wiele do wielu na
jeden do wielu dodając tabele pośrednie. Na tym etapie należy już mieć na
uwadze względy wydajnościowe naszej bazy. Projektant musi być świadomy
ograniczeń tworzonej przez siebie bazy by być w stanie ocenić czy jest ona w
stanie sprostać wymogom projektu. Podstawowymi informacjami jakimi musi on dysponować są dane dotyczące przewidywanego obciążenia bazy, ilości i
częstotliwości zapytań, wielkości poszczególnych danych (pól) jak i ich ilości
55:3805552330
3.2 Etap projektowania
56
(krotek). Bez rozpatrzenia tych aspektów może się okazać, ze baza jest niewydajna co skutkować będzie bardzo długim dostępem do danych lub nawet
odmową dostępu ze względu na przeciążenie. Dlatego tak ważny jest ostatni
etap projektowania bazy danych, którym jest optymalizacja. W tym kroku
znajduje się wszystkie redundantne dane jakie jeszcze pozostały w schemacie
bazy i przebudowuje się ją pod kątem ich usunięcia. Nazywa się to normalizacją i ma trzy następujące po sobie etapy (postaci normalne). Baza danych
znajduje się w pierwszej postaci normalnej gdy wszystkie pola w tabelach
posiadają jedną, atomową wartość. Druga postacią normalną jest sytuacja,
w której wszystkie kolumny niebędące kluczami są zależne od całego klucza
podstawowego w danej tabeli. Przykładem nie spełniającym tej reguły jest
tabela z dwoma kluczami i kolumną zależną tylko od jednego klucza. Oznacza
to, że kolumna ta nie jest zależna od całego klucza tylko od jego części i należy ją przenieść do innej tabeli, bądź stworzyć dla niej nową tabelę. Trzecia
postać normalna wymaga dodatkowa, aby każda kolumna niebędąca kluczem
była zależna tylko i wyłącznie od klucza. Niedopuszczalnym jest zatem aby w
tej postaci zmiana wartości w jednej z kolumn (nie będących kluczem) miała
wpływ na wartość w innej kolumnie w tej tabeli. Te trzy etapy normalizacji
w zupełności wystarczą do skutecznego pozbycia się redundancji w bazie. Co
prawda istnieją jeszcze dwie zasady, ale ich w praktyce się nie stosuje, gdyż
wprowadzają zbyt dużą fragmentaryczność w bazie przez co staje się nieczytelna i trudna w administrowaniu (czasami spotyka się także odstępstwa od
trzeciej reguły jeśli projektant uzna, że sytuacja tego wymaga i będzie to
miało dobry wpływ na wygodę użytkowania bazy).
56:1145876988
3.2 Etap projektowania
57
3.2.3. Częste błędy w projektowaniu baz
Bardzo ważne w projektowaniu baz jest konkretne zdefiniowanie założeń projektu. Nawet najlepiej zaplanowany diagram bazy jest bezużyteczny jeśli nie
uwzględnia wszystkich niezbędnych funkcjonalności, jakie ma oferować finalny produkt. Przykładem błędnie zaprojektowanej bazy jest stworzenie tabel
”klasy” oraz ”profesorowie” w relacji jeden do wielu, gdzie założeniem projektu była możliwość przypisywania profesorowi wielu grup zajęciowych i na
odwrót. Kolejnym istotnym błędem jest rozrzutność przy dobieraniu typów
danych. Często są stosowane BIGINT’y w sytuacjach gdzie w zupełności wystarczą zwykłe INT’y, które zajmują 4 bajty zamiast 8 bajtów. Oszczędność
4 bajtów nie wydaje się istotna, lecz przemnożona przez kilka milionów rekordów w bazie danych oraz ilość atrybutów będących liczbami potrafi dokonać
istotnej różnicy. Jeśli dodatkowo taki atrybut zostanie indeksem problem
szybko się zwielokrotni. Ta sama zasada dotyczy się ciągów znaków, gdzie
zawsze warto (pomijając wartości hash’owane np. hasła użytkowników) zawężać maksymalną ilość znaków do rozsądnych wartości. Istotną kwestią jest
umiejętne korzystanie z indeksów służących do skracania czasu dostępu do
często wyszukiwanych danych w bazie. Ich zadanie zbliżone jest do zadania
kluczy głównych z tą różnicą, że nie służą do tworzenia relacji między tabelami. Można zatem za ich pomocą posortować rekordy w tabeli według
wartości konkretnej kolumny, co znacząco skróci czas realizacji zapytania do
bazy, gdyż nie trzeba już przeszukiwać tysięcy rekordów jeden po drugim.
Jest to wspaniałe narzędzie optymalizujące, ale nie jest lekarstwem na źle zaprojektowaną bazę. Często początkujący projektanci popadając w zachwyt
nad możliwościami indeksowania danych zapominają o wadach takiego rozwiązania. Należy pamiętać, że każda zaindeksowana kolumna w tabeli musi
być zapisana w pamięci oraz w trakcie każdej edycji danych również wszystkie
57:3714903649
3.2 Etap projektowania
58
indeksy odnoszące się do tych danych muszą zostać zaktualizowane. Generuje to dwa poważne ograniczenia: łatwo można przekroczyć dostępną pamięć
potrzebną do zapisu indeksów oraz edytowanie danych w bazie może wymagać zdecydowanie za dużo czasu ze względu na konieczność aktualizowania
indeksów. Przed stworzeniem indeksu należy zatem zastanowić się czy jest
on przydatny na tyle aby opłacało się go dodać. Oto kilka podstawowych
sytuacji przemawiających za tworzeniem indeksów:
• w klauzuli WHERE zapytania korzysta się często z danego pola lub
zestawu pól
• pola często wykorzystywane są do złączania tabel poprzez JOIN-y
• pola są często wykorzystywane do sortowania wyników tabeli
• pola są często wykorzystywane w funkcjach MIN() i MAX()
• rekordy w tabeli danego pola mają bardzo różne wartości – wyszukiwanie przy pomocy indeksu jest tym skuteczniejsze, im mniej rekordów
ma szukaną wartość
Natomiast w sytuacjach poniższych stosowanie indeksów jest niewskazane:
• dane w tabeli są częściej edytowane niż odczytywane
• pola zawierają dużo jednakowych wartości
• zapytania są mało selektywne
• pole w zapytaniach jest wykorzystywane poprzez funkcję np. WHERE
substr(name, 4, 1) = ‘r’ – silnik nie wykorzysta wtedy indeksu
58:5281208682
3.2 Etap projektowania
59
3.2.4. Projektowanie bazy dla projektu eTravel
W założeniach projektu eTravel był łatwy i szybki dostęp do dużej ilości
danych dotyczących przystanków oraz linii komunikacyjnych. Baza danych
miała także umożliwiać przechowywanie informacji o zarejestrowanych użytkownikach oraz dokonanych przez nich zakupów biletów, czy wyrażonych
opiniach na temat odbytej trasy. Po przeanalizowaniu wszystkich wymagań
stworzony został diagram ERD, w oparciu którego została póżniej stworzona
baza danych dla projektu. Powstało łącznie sześć tabel odpowiadających za
przechowywanie informacji dotyczących linii komunikacyjnych, ich przystanków zawierających dane geolokalizacyjne, użytkowników wraz z ich dokonanymi zakupami i wyrażonymi opiniami na temat konkretnych połączeń.
59:1831766490
3.3 Etap implementacji
3.3. Etap implementacji
3.3.1. Diagram ERD projektu eTravel
Rysunek 3.3. Diagram związków encji w bazie danych projektu eTravel
60:4056030155
60
3.3 Etap implementacji
3.3.2. MySQL w projekcie eTravel
1
CREATE TABLE
‘ lines ‘ (
2
‘ line_id ‘ int (11) NOT NULL AUTO_INCREMENT ,
3
‘ station_id ‘ int (11) NOT NULL ,
4
‘ number ‘ int (11) NOT NULL ,
5
PRIMARY KEY ( ‘ line_id ‘) ) ;
Kod źródłowy 3.1. tabela linie
1
CREATE TABLE ‘ orders ‘ (
2
‘ order_id ‘ int (11) NOT NULL AUTO_INCREMENT ,
3
‘ user_id ‘ int (11) NOT NULL ,
4
‘ cost ‘ float NOT NULL ,
5
‘ date ‘ date NOT NULL ,
6
PRIMARY KEY ( ‘ order_id ‘) ) ;
Kod źródłowy 3.2. tabela zamówienia
1
CREATE TABLE ‘ order_details ‘ (
2
‘ transaction_id ‘ int (11) NOT NULL AUTO_INCREMENT ,
3
‘ order_id ‘ int (11) NOT NULL ,
4
‘ product_id ‘ int (11) NOT NULL ,
5
‘ amount ‘ int (11) NOT NULL ,
6
PRIMARY KEY ( ‘ transaction_id ‘) ) ;
Kod źródłowy 3.3. tabela szczegóły zamówienia
61:5641978503
61
3.3 Etap implementacji
1
CREATE TABLE ‘ products ‘ (
2
‘ product_id ‘ int (11) NOT NULL AUTO_INCREMENT ,
3
‘ price ‘ float NOT NULL ,
4
‘ amount ‘ int (11) NOT NULL ,
5
‘ start_city ‘ varchar (50) NOT NULL ,
6
‘ end_city ‘ varchar (50) NOT NULL ,
7
PRIMARY KEY ( ‘ product_id ‘) ) ;
Kod źródłowy 3.4. tabela produkty
1
CREATE TABLE ‘ stations ‘ (
2
‘ station_id ‘ int (11) NOT NULL AUTO_INCREMENT ,
3
‘ geoX ‘ text NOT NULL ,
4
‘ geoY ‘ text NOT NULL ,
5
‘ name ‘ varchar (50) NOT NULL ,
6
‘ short_name ‘ varchar (20) NOT NULL ,
7
PRIMARY KEY ( ‘ station_id ‘) ) ;
Kod źródłowy 3.5. tabela stacje
62:1737685852
62
Podsumowanie
Niniejsza praca inżynierska pokazała w jaki sposób został osiągnięty cel, którym było stworzenie projektu aplikacji eTravel wspierającej planowanie podróży. Przedstawia ona zarówno podstawy teoretyczne związane z zagadnieniem systemów rozproszonych, tworzenia stron www oraz baz danych, a także
konkretną implementację rozwiązań. eTravel to aplikacja, która wykorzystuje zalety architektury rozproszonej z wykorzystaniem REST. W połączeniu
z dobrym zaprojektowaniem bazy danych oraz utrzymaniem odpowiednich
standardów przy budowie stron www, pozwoliło to na powstanie aplikacji
wydajnej i użytecznej. Podsumowując, udało się zbudować system wspomagania planowania podróży z użyciem komunikacji miejskiej miasta Poznań,
a także przewoźników międzymiastowych.
63:6078808500
Bibliografia
[1] Paweł Lula, Tadeusz Wilusz.
Architektury systemów rozproszonego przetwarzania danych.
http://yadda.icm.edu.pl/yadda/element/bwmeta1.element.ekonelement-000151173283
[2] Robert Wójcik.
Wymagania projektowe systemów rozproszonych.
http://staff.iiar.pwr.wroc.pl/robert.wojcik/dydaktyka/dzienne/rsbd/RB˙4.pdf
[3] Zofia Kruczkiewicz.
Rozproszone bazy danych.
http://zofia.kruczkiewicz.staff.iiar.pwr.wroc.pl/wyklady/intBD/wyklad6/intbd6.pdf
[4] C.J. Date.
An Introduction to Database Systems.
[5] Maciej Zakrzewicz.
Wprowadzenie do technologii WebServices.
http://www.cs.put.poznan.pl/mzakrzewicz/pubs/ploug06ws.pdf
[6] Mateusz Stępniak, Allegro.
Budowa poprawnego i intuicyjnego api REST.
64:5373232184
BIBLIOGRAFIA
65
http://www.slideshare.net/zenedith/budowa-apiresthateoasdevfest2013
[7] Ewa Korulska, Anna Stokowska.
Centrum Edukacji Obywatelskiej. Historia Internetu.
http://www.ceo.org.pl/sites/default/files/newsfiles/historia˙internetu˙2.pdf
[8] Radosław Kozłowski, Piotr Płyś, Allegro.
User Experience i budowanie użytecznych interfejsów.
https://drive.google.com/file/d/0Byz4Bk88kEb3Z3dVWWw2Mk5PSGs/view
[9] Google.
Any place, any time, any device - Building Websites for the Multi-Screen
Consumer.
http://www.google.com/think/multiscreen/whitepapermultiscreenconsumer.html
[10] Bootstrap.
Dokumentacja framework’a BootStrap.
http://getbootstrap.com
[11] Phalcon.
Dokumentacja framework’a Phalcon.
https://docs.phalconphp.com/en/latest/index.html
[12] Wizualizacja idei Responsive Web Design.
http://www.web.gov.pl/g2/big/2014˙12/ac45b44dbc4d941d305d27ad7336c10f.png
[13] Technika informatyczna - Terminologia - Terminy podstawowe PNISO/IEC 2382-1, Alfa-Wero, 1996.
65:3082660285
BIBLIOGRAFIA
66
[14] The Entity-Relationship Data Model: toward a unified view of data. P.P.
Chen, ACM Transactions on Database Systems, 1976
66:4469458600
Załączniki
• Dokumentacja techniczna projektu eTravel
67:5607218004

Podobne dokumenty