NoSQL

[ Treść artykułu jest chroniona dzięki Plagiashield ]

Jak oglądać {netflix3wiki} na Netflix

NoSQL (nierelacyjna baza danych SQL, pierwotnie „non SQL” lub „non relational”) – baza danych zapewniająca mechanizm do przechowywania i wyszukiwania danych modelowanych w inny sposób niż relacje tabelaryczne używane w relacjach baz danych SQL.

Takie bazy danych istniały od końca lat 60. XX wieku, ale nie używano nazwy „NoSQL”. NoSQL umożliwia tworzenie prostych projektów, horyzontalne skalowanie do klastrów maszyny (co jest problemem dla relacyjnych baz danych) i lepszą kontrolę nad dostępnością. Bazy NoSQL wykorzystywane są coraz częściej w big data działających w czasie rzeczywistym. Inne cechy wspólne baz NoSQL to open source, budowa na potrzeby firm Web 2.0, brak schematu danych oraz możliwość wyboru sposobu przechowywania danych w zależności od ich specyfiki.

NoSQL stworzony został z potrzeby obsługiwania większych wolumenów danych, która wymusiła przejście na model budowania platform na klastrach mniej wydajnych serwerów. Ta zmiana wzbudziła także wątpliwości w sprawie łatwości tworzenia kodu dobrze współpracującego z bazami relacyjnymi. Struktury danych używane przez NoSQL (np. klucz–wartość, graf, dokument, szerokokolumnowe) różnią się od tych używanych domyślnie w relacyjnych bazach danych, dzięki czemu niektóre operacje NoSQL są szybsze. Wybór konkretnej baz danych pod względem formy przechowywania danych zależy od problemu, który musi rozwiązać. Czasami struktury danych używane przez bazy danych NoSQL są również postrzegane jako „bardziej elastyczne” niż relacyjne bazy danych. Wiele baz danych w celu osiągnięcia wysokiej dostępności danych (przepustowości) rezygnuje całkowicie lub częściowo ze spójności (twierdzenie CAP Erica Brewera). NoSQL nie posiada jednego standardowego języka zapytań i interfejsu.

Bazy danych NoSQL nie spełniają ACID i co najwyżej mogą osiągnąć kompromis określany BASE (Basically Available, Soft state, Eventual consistency). Chociaż niektóre bazy danych takie jak: MarkLogic, Aerospike, FairCom c-treeACE, Google Spanner (NewSQL), Symas LMDB i OrientDB uczyniły je centralnym elementem swoich projektów. Istnieje niewiele systemów, które obsługują zarówno transakcje ACID, jak i standardy X/Open XA w przypadku rozproszonego przetwarzania transakcji.

Termin NoSQL po raz pierwszy został użyty przez Carlo Strozziego w 1998 roku jako nazwa dla lekkiej relacyjnej bazy open source Strozzi NoSQL. RDBMS NoSQL różni się od ogólnej koncepcji NoSQL z 2009 roku. Strozzi sugeruje, że ponieważ obecny ruch NoSQL „całkowicie odchodzi od modelu relacyjnego, powinien zatem zostać nazwany bardziej stosownie – NoREL”.

W 2009 roku Johan Oskarsson szukał dla spotkania Hadoop w San Francisco nazwy, która stanowiłaby jednocześnie dobry hashtag Twittera; krótkiej, łatwej do zapamiętania i takiej, dla której Google nie wyświetlałby zbyt wielu wyników, tak aby wyszukiwanie po nazwie pozwalało łatwo znaleźć spotkanie. Poprosił o sugestie na kanale IRC #cassandra i spośród propozycji wybrał nazwę NoSQL, którą zgłosił Eric Evans z RackSpace. Spotkanie dotyczyło otwartych, rozproszonych, nierelacyjnych systemów baz danych. Nazwa NoSQL była negatywna i nie do końca pasowała do opisywanych systemów jednak termin ten rozpowszechnił się na ogólnoświatową sieć i stał się de facto nazwą trendu w IT.

