Lut
22
2016

Bazy NoSQL czyli wykorzystanie MongoDB

Bazy danych NoSQL

Relacyjne bazy danych m.in. SQL Server, MySql czy Oracle są bardzo rozpowszechnione i używane przez wielu programistów na całym świecie. Schemat bazy danych przedstawionych jako tabele zbudowane z kolumn i wierszy, a te z kolei przechowujące odpowiednie typy danych stał się podstawowym i najpopularniejszym narzędziem do budowania biznesowych jak i nieskomercjalizowanych aplikacji. W ostatnich latach można zauważyć powracający trend do nierelacyjnych systemów DBMS ze względu na ich skalowalność, prostotę i wydajność. Powszechnie systemy takie określane są mianem NoSQL, a interpretowane jako: “Not SQL” lub “Not Only SQL”.

Modele baz danych typowych dla NoSQL to przedewszystkim bazy typu:

  • klucz-wartość,
  • kolumnowego,
  • dokumentowego,
  • obiektowego

Zaletą łączącą te wszystkie typy baz danych jest m.in. to, że nie wymagają one predefiniowania schematów danych co może być bardzo użyteczne w przypadku aplikacji, które zawierają hierarchiczne dane różniące się od siebie. Bazy danych NoSQL ze względu na szybkość i skalowalność polecane są przede wszystkim przy tworzeniu aplikacji, które generują i dostarczają intensywnie dane przeznaczonych do komunikacji lub analizy danych. Główną wadą nierelacyjnych baz danych to brak obsługi transakcji co w przypadku zaawansowanych systemów takich jak serwisy bankowe jest wykluczeniem z użycia. W następnym rozdziale zostanie przedstawiona baza danych MongoDB, która wykorzystuje dokumenty będącymi hierarchicznymi strukturami drzewiastymi.

MongoDB

Podsumowując dotychczasowe rozważania na temat baz danych NoSQL powodem dla którego zaczęto wracać do nierelacyjnego modelu była słaba skalowalność relacyjnych baz danych w poziomie co skutkuje zwiększaniem dostępnych zasobów obliczeniowych jednak dostępne zasoby są ograniczone. Przełomowym rokiem stał się rok 2007 kiedy to firma ’10gen’ z Nowego Jorku rozpoczęła pracę nad nową platformą rozwiązującą narastające problemy związane ze skalowalnością w poziomie.

MongoDB w całości opiera się na dokumentowym modelu danych. W dokumentach zawarte są obiekty, które tworzą pary: klucz i wartość. Wszystkie dokumenty zawarte są w tzw. kolekcjach, natomiast kolekcje należą do jednej bazy danych. Strukturę danych w MongoDB przedstawia poniższy rysunek:

mongo

W celu zobrazowania tego, że MongoDB charakteryzuje się znacznie większą elastycznością i dowolnością niż relacyjne bazy danych rozważmy obiekt, który przedstawia dowolny wpis, przetrzymywany jest on w dokumencie o nazwie Studenci.

  1. {
  2. imie: „Tadeusz”,
  3. nazwisko: „Różewicz”,
  4. indeks: 265488,
  5. stopnie: [5, 3, 4.5, 4, 3],
  6. stacjonarny: true
  7. }

Obiekty takie jak powyższy są przechowywane w dokumentach, te zaś w kolekcjach, które tworzą całą bazę danych. Proces tworzenia schematów jest bardzo prosty, aby jeszcze bardziej ułatwić pracę ze schematami bazodanowymi możemy zainstalować Mongoose.

Mongoose to moduł Node, stanowiący interfejs do zarządzania bazami MongoDB. Posiada on wiele użytecznych możliwości, które umożliwiają m.in. zarządzanie kolekcjami bądź dostosowywanie schematów pod własne potrzeby dzięki własnym funkcjom, które można dopisać. Mongoose umożliwia również używanie tzw. middleware czyli funkcji pośredniczących, które mogą być używane jako metody operujące podczas transformacji danych wykonujących się na modelu bazodanowym. To pozwala programiście na elastycznym programowaniu funkcji, które odbywają się podczas takich operacji jak: usuwanie, dodawanie czy aktualizację schematów.

Rejestracja schematów w Mongoose wygląda następująco:

  1. var Schema = mongoose.Schema;
  2. var Zadanie = new Schema({
  3. id: Number,
  4. zadanie: String,
  5. });
  6. mongoose.model(„Zadanie”,Zadania);

Schematy zarejestrowane w ten sposób oferują ogromne możliwości. Poza definicją struktur danych w dokumencie, można ustalić wartości domyślne dla kolumn, przetwarzać dane wejściowe, a także sprawdzać ich poprawność podczas wywołaniu funkcji.

Dzięki wykorzystaniu wbudowanej funkcji find() w bardzo łatwy sposób możliwe jest przeszukiwanie dokumentów na podstawie własnych kryteriów. Użycie funkcji find() bez parametru, zwróci nam całą kolekcję w przeszukiwanym modelu. Przedstawiony poniżej kod przeszukuje model Zadanie i zwraca wszystkie elementy spełniające warunek “ == 1”

  1. var Zadanie = mongoose.model(‚Zadanie’);
  2. Zadanie.find({‚liczba’ : 1}, function(err, zadania) {
  3. for( var i=0; i < zadania.length; i++) {
  4. console.log(„zadanie „+ zadania[i]);
  5. }
  6. });

Powiązane wpisy

Autor wpisu:

Jakub Kądzielawa - młodszy programista PHP, student Informatyki, który łączy pracę ze swoją pasją. Czasami narzeka na brak wolnego czasu.

Zostaw komentarz