Post #8

PL

Wstęp

Z MongoDB pierwszy raz zetknąłem się kilka miesięcy temu, kiedy to zacząłem projekt właśnie osadzony w klimacie tej bazy danych. Jako .NET-owiec pracowałem wcześniej tylko z relacyjnymi bazami danych SQL, był to głównie MSSQL wraz ze środowiskiem SMS, czyli Server Management Studio. MongoDB zrobiło na mnie pozytywne wrażenie, a o tym poniżej.

Czym jest MongoDB?

Tak jak przeczytacie na https://www.mongodb.com/what-is-mongodb , MongoDB jest darmową (open-sourced), dokumentową bazą danych.

Mongo jest nierelacyjną baza danych, co oznacza, że jej struktura nie opiera się, tak jak baza danych SQL-a, na powiązaniach i relacjach między obiektami, czy tabelami, ale właśnie na dokumentach, czyli tabelach o płaskiej obiektowej strukturze w formacie JSON.

Elastyczna budowa dokumentu

W przeciwieństwie do baz danych SQL różne obiekty w ramach tabeli bazy danych MongoDB mogą różnić się strukturą, co może być zaskoczeniem.

W przypadku relacyjnej bazy danych SQL każda encja ma identyczną strukturę w ramach jednej tabeli, czyli współdzieli strukturę pól oraz ich typy wraz z innymi encjami tej samej tabeli, różni się tylko od nimi danymi.

W MongoDB, obiekt tej samej tabeli może mieć inną strukturę niż drugi obiekt tej samej tabeli. Przykładowo obiekt pierwszy posiada zagnieżdżone pole, które jest tablicą z wartościami string, a drugi obiekt może posiadać taką tablicę, ale z danymi innych typów, albo może w ogóle tej tablicy nie posiadać.

Oczywiście opisane zjawisko posiada plusy i minusy. Plusem na pewno jest to, że możemy zapisywać i odczytywać dane w elastyczny sposób, a minusem jest to, że tracimy na spójności danych, a w sytuacji, gdy aplikacja nie ma dobrze zaprojektowanej walidacji danych, dane zapisywane w bazie danych mogą nabrać naprawdę niekontrolowaną postać. Dlatego należy bardzo zwrócić uwagę na dobre zaprogramowanie logiki aplikacji oraz mechanizmu walidacji.

Język zapytań

W przypadku pracy z MSSQL, MySQL czy nawet Oracle korzystamy z języka SQL w celu budowania zapytań, procedur składowanych, czy innych obiektów bazodanowych.

W przypadku MongoDB zapytania piszemy zazwyczaj z użyciem Java Scriptczystego lub używając wbudowanej logiki.

Enitity Framework, a Mongo Driver

.NET posiada ORM, czyli Object-Relational Mapping wspierającego relacyjne bazy danych SQL, w postaci Entity Framework, aktualnie obecnego w najnowszej wersji w ramach frameworka .NET Core 2.0. MongoDB w ramach .NET posiada Mongo Driver.

Mongo Driver nie jest klasycznym ORM takim jak SQL Entity Framework, nie zdażyło mi się modelować domeny przy jego użyciu, i szczerze mówiąc nie wiem, czy jest to w ogóle możliwe. Mongo Driver jest raczej biblioteką umożliwiającą pracę na samym repozytorium konkretnej domeny aplikacji. Mongo Driver jest dużo młodszy niż Entity Framework, i może przez to może też chwilami niedopracowany natomiast ogólnie dobrze się z nim pracuje.

Osobiście miałem raz problem z napisaniem kwerendy dotyczącej filtrowania obiektu po elementach jego tablicy, natomiast były one specyficzne, już nie pamiętam w jaki sposób. Wbudowany mechanizm Mongo Driver budujący kwerendę transformował je za każdym razem do swojej, niestety błędnej postaci, problem rozwiązałem stosując kwerendę napisaną w sposób natywny, używając czystego java script.

Podsumowanie

Polecam Wam MongoDB, choćby ze względu na spojrzenie na bazy danych z innej strony niż zwykle.

