NoSQL: Riak. dr inż. Sebastian Ernst Katedra Informatyki Stosowanej

Podobne dokumenty
NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki

(Apache) CouchDB. Krzysztof Kulewski 2008

NoSQL & relax with CouchDB

Hbase, Hive i BigSQL

MongoDB. wprowadzenie. dr inż. Paweł Boiński, Politechnika Poznańska

Bazy danych NoSQL. wprowadzenie. Szymon Francuzik Poznań,

Technologie Informacyjne

Bazy danych NoSQL. Szymon Francuzik Poznań,

Wprowadzenie do NoSql. Maksymilian Wiesiołek

Przetwarzanie danych z wykorzystaniem technologii NoSQL na przykładzie serwisu Serp24

Big Data i 5V Nowe wyzwania w świecie danych Krzysztof Goczyła

CouchDB. Michał Nowikowski

Oracle11g: Wprowadzenie do SQL

Indeksowanie w bazach danych

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

Szkolenie wycofane z oferty. Apache Cassandra - modelowanie, wydajność, analiza danych

BAZY DANYCH. NIERELACYJNE BAZY DANYCH NoSQL I ASOCJACYJNE STRUKTURY DANYCH. Adrian Horzyk. Akademia Górniczo-Hutnicza

Seeon Enterprise Search Engine. Rozwiązanie obsługiwane przez eo Networks S.A.

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

na podstawie bazy Oracle NoSQL

Wst p Model Danych Saklowalno± + replikacja Spójno± Ograniczenia. Cassandra. Paweª Róg. Pozna«, maj 2011

Hurtownie danych wykład 5

*Grafomania z. Neo4j. Praktyczne wprowadzenie do grafowej bazy danych.

Autor: Joanna Karwowska

Nierelacyjne bazy danych

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

Wykład 03 JavaScript. Michał Drabik

Podstawy technologii WWW

Wprowadzenie do baz danych

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Porównanie systemów zarządzania relacyjnymi bazami danych

PHP: bloki kodu, tablice, obiekty i formularze

WPROWADZENIE DO BAZ DANYCH

XML w bazie danych IBM DB2

Język SQL, zajęcia nr 1

Administracja bazami danych

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Bazy danych 12. Bazy NoSQL. P. F. Góra

Bazy danych. Dr inż. Paweł Kasprowski

Jarosław Kuchta Projektowanie Aplikacji Internetowych. Projektowanie warstwy danych

Post-relacyjne bazy danych

Bazy danych 6. Klucze obce. P. F. Góra

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

Wykład 4. SQL praca z tabelami 1

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Krzysztof Kadowski. PL-E3579, PL-EA0312,

BAZY DANYCH MAKRA I PRZYCISKI. Microsoft Access. Adrian Horzyk. Akademia Górniczo-Hutnicza

Projektowanie warstwy danych

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 6.0

ZAŁĄCZNIK NR 5 - GRUPA PRODUKTÓW 5: OPROGRAMOWANIE BAZODANOWE

Organizacyjnie. Prowadzący: dr Mariusz Rafało (hasło: BIG)

OPIS PRZEDMIOTU ZAMÓWIENIA

Splunk w akcji. Radosław Żak-Brodalko Solutions Architect Linux Polska Sp. z o.o.

DDM funkcjonalność

010 NOSQL. Prof. dr hab. Marek Wisła

