BAZY DANYCH NIERELACYJNE BAZY DANYCH NoSQL I ASOCJACYJNE STRUKTURY DANYCH Adrian Horzyk Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i Inżynierii Biomedycznej Laboratorium Biocybernetyki 0-059 Kraków, al. Mickiewicza 0, paw. C/205 horzyk@agh.edu.pl, Google: Adrian Horzyk
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,, 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., ), 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 i 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 TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( A ) ASSORT A1 A2 AANG SENSIN : A1 SENSIN : A2
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( B ) ASSORT R1 2 AANG N1 2 SENSIN : A1 SENSIN : A2
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( C ) ASSORT R2 8 1 AANG N1 N2 2 SENSIN : A1 SENSIN : A2 8
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( D ) ASSORT R 9 AANG N1 N2 1 2 N SENSIN : A1 SENSIN : A2 8 9
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( E ) ASSORT R4 AANG 1 N1 N2 N N4 1 2 SENSIN : A1 SENSIN : A2 8 9
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( F ) ASSORT R5 4 8 AANG 1 N1 N2 N N4 1 2 SENSIN : A1 4 N5 SENSIN : A2 8 8 9
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( G ) ASSORT R6 4 5 AANG 1 N1 N2 N N4 1 2 SENSIN : A1 4 5 8 SENSIN : A2 N5 N6 8 9
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( H ) ASSORT R7 AANG 1 N1 N2 N N4 1 2 SENSIN : A1 4 5 8 SENSIN : A2 N5 N6 8 9
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( I ) ASSORT R8 9 1 AANG 1 N1 N2 N N4 1 2 SENSIN : A1 4 5 8 SENSIN : A2 N5 N6 8 9 ACON 9 N8
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R7 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ( J ) ASSORT R9 6 8 AANG 1 N1 N2 N N4 1 2 SENSIN : A1 4 6 5 8 SENSIN : A2 8 9 9 N5 N6 N8 N9 ACON
Sortowanie względem wszystkich atrybutów TABELA R1 R2 R R4 R5 R6 R8 R9 A1 A2 2 8 1 9 4 8 4 5 9 1 6 8 ASSORT R1 R7... R9 ( K ) 2 6 8 AANG 1 N1 N2 N N4 1 2 ACON SENSIN : A1 4 6 5 8 SENSIN : A2 8 9 9 N5 N6 N8 N9 ACON
Przykład wnioskowania 1 2 SENSIN : A1 4 6 8 9 ZEWNĘTRZNE POBUDZANIE WEJŚĆ SENSORYCZNYCH 4 AANG N1 N2 N N4 1 ACON 5 8 SENSIN : A2 N5 N6 N8 N9 ACON 9
Przykład wnioskowania 1 2 SENSIN : A1 4 6 8 9 ZEWNĘTRZNE POBUDZANIE NEURONU AANG N1 N2 N N4 1 ACON 5 8 SENSIN : A2 N5 N6 N8 N9 ACON 9
ZAAWANSOWANE BAZY I STRUKTURY DANYCH