BAZY DANYCH
Akademia Górniczo-Hutnicza
Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej
Katedra Automatyki i Inżynierii Biomedycznej Laboratorium Biocybernetyki
30-059 Kraków, al. Mickiewicza 30, paw. C3/205 horzyk@agh.edu.pl, Google: Adrian Horzyk
Adrian Horzyk
NIERELACYJNE BAZY DANYCH – NoSQL
I ASOCJACYJNE
STRUKTURY DANYCH
NIERELACYJNE BAZ DANYCH (NoSQL)
Mimo powszechności relacyjnych baz danych opartych na języku zapytań SQL, tabelach, relacjach i kluczach nie są jedynym ani najefektywniejszych schematem służącym do przechowywania i przetwarzania danych.
Przez nierelacyjne bazy danych rozumie się wszystkie inne
rodzaje baz danych, które nie są oparte na tabelach rekordów powiązanych kluczami.
Nierelacyjne bazy danych pełnią szczególną rolę w systemach rozproszonych oraz w systemach przetwarzających BigData.
Często łączone są bazy SQL z NoSQL
PORÓWNANIE BAZ DANYCH SQL z NoSQL
Bazy SQL wymuszają tworzenie relacji, atomowość i normalizację…
Bazy NoSQL mogą być skalowane również horyzontalnie i nie wymagają
tworzenia złączeń pomiędzy danymi rozrzuconymi po tabelach, aczkolwiek są zwykle trudniejsze w utrzymaniu, gdyż mogą zawierać duplikaty danych.
PORÓWNANIE BAZ DANYCH SQL z NoSQL
Każdy wiersz bazy NoSQL może zawierać różne kolumny (atrybuty opisujące dany obiekt).
Silniki baz NoSQL nie wymuszają relacji pomiędzy obiektami.
Jeśli obiekty są opisane różnymi atrybutami, może być łatwiejsze wykorzystanie baz nierelacyjnych.
W bazach NoSQL nie ma w zasadzie kolumn, lecz tylko listy atrybutów opisujących obiekty, które oczywiście mogą posiadać unikalnie
reprezentujące je klucze pośród obiektów tego samego rodzaju.
W bazach SQL nie dopuszcza się sytuacji, gdy każdy obiekt (np. krzesło, szafa czy samochód) opisane są różnymi atrybutami, a w praktyce tak zwykle
czynimy, gdyż część obiektów z danej klasy może mieć cechy szczególne, które w zupełności nie występują u innych obiektów z tej klasy.
TEORIA CAP
Według teorii CAP (Consistency - spójność, Availability - dostępność, Partition Tolerance – niewrażliwość na podział pomiędzy węzłami) systemy bazodanowe mogą spełniać tylko dwa z tych warunków:
CP – Consistency & Partition Tolerance
AP – Availability & Partition Tolerance
CA – Consistency & Availability
Consistency spójność
Availability dostępność
Partition Tolerance
TEORIA CAP – Consistency - SPÓJNOŚĆ
Consistency – spójność – oznacza, iż wszystkie węzły bazy danych będą miały takie same wartości, tzn. wszyscy użytkownicy rozproszonego systemu
bazodanowego otrzymają takie same dane niezależnie od tego, z którego węzła systemu bazodanowego korzystają.
Oznacza to konieczność replikacji w pozostałych węzłach systemu
modyfikacji dokonanych w jednym z węzłów systemu bazodanowego.
Consistency spójność
Availability dostępność
Partition Tolerance
TEORIA CAP – Availability - DOSTĘPNOŚĆ
Availability – dostępność – oznacza, iż operacje odczytu i zapisu będą zawsze możliwe, nawet gdy istnieje przerwa w komunikacji pomiędzy węzłami
systemu bazodanowego.
Oznacza to konieczność zrezygnowania ze spójności (consistency) [systemy AP], gdyż w tym przypadku nie ma możliwości bieżącego zsynchronizowania danych w sytuacji zapisu bądź z dostępności (availability) [systemy CP], co oznacza konieczność wyłączenia całego klastra w przypadku przerwy w połączeniu. Systemy CA są zwykle oparte na jednym węźle.
Consistency spójność
Availability dostępność
Partition Tolerance
Systemy NoSQL i spójność danych
W systemach NoSQL powszechnie poświęcana jest spójność (consistency) w celu zagwarantowania wysokiej dostępności danych i szybkości działania systemu bazodanowego.
Takie podejście nie może być zastosowane np. do kont bankowych czy stanów magazynowych, gdzie dane muszą być obowiązkowo
synchronizowane i spójne, gdyż w odwrotnym przypadku można byłoby zrobić np. kilka przelewów z tych samych pieniędzy czy zamówić towar, którego już nie ma na magazynie!
W wielu systemach rozproszonych jednak utrzymanie takiej spójności danych nie jest potrzebne.
Zapytania w systemach NoSQL
Bazy NoSQL nie mają sformalizowanych ani ustalonych zasad ani języka zapytań, więc sposób zapytań jest określany w zależności od
przechowywanych danych i optymalizowany pod ich kątem.
Odpowiedzialność za poprawność działania baz NoSQL spoczywa na programiście.
Dla przyspieszenia działania można tworzyć indeksy tylko dla kluczy
głównych opisujących poszczególne wiersze a nie dla dowolnych kolumn jak ma to miejsce w przypadku relacyjnych baz danych.
Bazy NoSQL nie spełniają również standardu ACID (atomicity, consistency, isolation and durability).
Trudniej jest również zadbać o transakcyjność operacji.
Zastosowania baz NoSQL
Bazy NoSQL stosuje się w przypadku konieczności skalowania
horyzontalnego, czyli gdy dany obiekt często zmienia atrybuty lub znacznie się różnią dla poszczególnych obiektów.
Bazy SQL są znacząco lepsze jeśli skalowalność zachodzi głównie wertykalnie, a horyzontalnie atrybuty są stabilne i jasno określone.
W przypadku prostych encji, czyli obiektów opisanych niewielką lecz zmienną ilością różnych atrybutów, skorzystanie z baz NoSQL może być korzystne, zaś w przypadku wielu skomplikowanych encji lepsze będzie zastosowanie baz SQL dla uniknięcia bałaganu lub błędów, dzięki mechanizmom wymuszania i kontroli relacji.
W grach on-line, które przetwarzają wiele żądań na sekundę, bazy NoSQL mogą też być dobrym podejściem, gdyż wysoka wydajność i maksymalna przepustowość mogą być ważniejsze niż spójność.
Podział baz NoSQL
Bazy NoSQL dzielimy na cztery podstawowe typy:
Bazy oparte na kluczach i wartościach (Key-Values Stores)opierają się na kolekcji
słowników, składających się z encji, w których z kluczem powiązane są wartości różnych atrybutów dla różnych encji. Stosowane są w nich funkcje haszujące w celu przyspieszenia odczytu, więc stosujemy je głównie tam, gdzie dane często się odczytuje.
[Windows Azure Table Storage, Riak, Redis, Amazon SimpleDB, Berkley DB 12c, Dynomite]
Bazy kolumnowe (Column Stores) są swoistą inwersją dla zapisu wierszowego, tzn. dane z tej samej kolumny zapisywane są obok siebie,
co może oznaczać szybszy dostęp do danych w kolumnie, gdyż przeszukiwane są kolejne komórki w pamięci RAM, np. w przypadku funkcji agregujących, czyli MIN, MAX, AVR, SUM, COUNT. Stosuje się wyłącznie do małych baz przechowywanych w całości w pamięci RAM.
[Apache Cassandra]
Bazy dokumentowe (Document Stores) stosowane do przechowywania dokumentów zawierających wiele różnych atrybutów (np. rozmiar czcionki, formatowanie, załączniki różnych typów) oraz możliwość zagnieżdżania jednych dokumentów w innych
[MongoDB, CouchDB, RavenDB]
Bazy grafowe (Graph Stores) oparte są na grafach i o algorytmy grafowe, w których każdy obiekt może być opisany węzłem w grafie, a relacje pomiędzy nimi krawędziami. Łatwo więc znaleźć np. najkrótszą ścieżkę w grafie pomiędzy obiektami.
[Neo4J, Titan, Sparksee, Giraph, InfoGrid] Korzystają z nich np. Facebook i LinkedIn
Grafowe asocjacyjne bazy danych
Grafowe asocjacyjne bazy danych są rodzajem grafowych baz implementujących relacje pomiędzy danymi w postaci asocjacji.
Asocjacje (powiązania pomiędzy danymi) mogą być dodatkowo ważone, definiując istotność takiej relacji (związku).
Asocjacje reprezentują relacje, które są bogatsze niż w przypadku klasycznych baz relacyjnych.
Obiekty reprezentowane przez węzły mogą charakteryzować się dowolnym stopniem złożoności i zagnieżdżenia oraz być zdefiniowane przy pomocy dowolnej ilości innych węzłów.
Dane poszczególnych atrybutów są ze sobą powiązane i względem siebie uporządkowane,
jeśli tylko można zdefiniować porządek dla tego atrybutu.
Nie wymagają indeksacji ani haszowania, gdyż wszystkie dane są w naturalny sposób posortowane względem wszystkich atrybutów równocześnie.
Dane reprezentujące wartości jednego atrybutu nie są duplikowane, lecz agregowane, co stanowi o dużej potencjalnej oszczędności w przechowywaniu danych w takiej postaci, szczególnie jeśli wartości danych często się powtarzają.
Agregacja danych oraz powiązania pomiędzy nimi zapewniają bardzo szybki (w czasie stałym) dostęp do wszystkich powiązanych bezpośrednio lub pośrednio danych.
Uzyskuje się również błyskawiczny dostęp do niektórych wartości funkcji agregujących (tj. MIN, MAX), jak również bardzo szybko można wyznaczać podobieństwa i różnice pomiędzy obiektami.
W działaniu są więc dużo efektywniejsze niż relacyjne bazy danych, lecz niestety ze względu na ograniczenia sprzętowe mogą być stosowane tylko do danych, które mieszą się w pamięci RAM komputera. Największą skuteczność osiąga się w przypadku zastosowania równoległości.
[AGDS – Associative Graph Data Structure]
Przykład grafowych asocjacyjnych baz danych
Dane z tabel z relacyjnych baz danych można przekształcić na postać asocjacyjnych grafów AGDS.
Przykład grafowych asocjacyjnych baz danych
Dane z tabel z relacyjnych baz danych można przekształcić na postać asocjacyjnych grafów AGDS.
Przykład grafowych asocjacyjnych baz danych
Dane z tabel z relacyjnych baz danych można przekształcić na postać asocjacyjnych grafów AGDS.
Przykład grafowych asocjacyjnych baz danych
Wykrywanie duplikatów, podobieństw oraz MIN i MAX jest prymitywnie łatwe i szybkie.
Przykład grafowych asocjacyjnych baz danych
Dochodzi do agregacji wartości i usunięcia wszystkich duplikatów danych!
Przykład grafowych asocjacyjnych baz danych
Wykrywanie zależności i korelacji pomiędzy danymi można przeprowadzić błyskawicznie!
Przykład grafowych asocjacyjnych baz danych
Wykrywanie podobieństw i różnic jest również proste i szybkie!
Przykład grafowych asocjacyjnych baz danych
Z łatwością można je wykorzystać do grupowania (klasteryzacji) oraz klasyfikacji!
Przykład grafowych asocjacyjnych baz danych
Z łatwością można je wykorzystać do grupowania (klasteryzacji) oraz klasyfikacji!
Przykład grafowych asocjacyjnych baz danych
Łatwe do wykorzystania do dyskryminacji, klasyfikacji, grupowania (klasteryzacji) i analizy danych!
Grafowe asocjacyjne bazy danych w mózgu
Grafowe asocjacyjne struktury danych są fundamentem działania ludzkiego mózgu, gdzie neurony aktywnie reprezentują różne obiekty o dowolnej złożoności oraz umożliwiają automatyczne przypominanie skojarzonych wcześniej informacji dzięki połączeniom między nimi.
Analiza grafowej asocjacyjnej bazy danych
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
MIN MAX
MIN MAX
SENSIN : A2 SENSIN : A1
AANG
A2 A1
( A )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
2
3 N1
ADEF
ADEF
ADEF
MIN
ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
AANG
2 3 R1
( B )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
2
1 3
N2 N1
ADEF
ASIM ASEQ
ADEF
ADEF
ADEF
ADEF
MIN
ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
ASIM
8
AANG
8 1 R2
( C )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
2
1
3
3 N2
N1 N3
ADEF ASIM
ASIM
ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF
MIN
ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
ASIM
8
ASIM
9
AANG
3 9 R3
( D )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
ASIM
8
ASIM
9
AANG
1 3 R4
( E )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
4
ASIMASIM
8
ASIM
8
ASIM
9
ASEQ
N5
ADEF
ADEF
AANG
4 8 R5
( F )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
4
ASIMASIM
8
5
ASIM8
ASIM ASIM
9
N6 N5
ASEQASEQ ADEF
ADEF ADEF
AANG
ADEF4 5 R6
( G )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
4
ASIMASIM
8
5
ASIM8
ASIM ASIM
9
N6 N5
ASEQASEQ ASEQ
ADEF
ADEF ADEF
AANG
ADEF1 3 R7
( H )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
4
ASIMASIM
8
ASIM9
5
ASIM8
ASIM ASIM
9
N6
N5
ASEQN8
ASEQ
ASEQ ASEQ
ADEF
ADEF ADEF
ADEF
ADEF
ADEF
ACON
AANG
9 1 R8
( I )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3 R7
AANG
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
4
ASIM6
ASIM ASIM
8
ASIM9
5
ASIM8
ASIM ASIM
9
N6
N5
ASEQN8 N9
ASEQ
ASEQ
ASEQ ASEQ
ADEF
ADEF ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ACON
6 8 R9
( J )
Sortowanie względem wszystkich atrybutów
A2 8 1 A1
2 3 3 9 1 3 R2
R1 R3
R4 ASSORT
TABELA
4 5 4 8
9 1 6 8 R6
R5
R8 R9
1 3
R7 ...
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
AANG
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
4
ASIM6
ASIM ASIM
8
ASIM9
5
ASIM8
ASIM ASIM
9
N6
N5
ASEQN8 N9
ASEQ
ASEQ
ASEQ ASEQ
ACON
ACON
ADEF
ADEF ADEF
ADEF
ADEF
ADEF
ADEF ADEF
2 3 R1
6 8 R9
( K )
Przykład wnioskowania
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
AANG
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
4
ASIM6
ASIM ASIM
8
ASIM9
5
ASIM8
ASIM ASIM
9
N6
N5
ASEQN8 N9
ASEQ
ASEQ
ASEQ ASEQ
ACON
ACON
ADEF
ADEF ADEF
ADEF
ADEF
ADEF
ADEF ADEF
4 3 ZEWNĘTRZNE
POBUDZANIE
WEJŚĆ
SENSORYCZNYCH
Przykład wnioskowania
2
1
3
3 1
N2
N1 N3 N4
ADEF ASIM
ASIM
ASEQ ASEQ ASEQ
ADEF
ADEF
ADEF
ADEF
ADEF
ADEF ADEF
ADEF
AANG
MIN
ASIM ADEFMAX
MIN
ADEF ADEFMAX
SENSIN : A2 SENSIN : A1
4
ASIM6
ASIM ASIM
8
ASIM9
5
ASIM8
ASIM ASIM
9
N6
N5
ASEQN8 N9
ASEQ
ASEQ
ASEQ ASEQ
ACON
ACON
ADEF
ADEF ADEF
ADEF
ADEF
ADEF
ADEF ADEF