wtorek, 13 lutego 2018

MongoDB - nierelacyjna baza danych w chmurze za 0 zł.

MongoDB to baza danych w której nie ma tabelek a wszystko opiera się na dokumentach i kolekcjach :) Dane składujemy w dokumentach w formacie binarnym JSON, który z kolei jest naturalnym wyborem dla obiektowych języków programowania takich jak np. JavaScript. Wszystko tutaj dzieje się o wiele prościej i sympatyczniej niż w relacyjnych bazach danych. Jest to bardzo dobry wybór do zastosowań w obszarze np. IoT.







Ponieważ cały czas chodzą mi po głowie różne pomysły na spięcie mikrokontrolerów z technologiami webowymi. Stąd moje macanie różnych tematów i technologii , z tym związanych.

MongoDB chciałbym w najprostszym przypadku zaaplikować jako element wymiany danych pomiędzy klientem www a serwerem domowym za którym będą schowane np. MCU z czujnikami , elementami wykonawczymi etc.



Dlaczego baza danych w chmurze a nie lokalnie ? Ano trzeba jakoś rozwiązać problem dostanie się z zewnątrz do serwera/huba lokalnego , wymiany i aktualizacji danych. Lokalnie internet mam w technologii LTE i nie wchodzi w grę przekierowanie portów z zewnątrz na sieć lokalną .  Zakładam zatem, że z zewnątrz nie ma możliwości dostępu do sieci lokalnej a w szczególności do elementów wykonawczych. Przerażające dla mnie jest rozwiązanie w którym do lokalnego elementu wykonawczego np z modułem Wi-Fi dostajemy się z internetu za pomocą przekierowania portów.
Jeszcze inna sprawa to sposób komunikacji po Wi-Fi, jest chyba najgorszym z dostępnych rozwiązaniem z punktu widzenia bezpieczeństwa jako takiego, już nawet nie mówię o dostępie z zewnątrz internetu bo tu jest najwięcej zagrożeń ale np. o nieautoryzowanym dostępie lokalnym . Do sieci Wi-Fi  włamanie jest bardzo proste, sama transmisja nie jest w żaden sposób zabezpieczona a klucze typu WPA, WEP (starocie) to tak naprawdę śmiech na sali. Dlatego Wi-Fi jako środowisko komunikacji w inteligentnym budynku z punktu widzenia bezpieczeństwa jest najgorszym wyborem, do zabawy i mniej wrażliwych przypadków to się nadaje owszem ale do poważniejszych zastosowań już nie. Jedyną niszą w której Wi-Fi jak na razie nie da się zastąpić to przesyłanie strumienia video. Można oczywiście podważać sens takich rozważań, po co mi bezpieczeństwo w domu przecież żaden haker nie będzie  chciał się włamać do mojej prostej sieci i garstki czujników. Nie chodzi też o to , żeby się bać i siać defetyzmy ale o to aby znaleźć przestrzeń do refleksji nad aspektami bezpieczeństwa w swoim otoczeniu. To, że nie widzimy  zagrożeń nie oznacza , że ich nie ma.  Znane są już przypadki użycia elementów struktury IoT (np. kamery Wi-Fi) do ataków np. typu DDoS na serwery  a to dopiero początek rewolucji IoT i metod ich wykorzystywania w hackingu. Ja osobiście nie chciałbym aby np . moja domowa lodówka (a są już z Wi-Fi) stała się elementem "zombi" w ataku na serwer instytucji bankowej czy państwowej. Nigdy nie wiadomo kiedy w takim przypadku przyjdzie ABW i aresztuje moją lodówkę i mnie jako właściciela :).Wi-Fi ma też tę wadę, że kompletnie nie jest energooszczędną technologią. Podstawową zaletą jest tutaj łatwość implementacji.

Co zatem jeśli nie Wi-Fi ? , mam na myśli cały czas bezprzewodową komunikację w zakresie IoT i w inteligentnym budynku. Tutaj zastosowanie znajdują m.in Z-Wave, ZigBee. Szczególnie dedykowanym rozwiązaniem jest duńskie Z-Wave, które znalazło się w systemach automatyki budynkowej oferowanej m.in na naszym rynku . Obie technologie wspierają sieci typu Mesh co jest bardzo pożądane w technologiach budynkowych szczególnie gdzie wchodzą w grę większe obszary pokrycia. Ciekawe jest jednak  to ,że u nas Z-Wave jest słabiej rozpoznawalna niż np ZigBee. O ile moduły ZigBee są u nas dostępne bez problemu o tyle moduły Z-Wave trudno jest namierzyć. Bez problemu natomiast dostaniemy te moduły poza granicami naszego kraju.