Niektórzy zwolennicy systemów NoSQL twierdzą, że nazwa NoSQL nie oznacza „nie” dla SQL a raczej oznacza „Not Only SQL” (z ang. nie tylko SQL), podkreślając możliwość obsługi języka zapytań SQL.

Pomysł nierelacyjnych baz danych nie jest nowy, a wykorzystanie nierelacyjnych repozytoriów rozpoczęło się w czasach pierwszych komputerów. Nierelacyjne bazy danych rozkwitały w latach 60. XX wieku, w czasach komputerów mainframe, a później, w momencie dominacji relacyjnych baz danych DBMS, znalazły zastosowanie w wyspecjalizowanych repozytoriach, na przykład w hierarchicznych usługach katalogowych. Pojawienie się nierelatywnego systemu DBMS nowej generacji wynikało z potrzeby stworzenia równoległych systemów rozproszonych dla wysoce skalowalnych aplikacji internetowych, takich jak wyszukiwarki internetowe.

NoSQL zyskał popularność na początku XXI wieku, gdy pojawiły się nowe potrzeby firm Web 2.0, takich jak Facebook, Google i Amazon.com, Netflix, Yahoo!, eBay, Hulu, IBM i wiele innych.

Na początku 2000 roku Google Inc. zbudował swoją wysoce skalowalną wyszukiwarkę i aplikacje: Gmail, mapy Google, Google Earth, Google Finance i Google Aplikacje – rozwiązując problemy związane ze skalowalnością i równoległym przetwarzaniem dużych ilości danych. W rezultacie utworzono rozproszony system plików, column-family-oriented data store, distributed coordination system, środowisko uruchomieniowe oparte na algorytmie MapReduce. Publikacja przez Google opisów tych technologii spowodowała wzrost zainteresowania programistów oprogramowaniem open source, w wyniku czego powstał Hadoop i powiązane projekty mające na celu stworzenie podobnych technologii. Pojawienie się Hadoop położyło podwaliny pod szybki wzrost NoSQL. Rok później w 2007 r. Amazon postanowił podzielić się informacjami o swoim systemie Dynamo.

Każde rozwiązanie NoSQL wykorzystuje inny model. Istnieją różne podejścia do klasyfikacji baz danych NoSQL, każda z różnymi kategoriami i podkategoriami.

Wiele baz danych nie pasuje jednoznacznie do żadnej z kategorii, np. OrientDB określa się jako bazę dokumentów i bazę grafową.

(Szerokokolumnowe)

Magazyn klucz–wartość korzysta z asocjacyjnej tablicy (znanej również jako mapa lub słownik) jako podstawowego modelu danych. W tym modelu dane są reprezentowane jako zbiór par klucz–wartość, tak że każdy możliwy klucz pojawia się najwyżej jeden raz w kolekcji. Wykorzystywana jest do: przechowywania obrazów, przechowywania danych sesji, koszyka zakupów, tworzenia wyspecjalizowanych systemów plików, jako pamięci podręcznych obiektów, a także w systemach zaprojektowanych pod kątem skalowalności.

Model klucz–wartość jest jednym z najprostszych nietrywialnych modeli danych, a bogatsze modele danych są często implementowane jako jego rozszerzenie. Model klucz–wartość może zostać rozszerzony na dyskretnie uporządkowany model, który utrzymuje klucze w porządku leksykograficznym. Ponieważ magazyny klucz–wartość zawsze wykorzystują klucz główny, przeważnie cechują się wysoką wydajnością i są łatwo skalowalne. Magazyn klucz–wartość należy odpytywać po kluczu.

Magazyny klucz–wartość mogą wykorzystywać modele spójności od spójności ostatecznej (wartość zreplikowana na inne serwery) do możliwości serializacji. Niektóre bazy danych obsługują porządkowanie kluczy. Sposobem na rozwiązanie konfliktu aktualizacji może być faworyzowanie najnowszego wpisu lub zwrócenie wszystkich wartości w celu dokonania wyboru. Istnieją różne implementacje sprzętowe, a niektórzy użytkownicy przechowują dane w pamięci RAM, SSD, HDD.