Jakiś czas temu, był to chyba poprzedni rok, słuchałem podcasta dotyczącego właśnie nierelacyjnych, dokumentowych baz danych, także polecam Wam ten materiał: https://devstyle.pl/2016/06/06/devtalk36-o-nosql-z-grzegorzem-bernasiem/

Ponadto, polecam tym z Was którzy chcą zacząć pracę z MongoDB i tym którzy już z nią pracują, dokumentację MongoDB: https://docs.mongodb.com/manual/?_ga=2.254803656.1716569025.1525694141-1482408941.1525694141 , miałem przyjemność konfigurować bazę danych – co może nie być proste – na swoim prywatnym laptopie wraz z tutorialami na tej stronie oraz korzystałem z wielu materiałów dotyczących zapytań, z których niektóre spędzały mi sen z powiek, więc mogę polecić tą właśnie lekturę.

Wróć na stronę startową

ENG

Introduction

First time when I worked with Mongo was couple months ago and that was when I started new project embedded in MongoDB database. As .Net Developer who had worked before only with relational databases, mostly MSSQL with SMS environment which is Server Management Studio. MongoDB has positively impressed me and details are described below.

What Is MongoDB?

As you can read on the https://www.mongodb.com/what-is-mongodb MongoDB is opensourced, document database.

Mongdo is non-relational database which means that its structure is not based on, as in SQL database case, constraints and relations between objects and tables, but exactly on documents, and documents are tables with plain object structure in JSON format.

Elastic structure of a document

By contrast to the sql database, different objects within the same table MongoDB database can differ structurally, what might be a bit surprise.

When it comes to a relational sql database each entity has identical structure within the same table, what means that it shares structure of the fields and its types with another entities within the same table, it differs only with data.

On the contrary, when it comes to MongoDB, object can have different structure that the other one within the same table. For example, the first object can have embedded field being array wit couple string values, and at the same time the second object can have the same array but with values of different type or even does not have to implement mentioned array.

Of course, described situation has its pros and cons. An advantage is fact that it’s really elastic solution – we can write and read data as we wish, without restrictions. A disadvantage is fact that we lose consistency of data and in a situation when application is not well developed on the validation side, data written into the database  can really become very unpredictable. In order to that it is very important to proper develop application logic and validation mechanism.

Query language

When it comes to the work with MSSQL, MySQL or even Oracle we use SQL language, fully named Structured Query Language in order to build queries and stored procedures and other database objects.

According to the MongoDB we write queries usually using Java Script – plain or using embedded logic.

Entity Framework and Mongo Driver

.NET has its ORM, which is Object-Relational Mapping, supporting relational databases, presents as Entity Framework, actually available in the newest version within .NET Core 2.0 framework. MongoDB, on the other hand, has Mongo Driver.

Mongo Driver is not classic ORM like Entity framework is, I have never modelled any domain using it, and to be honest, I don’t know whether it is even possible. Mongo Driver is more like library enabling possibility of working with MongoDB-driven repository of the application domain. MongoDB is much younger than Entity Framework and, perhaps because of that fact, sometimes unfinished, but in general working with it is not bad.

Personally I had once problem with writing query concerning filtering object by its array’s elements, but there were really specific, I don’t quite remember now what way. Embedded mechanism of the Mongo Driver which was building query, every time transformed it to the its own form – unfortunately incorrect. I solved the problem writing query in the native way using plain java script.

Summary

I recommend using MongoDB, such for that to take a look on the databases from the other side than usually.

I recommend those of you who are up to start the work with MongoDB and those who have been already worked with it, official MongoDB documentation: https://docs.mongodb.com/manual/?_ga=2.254803656.1716569025.1525694141-1482408941.1525694141 I was configuring database – which is not so easy – on my own laptop with these tutorials and I used many material concerning querying especially, which some of them gave me sleepless nights, so I honestly advise you to take a look at it.

Get back to Home Page

3 komentarze do wpisu „Post #8

    • Tak, ja trochę uprościłem pisząc o JSON, bo BSON rozszerza JSON. Ale ostatecznie dokumenty tak jak napisałeś są przechowywane w MongoDB w formacie BSON. Dzięki za czujność!

  1. Pingback: dotnetomaniak.pl

Dodaj komentarz