No dobra bo się trochę zacząłem rozmijać z tematem artykułu ... :)

W artykule przedstawię jak szybko i za darmo postawić bazę MongoDB w chmurze i jak zainstalować doskonałe narzędzie do zabaw z bazą - Robomongo.

Wchodzimy na stronę firmy , która trudni się hostingiem baz danych MongoDB w chmurze :
mLAB. W górnym prawym rogu klikamy SIGN UP i zakładamy konto. Trzeba podać adres majlowy, nazwę konta , nazwę użytkownika hasło etc.



Po utworzeniu konta musimy zweryfikować adres majlowy.
Po zweryfikowaniu adresu i zalogowaniu się mamy taki obrazek :



Klikamy pierwszy od góry wybór Create new.
Wyskakuje nam okienko z opcjami jak poniżej :



Zaznaczamy opcję Amazon Web Service i poniżej SANDBOX , klikamy CONTINUE na dole




otrzymujemy obrazek jak poniżej




Zaznaczamy opcję : Europe i ponownie CONTINUE
Wyskakuje nam kolejne okienko w którym podajemy nazwę naszej bazy. Nazwa musi być z małych liter podana. Klikamy CONTINUE


Otrzymujemy okienko z zamówieniem planu taryfowego. Wszystko musi być za Free.


Klikamy SUBMIT ORDER i po chwili możemy się cieszyć zakończeniem operacji. Baza jest stworzona i hostingowana w chmurze na serwerach AWS.


Jeśli klikniemy w nazwę naszej bazy, wskoczymy do okienka (poniżej) w którym będą podane parametry dostępu do bazy z zewnątrz. Hasło i Użytkownika zdefiniujemy na końcu przy dodaniu nowego użytkownika.



W okienku tym możemy również dodawać / usuwać manualnie rekordy do bazy danych, czyli tworzyć kolekcje i dokumenty. Potem pokaże co to jest i jak to się je.

Ostatnią czynnością w zakładaniu bazy jest powołanie użytkownika, bez tego nie dostaniemy się do bazy z zewnątrz. Klikamy zatem w zakładkę Users --> Add Database user



W wyskakującym okienku podajemy nazwę użytkownika i hasło.  Te parametry będą nam potrzebne kiedy będziemy chcieli się dostać do naszej bazy z zewnątrz np za pomocą programu Robo 3T.


Z rozpędu nie zaznaczmy tylko opcji Make read-only.
Mamy zatem bazę mamy użytkownika czas zatem na Robomongo :)

Baza zachęca nas aby stworzyć kolekcję i tu wytłumaczę łopatologicznie co to jest , wyobraźmy sobie wprost kolekcję znaczków, w skład kolekcji znaczków wchodzą poszczególne znaczki , każdy ze znaczków w kolekcji jest dokumentem (parafrazując na nomenklaturę nazewnictwa bazy) w którym opisujemy np cechy poszczególnych znaczków takie jak temat, cena , etc. Fizycznie dane wpisujemy w formacie JSON czyli {klucz1:  wartość1} , {klucz2: wartość2} etc.

Chcemy mieć jakieś narzędzie , za pomocą , którego w wygodny sposób będziemy operować na bazie. Czyli dodawać nowe wpisy, wyszukiwać dane, przeglądać je etc
Jednym  z takich fajnych narzędzi jest Robo 3T inaczej  Robomongo.

Opiszę jak to narzędzie uruchomić na LINUXIE i jak się połączyć z bazą w chmurze. Będzie to naprawdę prosta operacja.

Zatem ze strony Robo 3T ściągamy plik programu, wybieramy w zakładce system LINUX.
Plik jest spakowany i ma trochawę zbyt długaśną nazwę.
Po pobraniu, plik mamy w katalogu Pobrane, rozpakujemy go  klikając na niego.
Instalacji tutaj żadnej nie ma . Program uruchamiamy wchodząc do katalogu bin rozpakowanego katalogu i klikając na plik robo3t.
Można to oczywiście wszystko z konsoli zrobić dla wprawy co by nie zapomnieć o jej istnieniu. W konsoli plik uruchamiamy dodając dwa magiczne znaczki przed nazwą pliku ./robot3

