Úvod
Pokud hledáte NoSQL databázi, pravděpodobně jste narazili na Cassandra a MongoDB. Přesto mají tyto dvě oblíbené možnosti NoSQL mnohem méně společného, než se očekávalo.
V tomto tutoriálu vysvětlujeme podobnosti a rozdíly mezi Cassandrou a MongoDB.
Cassandra vs MongoDB:Podobnosti
Při porovnávání dvou databázových systémů se obvykle usuzuje, že existují také společné podobnosti. Ačkoli existují, pokud jde o Cassandra a MongoDB, tyto podobnosti jsou omezené.
Databáze NoSQL
Nejdůležitější je, že Cassandra a MongoDB jsou klasifikovány jako databáze NoSQL. NoSQL (nejen SQL) je oblíbenou alternativou k tradičním databázím. Na rozdíl od relačních databází, které známe, může NoSQL ukládat velké množství dat, aniž by vyžadovalo logickou kategorii nebo schéma.
Vzhledem k tomu, že tradiční databáze nebyly schopny zpracovat velké množství nestrukturovaných dat v reálném čase, databáze NoSQL tuto výzvu přijaly horizontálním škálováním.
V souladu s tím byla Cassandra vydána v roce 2008 jako jedna z těchto databází NoSQL. O rok později byl vytvořen MongoDB.
Open-Source Software
Další společnou vlastností těchto dvou je, že se jedná o bezplatný software s otevřeným zdrojovým kódem. Můžete si zdarma stáhnout databázové balíčky, nastavit je a nakonfigurovat.
Cassandra, původně vytvořená vývojáři z Facebooku, je nyní ve vlastnictví projektu Apache a je součástí jeho open-source komunity. Na druhou stranu je MongoDB jedním z nejpopulárnějších systémů pro správu databází na světě se silnou komunitou vývojářů MongoDB.
Nelze nahradit RDBMS a ACID
Mějte na paměti, že Cassandra ani MongoDB nemohou nahradit tradiční systém správy relačních databází (RDBMS). Pokud potřebujete ukládat data pomocí řádků a sloupců ve strukturovaném formátu, držte se jedné z mnoha dostupných relačních databází.
Navíc, pokud potřebujete databáze kompatibilní s ACID, NoSQL pravděpodobně není nejlepší řešení. Pro databázové transakce, které zajišťují atomicitu, konzistenci, izolaci a trvanlivost, je lepší používat relační databáze, jako je MySQL nebo PostgreSQL.
Cassandra vs MongoDB:Rozdíly
Dostupnost dat
Jedním z nejvýznamnějších rozdílů mezi MongoDB a Cassandrou je jejich strategie týkající se dostupnosti dat. Tato funkce závisí na počtu master slave v clusteru.
MongoDB má jeden master, který řídí více podřízených uzlů. Pokud hlavní uzel spadne, převezme jeho roli jeden z podřízených uzlů. Přestože strategie automatického převzetí služeb při selhání zajišťuje obnovu, může trvat až minutu, než se podřízený systém stane hlavním. Během této doby není databáze schopna reagovat na požadavky.
Cassandra , na druhou stranu používá jiný model. Namísto jednoho hlavního uzlu využívá více hlavních serverů uvnitř clusteru. Při přítomnosti více mistrů se nemusíte bát žádného výpadku. Redundantní model zajišťuje vysokou dostupnost za všech okolností.
Škálovatelnost
Škálovatelnost je funkce přímo spojená s modelem clusteru. Cassandra a MongoDB tedy mají značné rozdíly mezi jejich škálovatelností zápisu.
Pouze hlavní uzel může zapisovat a přijímat vstup. Mezitím se podřízené uzly používají pouze pro čtení. V souladu s tím jako MongoDB má jeden hlavní uzel, je omezený z hlediska škálovatelnosti zápisu.
Více hlavních uzlů zvyšuje Cassandras schopnosti psaní. Umožňuje této databázi koordinovat četné zápisy současně, všechny pocházejí od jejích masterů. Proto čím více hlavních uzlů je v clusteru, tím lepší je rychlost zápisu (škálovatelnost).
Datový model
Nyní se podívejme na datový model těchto dvou databází NoSQL.
MongoDB datový model je kategorizován jako objektový a dokumentový. To znamená, že může představovat jakýkoli druh objektových struktur, které mohou mít vlastnosti nebo mohou být dokonce vnořené pro více úrovní.
Pokud jde o Cassandru, existuje tradičnější model. Cassandra má strukturu tabulky pomocí řádků a sloupců. Přesto je flexibilnější než relační databáze, protože každý řádek nemusí mít stejné sloupce. Po vytvoření je těmto sloupcům přiřazen jeden z dostupných datových typů Cassandra, který se nakonec více spoléhá na datovou strukturu.
Dotazovací jazyk
Dalším rozlišujícím faktorem je, zda potřebujete databázi s podporou dotazovacího jazyka.
MongoDB používá dotazy strukturované do fragmentů JSON a zatím nemá žádnou podporu dotazovacího jazyka. Pokud jste vy nebo váš tým zvyklí na SQL, budete si na to zvykat. Je však dostatečně snadné jej spravovat.
Na rozdíl od MongoDB, Cassandra má svůj vlastní dotazovací jazyk nazvaný CQL (Cassandra Query Language). Jeho syntaxe je podobná SQL, ale stále má určitá omezení. Databáze má v podstatě jiný způsob ukládání a obnovy dat, protože není relační.
Jak se dotazy liší?
V příkladech níže můžete vidět, jak se dotazy v MongoDB liší od dotazů používaných v Cassandře (při práci v ukázce zaměstnanec tabulka).
Výběr záznamů ze stolu zaměstnanců:
MongoDB
‘db.employee.find()’
Cassandra
‘SELECT * FROM employee;’
Vkládání záznamů do tabulky zaměstnanců:
MongoDB
‘db.employee.insert({ empid: '101', firstname: 'John', lastname: 'Doe', gender: 'M', status: 'A'})’
Cassandra
‘INSERT INTO employee (empid, firstname, lastname, gender, status) VALUES('101', 'John', 'Doe', 'M', 'A');’
Aktualizace záznamů v tabulce zaměstnanců:
MondgoDB
'db.Employee.update({"empid" : 101}, {$set: { "firstname" : "James"}})'
Cassandra
‘UPDATE employee SET firstname = ‘James' WHERE empid = '101';’
Podporované programovací jazyky
MongoDB: Actionscript, C, C#, C++, Clojure, ColdFusion, D, Dart, Delphi, Erlang, Go, Groovy, Haskell, Java, JavaScript, Lisp, Lua, MatLab, Perl, PHP, PowerShell, Prolog, Python, R, Ruby, Scala, Smalltalk
Cassandra: C#, C++, Clojure, Erlang, Go, Haskell, Java, JavaScript, Perl, PHP, Python, Ruby, Scala
Agregace
Rozhodování mezi MongoDB nebo Cassandrou může také přijít na to, zda chcete nebo nechcete vestavěný agregační rámec.
MongoDB má vestavěný agregační rámec. Tato funkce umožňuje získávat data pomocí vícestupňového potrubí ELT k transformaci dokumentů na agregované výsledky. Takový rámec je však efektivní pouze při práci s malým nebo středně velkým datovým provozem.
Cassandra nemá žádný agregační rámec a vyžaduje externí nástroje jako Hadoop, Spark a další.
Schéma
Pokud jde o schéma, měli byste se rozhodnout, zda chcete flexibilní databázi nebo stacionární.
MongoDB je databáze, která nevyžaduje schéma, díky čemuž je přirozeně lépe přizpůsobitelná změnám. Ve svých předchozích verzích výchozí konfigurace nevynucovala vůbec žádné schéma. Dnes se můžete rozhodnout, zda chcete schéma nebo ne. Tato flexibilita znamená, že databáze může vkládat dokumenty různých struktur a interpretovat je jednou v softwaru.
Cassandra je mnohem stacionárnější databáze. Usnadňuje statické psaní a vyžaduje předem kategorizaci a definici sloupců.
Sekundární indexy
Kvalita sekundárních indexů určuje, jak efektivně můžete přistupovat k záznamům v databázi. Rozsah, v jakém jsou tyto indexy podporovány, není stejný v MongoDB a Cassandře.
MongoDB má vysoce kvalitní sekundární indexy. Díky svému flexibilnímu datovému modelu a sekundárním indexům může přistupovat k jakékoli vlastnosti uloženého objektu (i když je vnořený).
Případně Cassandra má pouze podporu kurzoru pro sekundární index. Jeho dotazy jsou omezeny na jednotlivé sloupce a porovnání rovnosti.
Výkon
Existuje řada faktorů, které ovlivňují výkon těchto dvou typů databází.
Především databázový model (nebo schéma) dělá velký rozdíl v kvalitě výkonu, protože některé jsou vhodnější pro MongoDB, zatímco jiné mohou pracovat lépe s Cassandrou.
A co víc, charakteristika zatížení Zásadní roli hraje také aplikace, kterou vaše databáze potřebuje podporovat. Pokud očekáváte velké zatížení, Cassandra se svými několika hlavními uzly poskytne lepší výsledky. Při velkém zatížení výstupu budou MongoDB i Cassandra vykazovat dobrý výkon.
A konečně, mnozí se domnívají, že MongoDB má navrch, pokud jde o požadavky na konzistenci . Přesto se to může lišit v závislosti na aplikaci. Cassandru můžete také ručně nakonfigurovat tak, aby splňovala vámi nastavené standardy konzistence.