Dr Michał Tanaś(

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Bazy Danych. C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000

Full Text Search. Study Group Tomasz Libera

Model relacyjny. Wykład II

Zasady Nazewnictwa. Dokumentów XML Strona 1 z 9

Struktura drzewa w MySQL. Michał Tyszczenko

Wykład 8. SQL praca z tabelami 5

Projektowanie rozwiązań Big Data z wykorzystaniem Apache Hadoop & Family

Przykładowy dokument XML

Programowanie w Ruby

Projekt bazy uniwersalnego dashboarda. Stanisław Klekot, nr indeksu

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Bazy danych - wykład wstępny

XML i nowoczesne technologie zarządzania treścią 2007/08

Bazy danych Wykład zerowy. P. F. Góra

Projekt: MS i CISCO dla Śląska

Data Mining Wykład 9. Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster. Plan wykładu. Sformułowanie problemu

Wprowadzenie do baz NoSQL

AUREA BPM Oracle. TECNA Sp. z o.o. Strona 1 z 7

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Bazy danych 9. SQL Klucze obce Transakcje

Technologie baz danych

Tabela wewnętrzna - definicja

Projektowanie struktury danych

METODY INŻYNIERII WIEDZY ASOCJACYJNA REPREZENTACJA POWIĄZANYCH TABEL I WNIOSKOWANIE IGOR CZAJKOWSKI

Bazy danych 11. Systemy rozproszone, twierdzenie CAP i bazy NoSQL. P. F. Góra

Przypisywanie bibliotek w architekturze SAS

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Budowa odpornych na awarie systemów w oparciu o Consul a

Oracle PL/SQL. Paweł Rajba.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

BAZY DANYCH. Dr hab. Sławomir Zadrożny, prof. PR

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Materiały do laboratorium MS ACCESS BASIC

Relacyjne bazy danych. Podstawy SQL

API System Partnerski

Transkrypt:

NoSQL: Riak dr inż. Sebastian Ernst Katedra Informatyki Stosowanej

Twierdzenie CAP W przypadku rozdziału węzłów (partition), możliwe jest zachowanie jednej z dwóch cech: spójności (consistency) wszystkie węzły widzą dokładnie te same dane, dostępności (availability) cała funkcjonalność systemu bazodanowego jest osiągalna.

Riak Baza NoSQL typu kluczwartość. Rozproszona, wszystkie węzły (ang. nodes) równoważne (obsługują zapis oraz odczyt). Hierarchia organizacji danych: bucket key value Figure 2: Key/Value Pairs Stored in a Bucket

Dostępność w Riak Każdy węzeł może obsłużyć dowolne żądanie. W przypadku awarii (odłączenia) węzła, sąsiedni węzeł przejmuje jego operacje zapisu/modyfikacji danych, i przekazuje mu je po tym gdy znów stanie się dostępny (tzw. hinted handoff).

Rozproszenie danych Bazy relacyjne źle skalują się horyzontalnie stosuje się m.in. metodę zwaną sharding podział danych wg. atrybutów na węzły. Kosztowne we wdrożeniu i utrzymaniu. Może prowadzić do powstania tzw. hot spots.

Model danych Riak Dane (klucz+wartość) nazywane obiektami pogrupowane w tzw. wiadrach (buckets). Pary wiadro+klucz są hashowane SHA1 powstają skróty o długości 160 bitów. Przestrzeń kluczy jest dzielona na partycje (domyślnie 64) każda partycja odpowiada za zakres zawierający 2^160/n wartości.

Model danych Riak

Replikacja w Riak

Spójność Eventual Consistency dane kiedyś osiągną stan spójny. W przypadku wystąpienia konfliktów, wybierana jest najnowsza wersja przy pomocy mechanizmu vector clocks. Zapytania mogą wymagać określonego kworum węzłów przez określenie parametru r (dla odczytu) oraz w (dla zapisu). Read repair: jeżeli węzeł zwraca nieaktualną wersję (lub komunikat not found), dane w nim są automatycznie naprawiane.

Wyszukiwanie w Riak Prosty model danych oznacza brak zbiorów, transakcji czy złączeń (bo nie ma kolumn ani wierszy). Dane można przeszukiwać poprzez: riak search: rozproszony silnik wyszukiwania pełnotekstowego, secondary indexing (2i): możliwość przypisywania do obiektów tagów, które potem mogą stanowić element zapytania, MapReduce: definiowanie procedur przy pomocy JavaScript lub Erlanga.

Riak Search Rozproszona, pełnotekstowa wyszukiwarka. Wsparcie dla różnych formatów (tekst, JSON, XML, Erlang) oraz analizatorów (whitespace, integer, noop). Wildcards, zakresy, AND/OR/NOT, grupowanie, prefiksy, wyszukiwanie w okolicy, term boosting.

Riak Search Stosujemy wtedy, gdy: zbieramy i parsujemy treści takie jak artykuły, blogi, itd., chcemy indeksować dane JSON, potrzebujemy szybkiego dostępu i zarazem bogatych możliwości odpytywania. Nie stosujemy, gdy wystarczyłoby tagowanie danych, dla danych binarnych lub gdy wymagamy pewnej spójności (wyszukiwarka nie wspiera read repair).

Riak Search Stosujemy wtedy, gdy: zbieramy i parsujemy treści takie jak artykuły, blogi, itd., chcemy indeksować dane JSON, potrzebujemy szybkiego dostępu i zarazem bogatych możliwości odpytywania. Nie stosujemy, gdy wystarczyłoby tagowanie danych, dla danych binarnych lub gdy wymagamy pewnej spójności (wyszukiwarka nie wspiera read repair).

Riak Search użycie Można skorzystać z polecenia shellowego search-cmd, np.: bin/search-cmd search books "title:\"see spot run\"" Dostępny jest też interfejs Solr: curl "http://localhost:8098/solr/books/select? start=0&rows=10000&q=prog*" Wykorzystanie jako wstępnego filtra dla MR. { "inputs": {! "bucket":"mybucket",! "query":"foo OR bar"! },! "query":... }

Riak Search użycie Wyszukiwanie terminów w określonym sąsiedzwie: "See spot run"~20 Wyszukiwanie zakresów: "field:[red TO rum]" Zwiększanie priorytetu terminów: red^5 OR blue Operacje logiczne: red AND blue AND NOT yellow +red +blue -yellow Grupowanie: (red OR blue) AND NOT yellow

Secondary Indexes (2i) Udostępniają możliwość tagowania obiektów. Dostępne typy: liczby całkowite i ciągi znaków (również binaria). Dokładne dopasowanie lub zakres wartości. Możliwa paginacja, streaming. Również można wykorzystać jako wejście do MR.

Secondary Indexes (2i) Używamy, gdy: chcemy szukać w oparciu o coś innego niż para wiadro/klucz, przechowujemy bloby i chcemy mieć możliwość sprawnego wyszukiwania. Nie używamy, gdy: mamy >512 partycji, potrzebujemy czegoś innego niż dokładne dopasowanie lub zakresy, wymagamy złożonych zapytań.

Secondary Indexes (2i) Dodawanie obiektu z 2i: curl -X POST \! -H 'x-riak-index-twitter_bin: jsmith123' \! -H 'x-riak-index-email_bin: jsmith@basho.com' \! -d '...user data...' \! http://localhost:8098/buckets/users/keys/john_smith! Odpytywanie: curl localhost:8098/buckets/users/index/twitter_bin/ jsmith123

MapReduce w Riak Faza map wykonywana na węzłach posiadających określone dane, reduce na węźle któremu zlecono zadanie. Używamy MapReduce: gdy znamy zbiór par wiadro/klucz do przetworzenia, gdy wyniki mają zawierać wartości bądź ich fragmenty (a nie same klucze), gdy wymagana jest większa elastyczność niż ta w wyszukiwarce czy 2i. Nie używamy do przeglądu całego wiadra, lub gdy chcemy deterministycznego czasu wyszukiwania.

MapReduce w Riak Zapytanie MR zawiera listę wejść (pary wiadro/klucz) oraz listę faz (definicje funkcji map, reduce i link).

MapReduce: przykład $ curl -X POST -H "content-type: application/json" \! http://localhost:8098/mapred --data @-<<\EOF! {"inputs":[["alice","p1"],["alice","p2"],["alice","p5"]]!,"query":[{"map":{"language":"javascript","source":" "}},{"reduce":{"language":"javascript","source":"! "}}]}! EOF

MapReduce: przykład $ curl -X POST -H "content-type: application/json" \! http://localhost:8098/mapred --data @-<<\EOF! {"inputs":[["alice","p1"],["alice","p2"],["alice","p5"]]!,"query":[{"map":{"language":"javascript","source":" function(v) {! var words = v.values[0].data.tolowercase().match('\\w*','g');! var counts = [];! for(var word in words)! if (words[word]!= '') {! var count = {};! count[words[word]] = 1;! counts.push(count);! }! return counts;! }! "}},{"reduce":{"language":"javascript","source":"! "}}]}! EOF

MapReduce: przykład $ curl -X POST -H "content-type: application/json" \! http://localhost:8098/mapred --data @-<<\EOF! {"inputs":[["alice","p1"],["alice","p2"],["alice","p5"]]!,"query":[{"map":{"language":"javascript","source":" "}},{"reduce":{"language":"javascript","source":"! function(values) {! var result = {};! for (var value in values) {! for(var word in values[value]) {! if (word in result)! result[word] += values[value][word];! else! result[word] = values[value][word];! }! }! return [result];! }! "}}]}! EOF

Przykład modeli danych Zastosowanie Klucz Wartość Sesja ID sesji/użytkownika Dane sesji Reklamy ID kampanii Treść reklamy Logi Data Zawartość logów Dane z czujników Data/czas Parametry odczytów Dane użytkowników Login, e-mail, UUID Atrybuty użytkownika Treść Tytuł/ID Zawartość dokumentu