Ściągnij kod
Indeks jest specjalną strukturą danych wprowadzoną w celu zwiększenia prędkości wykonywania operacji na tabeli. Indeks w bazie danych jest odpowiednikiem spisu treści w książce.
Indeksy tworzymy poprze komendę CREATE
CREATE INDEX nazwaON Tabela (kolumny)
Podczas realizowania zapytania optymalizator (SQL Server) najpierw przeszukuje indeks, który jest uporządkowany, a następnie na podstawie indeksu odczytuje odpowiednie rekordy.
Indeksy dzielimy na główne (dla kluczy głównych), zgrupowane (dla nieunikalnych wartości grupujące te same wartości), niezgrupowany (podobnie jak zgrupowany tylko pamięta wszystkich pozycji elementów, jest gęstszy). Niezależnie od tego, czy indeksy są zgrupowane, czy niezgrupowane, najczęściej tworzone są w formie drzew zbalansowanych. Gwarantuje to logarytmiczny (względem rozmiaru) czas wykonywania podstawowych operacji takich jak wstawianie, wyszukiwanie czy usuwanie elementów.
W praktyce indeksy tworzymy dla:
Kolumn z ograniczeniem PRIMARY KEY.Kolumn z ograniczeniem FOREIGN KEY oraz kolumn wykorzystywanych przy łączeniu tabel.Kolumn przechowujących dane wykorzystywane jako argument wyszukiwania.Kolumn przechowujących często sortowane dane.
Java DataBase Connectivity - łącze do baz danych w języku Java. Aby móc posługiwać się bazą SQLite w Javie potrzebujesz tak naprawdę tylko jednej rzeczy - biblioteki ze sterownikiem konkretnej bazy danych. Dla MSSQL jest to JTDC lub Microsoft JDBC.
JTDS korzysta z autoryzacji serwera SQL server przez credentials konta windows.
Aby połączyć się z bazą danych inicjalizujemy sterownik "net.sourceforge.jtds.jdbc.Driver" oraz ustanawiamy połączenie z bazą danych za pomocą klasy DriverManager podając parametry. Następnie inicjalizujemy obiekt "statement" wykonujący wyrażenia sql za pomocą metody executeStatement(query) lub executeQuery(query) (w zależności od wykonywanego zapytania). Na końcu musimy pamiętać o zamknięciu elementów połączenia z bazą.
Object-Relational Mapping ORM – sposób odwzorowania obiektowej architektury systemu informatycznego na bazę danych (lub inny element systemu) o relacyjnym charakterze. Implementacja takiego odwzorowania stosowana jest m.in. w przypadku, gdy tworzony system oparty jest na podejściu obiektowym, a system bazy danych operuje na relacjach. Ułatwia to programistom pracę z bazą danych, często odbywa się to jednak kosztem wydajności zapytań do bazy danych. Największą zaletą ORM jest prostota użytkowania.
Przykładowo, aby zmienić hasło użytkownika w bazie danych użytkowników musimy wykonać poniższą operację:
public void changePassword(User u, String newPassword) {
con.prepareStatement(„UPDATE tab_users SET password = ? WHERE login = ?”).
setString(1, u.getPassword()).
setString(2, u.getLogin()).execute();
}
Chcielibyśmy, aby taka operacja wyglądała następująco:
public void changePassword(User u, String newPassword) {
u.setPassword(newPassword);
}
a więc bez konieczności „grzebania” w relacyjnej bazie danych.
Najbardziej popularną implementacją idei ORM dla javy jest Hibernate.
Praca z ORM:
Tworzymy model danych w obiektowym języku programowania.Tworzymy schemat bazy danych odpowiadający temu modelowi (może się oczywiście okazać, że już mamy jakąś bazę danych, z którą musimy współpracować).Definiujemy odwzorowanie bazy danych na model relacyjny. Tworzymy aplikację obiektową operującą na modelu obiektowym (tworząc kod aplikacji w zasadzie nie musimy się zastanawiać jak nasze obiekty zostaną zapisane).W razie konieczności pobrania obiektów z bazy danych, bądź utrwalenia jakiegoś nowo utworzonego obiektu, czy też usunięcia utrwalonego obiektu posługujemy się odpowiednim API danego narzędzia ORM.
W bazie DBADLI0_1CD na serwerze mssql.wmi.amu.edu.pl mamy poniższy schemat bazy danych:
Ściągnij i wypakuj kod
Wejdź do środowiska programistycznego np IntelliJ i wczytaj ściągnięty kod
File -> New -> Project From Existing Source
Znajdź wypakowany katalog, wybierz
Create Project from existing source -> Next do koñca. Na koniec wybierz w wyskakującym oknie Open in this Window.
W katalogu src znajduje się kod aplikacji.
Otwórz Pakiet Basic Example -> SqlConnectionWejdź w Run -> Run... -> Edit Configurations i dodaj w parametrach VM linijkę -Djava.library.path = scieżka_do_katalogu_projektu/Biblio
Musisz to zrobić gdyż program musi wczytać bibliotekę nylmauth.dll by móc korzystać z tzw. Windows Authentication, na wydziałowym serwerze mssql.wmi.amu.edu.pl.
Uruchom plik SqlConnection, spójrz jak wygląda kod aplikacji.Przejdź do PrepareStatementUruchom klasę Window
Wykonaj zapytania z pliku Zapytania.txt w wersji statement i prepareStatement.
Przejdź do pakietu Indeks
Wykonaj zapytania z pliku Zapytania.txt i sprawdź czasy wykonywania tych zapytań. Zaproponuj indeks bazy danych, który poprawi wyszukiwanie.
Przejdź do pakietu ORM
Zobacz jak wygląda kod w przypadku stosowania ORM-a. Dla chętnych wykonaj zadanie z pliku Zadanie.txt.
JSON (JavaScript Object Notation) jest prostym formatem wymiany danych.
Zapis i odczyt danych w tym formacie jest łatwy do opanowania przez ludzi gdyż JSON jest formatem tekstowym. W przypadku formatu JSON dane przybierają następujące formy:
Obiekt jest nieuporządkowanym zbiorem par nazwa/wartość. Opis obiektu rozpoczyna { (lewa klamra) a kończy } (prawa klamra). Po każdej nazwie następuje : (dwukropek) oraz pary nazwa/wartość, oddzielone , (przecinkiem).Tabela jest uporządkowanym zbiorem wartości. Opis tabeli rozpoczyna znak [ (lewy nawias kwadratowy) a kończy znak ] (prawy nawias kwadratowy). Poszczegóne wartości rozdialane są znakiem , (przecinek).Wartość to łańcuch znakowy, którego początek i koniec oznacza podwójny cudzysłów, lub liczba, lub wartość true (prawda) lub false (fałsz) lub null, lub obiekt lub tabela. Struktury te można zagnieżdżać.
Przykład:
{
"dane": {
"user": [ {
"imie":"Jan",
"nazwisko":"Kowalski"
},
{
"imie":"Piotr",
"nazwisko":"Nowak"
}
]}
}
Ten sam zestaw danych w postaci XML wygląda następująco:
<dane>
<user>
<imie>jan</imie>
<nazwisko>Kowalski</nazwisko>
</user>
<user>
<imie>Piotr</imie>
<nazwisko>Nowak</nazwisko>
</user>
</dane>
Pod pojęciem bazy nierelacyjnej (NoSQL database) najczęściej rozumie się przechowywanie danych w formie listy par obiektów klucz-wartość, w których nie występują powiązania relacyjne między przechowywanymi obiektami.
W bazie NoSQL najczęściej nie ma wymagania aby obiekty były jednorodne pod względem struktury. Niekiedy pojecie to używane jest szerzej, do określenia wszelkich struktur danych (niekoniecznie o postaci klucz-wartość) w których nie występują tabele i relacje.
NoSQL to system baz danych nie posiadający relacji oraz zwykle nie mający zdefiniowanego języka zapytań SQL. Dane zawarte w NoSQL nie mają z góry określonej postaci (schema), jak to ma miejsce np. w bazach relacyjnych typu SQL.
Przykładem bazy NoSQL jest MongoDB.
MongoDB zapisuje dane w oparciu o kolekcje (collections), w których umieszczane są dokumenty w formacie przypominającym JSON (BSON).
MongoDB najlepiej nadaje się do pewnych zadań takich jak:
Źródło danych dla serwisu internetowego: dużych plików multimedialnych.Potrzebujących wydajnego keszowania danych.Przechowywanie dużych ilość mało wartościowych danych.Wymagających wysokiej skalowalności.
Ściągnij, wypakuj i wczytaj kod
Zadanie:
Zapoznaj się z działaniem bazy danych Mongo z przykładów dodawania elementów do bazy na 4 sposoby w pliku MongoInsert.java i wyszukiwania elementów w pliku MongoQuery.java.
(MongoInsert) Dodaj do kolekcji "people" swoje dane (wg schematu):
{
"_id": "nr_indeksu",
"name": "Twoje imie i nazwisko",
"address": {
"street": "adres",
"city": "wydziału",
"state": "wlkp",
"zip": "kod_wydzialu"
}
}
W razie problemów spójrz na przykład w MongoUpdate.java.
(MongoUpdate) MongoUpdate nadpisuje dane w bazie danych, co zrobić żeby w podanym przykładzie zmieniał tylko wartości adresu, a nie zmieniał całego elementu (dokumentu) na nowy?
(MongoSafeImage) GridFS pozwala na zapisywanie dużych plików w MongoDB. Pliki są łączone w tzw. chunks i zapisywane w bazie, dostęp do nich następuje przez metadane.
Zmień kod tak, by dodawał trzy różne obrazki o takiej same nazwie i pobierz za pomocą nazwy jeden z nich. Odpowiedz, który został pobrany i dlaczego? Jaki kod pozwoli nam pobrać trzeci obrazek o danej nazwie?
Wykorzystano materiały z
https://blog.exaco.pl/indeksy-mssql-server/
http://www.sqlinsider.pl/2008/09/optymalizacja-cz1-indeksy.html
http://math.uni.lodz.pl/~kowalcr/Bazy/Temat8.pdf
https://www.javacodegeeks.com/2015/09/mongodb-mapreduce-tutorial.html
https://www.mkyong.com/mongodb/java-mongodb-save-image-example/
http://www.json.org/json-pl.html
http://webmade.org/porady/json-js.php
http://www.mkyong.com/mongodb/java-mongodb-hello-world-example/
https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-i
http://www.mkyong.com/mongodb/java-mongodb-update-document/