Dokument jest głównym pojęciem baz dokumentów. Ogólnie zakłada się, że dokumenty zawierają i kodują dane (lub informacje) w niektórych standardowych formatach lub kodowaniach tj.: XML, JSON, YAML, a także formy binarne tj. BSON. Dokumenty są adresowane w bazie danych za pomocą unikalnego klucza, który reprezentuje ten dokument. Jedną z innych cech charakterystycznych bazy danych zorientowanej na dokumenty jest to, że oprócz wyszukiwania klucza przeprowadzanego przez magazyn klucz–wartość, baza danych oferuje również interfejs API lub język zapytań, który pobiera dokumenty na podstawie ich zawartości. Dokument jest używany do logowania zdarzeń, analizy stron internetowych lub analizy w czasie rzeczywistym, aplikacjach e-commerce.

Różne implementacje oferują różne sposoby organizowania lub grupowania dokumentów: kolekcje, tagi, niewidoczne metadane, hierarchie katalogów, wiadra.

W tabelarycznych relacyjnych bazach danych każda kolumna musi zawierać taką samą sekwencję pól definiowana przez wartość lub oznaczona jako null; podczas gdy dokumenty w kolekcji mogą mieć zupełnie inne pola.

Analogicznie do relacyjnych baz danych, rodzina kolumn jest „tabelą”, a każda para klucz–wartość jest „rzędem”. Każda kolumna to krotka (triplet) składająca się z nazwy kolumny, wartości i stempla czasu. Stempel czasu jest odpowiedzą na problem aktualizacji. Istnieją dwa typy rodzin kolumn: standardowa rodzina kolumn i super rodzina kolumn. Rodzina kolumn jest używana do logowania zdarzeń, zarządzania treścią, jako liczniki, do wygasających danych.

Ten rodzaj bazy danych jest przeznaczony dla danych, których relacje są dobrze reprezentowane jako wykres składający się z elementów powiązanych ze skończoną liczbą relacji między nimi. Rodzajem danych mogą być relacje społeczne, połączenia transportu publicznego, mapy drogowe, topologie sieci itp. Baza grafów jest oparta na węzłach (encje), krawędziach (relacje), właściwościach, teorii grafów. Grafy są używane w sieciach społecznościowych, do wytyczania tras.

Ponieważ większość baz danych NoSQL nie ma możliwości dołączania zapytań, schemat bazy danych zasadniczo musi być różnie zaprojektowany. Istnieją trzy główne techniki obsługi danych relacyjnych w bazie danych NoSQL.

Zamiast odzyskiwać wszystkie dane za pomocą jednego zapytania, często wykonuje się kilka zapytań w celu uzyskania pożądanych danych. Zapytania NoSQL są często szybsze niż tradycyjne zapytania SQL, więc koszt konieczności wykonania dodatkowych zapytań może być akceptowalny.

Zamiast tylko przechowywać klucze obce, często zachowuje się rzeczywiste obce wartości wraz z danymi modelu. Na przykład każdy komentarz do bloga może zawierać oprócz identyfikatora użytkownika także nazwę użytkownika, zapewniając w ten sposób łatwy dostęp do nazwy użytkownika bez konieczności ponownego wyszukiwania. Kiedy jednak zmieni się nazwa użytkownika, będzie ona musiała zostać zmieniona w wielu miejscach w bazie danych. Tak więc to podejście działa lepiej, gdy odczyty są znacznie częstsze niż zapisy.

W bazach danych dokumentów, takich jak MongoDB, często umieszcza się więcej danych w mniejszej liczbie zbiorów. Na przykład w aplikacji do blogowania można wybrać przechowywanie komentarzy w dokumencie posta na blogu, tak aby po pojedynczym pobieraniu otrzymywano wszystkie komentarze. Tak więc w tym podejściu pojedynczy dokument zawiera wszystkie dane potrzebne do określonego zadania.

Daj nam znać

NoSQL

[ Treść artykułu jest chroniona dzięki Plagiashield ]