Jeśli przy uruchomieniu otrzymamy jakiś warning o QT to wchodzimy w katalog lib (w rozpakowanym programie) i usuwamy dwa pliki libstdc++.so.6 i libstdc++.so.6.0.22

Po uruchomieniu programu musimy skonfigurować dane do połączenia z bazą, robimy to raz potem o tym zapominamy.
Utwórzmy zatem nowe połączenie w programie Robo 3T. Wchodzimy w zakładkę File --> Connect --> Create



W okienku tym w zakładce Connection wprowadzamy dane uzyskane z konta założonej bazy w mLAB., nazwę połączenia, adres bazy i port na którym jest sparowana nasza baza (dane patrz ostatnie zdjęcie z mLAB.) . Następnie przełączamy się w bieżącym okienku na zakładkę Authentication i podajemy nazwę bazy danych, nazwę użytkownika i hasło.


Zaznaczamy SAVE i wyskakuje nam okienko zdefiniowanego połączenia.


klikamy Connect i łączymy się z naszą bazą danych.


W następnym kroku pokażę jak w prosty sposób utworzyć kolekcję i dokumenty, czyli stworzyć rekordy bazy.

Załóżmy , że chcemy stworzyć kolekcję w której będą przechowywane wyjścia i ich stany.
Rozważmy w takim układzie cztery wyjścia, które oznaczymy out1, out2, out3, out4
Każde z wyjść będzie oddzielnym dokumentem, pojedynczy dokument będzie zawierał nazwę wyjścia i status. Kolekcję nazwijmy OUTPUT.

Uruchamiamy Robo 3T, wyskakuje nam okienko wyboru połączenia do naszej bazy. Parametry połaczenia dostępu do bazy wcześniej zdefiniowaliśmy. Klikamy Connect i po chwili widzimy na prawej belce nazwę naszej bazy , klikamy w nazwę i rozwijamy katlogi, jednym z nich jest katalog Collections. Prawym klawiszem myszki na katalogu rozwijamy menu i wybieramy Create Collection.
Do wyskakującego okienka wpisujemy nazwę kolekcji OUTPUT.


Zatwierdzamy Create. Kolekcja jest utworzona i znajduje się w katalogu Collections. Prawym klawiszem myszki na OUTPUT i rozwijamy menu z którego wybieramy Insert Document.



W wyskakującym okienku widzimy tylko dwa nawiasy. Pomiędzy nie wpisujemy dane w/g klucza jak poniżej na obrazku :

Konwencja {klucz1: wartość1, klucz2:wartość2, ....etc}, prościej się już chyba nie da. Zapisujemy i tak samo robimy dla kolejnych dokumentów czyli dla out2, out3, out4.
Mamy zatem kolekcję OUTPUT w której zawarte są cztery dokumenty.






W rozwinięciu zawartości dokumentu dla out1 widzimy, że został automatycznie przyporządkowany numer _id.

I to już  w sumie tyle. Jak operować na danych to już materiał na oddzielny wpis.
Powiem tylko, że dla mnie obsługa MongoDB to czysta przyjemność i jest to naprawdę fajnie rozwiązane zarówno od strony klienta  jak i od strony serwera . Oczywiście wszystko ma swoje wady i zalety (nie ma ludzi idealnych i takich technologii również) ,zależy to od przyjętych kryteriów. Nie we wszystkich zastosowaniach bazy typu NoSQL będą optymalne.


Pozdrawiam
picmajster.blog@gmail.com


Linki :

Mongodb narzedzia transakcje referencje
Mongodb narzedzia i biblioteki
MongoDB tutorial
MongoDB tutorial kolejny
Robomongo
mLab - cloud hosted MongoDB
Dostęp do bazy w mLAB w różnych językach
NoSQLClient

3 komentarze:

  1. Praca w chmurze jest obecnie trendem, który szybko rozwija się branży IT. Sam przechowuję tam swoje pliki i jak dla mnie jest to bezpieczne. Bazy danych to szeroki temat, obecnie uczę się tego na studiach, ale jeśli jest opcja magazynowania danych w chmurze to jestem tego wielkim zwolennikiem ;)

    OdpowiedzUsuń
  2. Super artykuł. Dzièki!

    OdpowiedzUsuń
  3. Bardzo dobry wpis. Pozdrawiam serdecznie.

    OdpowiedzUsuń