MongoDB je mezi NoSQL databázemi pravděpodobně nejvyspělejší databáze, v několika aspektech je koncepčně blízká relačním databázím. I když dokonce i v češtině vyšlo několik článků o této databázi, doufám, že následující technologické shrnutí bude pro čtenáře užitečné.

Co je to MongoDB

Podle tvůrců jde o dokumentově orientovanou databázi a nezbývá než souhlasit. Každý záznam v databázi je chápán jako dokument – má vlastní IDčko, dokumentový typ, operace nad ním jsou atomické. Data jsou interně uložena a navenek prezentována ve formátu BSON, což je specifikace a knihovna pro převod JSONu do binární podoby. Databáze nativně podporuje velké množství datových typů, kromě těch běžných (celé i neceločítelné číslo, řetězec neomezené délky, boolean, datumočas…) také odkaz na jiný dokument nebo binární data. Datový model je velmi flexibilní: každé políčko může obsahovat více hodnot, v políčku může být uložena další datová struktura, políčka a jejich hodnoty nejsou (a nemohou) být povinné.

Dotazovací jazyk a JavaScript

MongoDB má vlastní dotazovací jazyk podobný SQL (viz převodní tabulka), který v některých svých možnostech tradiční SQL překonává. V dotazech můžeme používat množinové operace, regulární výrazy, javascriptové podmínky nebo přímo spustit javascriptovou metodu na straně serveru. Pro hromadné operace nad daty je k dispozici implementace návrhového vzoru MapReduce, která opět využívá JavaScript.

Další vlastnosti

MongoDB má několik vlastností, které nejsou běžné ve světě relačních databází a které se hodí pro provozování velkých nebo zatížených aplikací. Jsou jimi sharding neboli rozdělení dat do více instancí databáze a replikace.

Nejspíš žádná jiná databáze nemá takové množství administračních aplikací. Úctyhodný je i seznam podporovaných jazyků, ve kterém nechybí ani Java. Oficiální javový ovladač jako datové objekty vrací BasicDBObject, což je implementace java.util.Map<String,Object>, existují ale také knihovny třetích stran, které mapují data do beanů, například Spring Data. Pro ostatní jazyky je možné použít dokumentovaný komunikační protokol nebo komunitně vyvíjené REST rozhraní.

MongoDB je k dispozici, podobně jako MySQL, pod duální AGPL3/komerční licencí s možností komerční podpory.

Zhodnocení

MongoDB jsme použili v jednom projektu, který „shodou okolností“ byl dokumentovým úložištěm, takže tato databáze výborně pasovala na požadavky aplikace. Ale je potřeba mít na paměti, že „dokumentové paradigma“ se na některé typy úloh nehodí. Podobně někdy může vadit neexistence transakcí, integritních omezení, pevného datového modelu nebo uložených procedur a triggerů. Tím se dostáváme k samotné podstatě NoSQL databází a jejich správnému použití. Někdy je relační databáze tím nejlepším prostředkem pro modelování reality. Jindy se hodí dokumentová databáze, grafová databáze, key-value databáze nebo jiná z NoSQL koncepcí.

MongoDB je vyspělá databáze s množstvím užitečných vlastností, při úvahách nad architekturou nové aplikace bychom tuto databázi určitě neměli vynechat…

Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Email this to someone