NoSQL bylo v posledních několika měsících jedním z nejdiskutovanějších témat. Tento tutoriál vám představí CouchDB, implementaci NoSQL, a naučí vás, jak s platformou začít.
Co je NoSQL?
NoSQL je bez schémat – nemusíte se předem rozhodovat o struktuře.
NoSQL [nejen SQL ] je posun směrem k úložištím dokumentů, které nevyužívají relační model. Základní posun paradigmatu je ve způsobu, jakým ukládají data. Pokud byste například potřebovali uložit data o faktuře, v RDBMS byste museli tyto informace destilovat do tabulek a poté použít jazyk na straně serveru k transformaci těchto dat zpět na reálné objekty. Na druhou stranu v NoSQL fakturu jen uložíte. NoSQL je bez schémat, což znamená, že nemusíte své tabulky a strukturu navrhovat dopředu – můžete jednoduše začít ukládat nové hodnoty.
Pokračujeme-li v příkladu faktury, některé faktury mohou obsahovat DIČ, některé nikoli. V RDBMS byste museli svému stolu sdělit, aby nejprve akceptoval DIČ a poté, že by mohlo být nulové. V NoSQL však můžete pouze ukládat faktury s DIČ nebo bez něj - neexistuje žádné schéma. Mějte na paměti, že NoSQL není stříbrná kulka. Pokud jsou vaše data skutečně relační, správnou volbou by bylo držet se vašeho RDBMS.
Dotazování databází NoSQL
MapReducing má výhody oproti SQL dotazům, protože úlohu map/reduce lze distribuovat mezi více uzlů, což v RDBMS není možné.
Databáze NoSQL používají map/reduce k dotazování a indexování databáze. V RDBMS spustíte dotaz spojující více tabulek, abyste nejprve vytvořili fond dat, a poté spustíte dotaz a vytvoříte sadu výsledků, podmnožinu celkových dat. V NoSQL použijete map/reduce k vytvoření „zobrazení“ (podobně jako sada výsledků). Tento pohled je podmnožinou celkových dat.
Mapa v podstatě získává data a snižuje agregaci dat. Čím více jste obeznámeni s RDBMS, tím obtížnější bude uchopení mapy/redukce. Výhody MapReducing oproti SQL dotazům, protože úlohu map/reduce lze distribuovat mezi více uzlů, což v RDBMS není možné. Přidání nového záznamu do databáze neznamená vždy, že se úloha map/reduce zcela znovu spustí.
Představujeme CouchDB
Pár faktů o CouchDB, které byste měli vědět:
- CouchDB je JSON databáze orientovaná na dokumenty napsaná v Erlangu.
- Jedná se o vysoce souběžnou databázi navrženou tak, aby byla snadno horizontálně replikovatelná napříč mnoha zařízeními a byla odolná vůči chybám.
- Je součástí databáze generace NoSQL.
- Je to open source projekt nadace Apache.
- Umožňuje aplikacím ukládat dokumenty JSON prostřednictvím rozhraní RESTful.
- Využívá map/reduce k indexování a dotazování databáze.
Hlavní výhody CouchDB
- Dokumenty JSON – Vše uložené v CouchDB se scvrkává na dokument JSON.
- Rozhraní RESTful - Od vytvoření přes replikaci až po vložení dat lze každou správu a datovou úlohu v CouchDB provádět prostřednictvím HTTP.
- N-Master Replication - Můžete využít neomezené množství 'master', což vytváří velmi zajímavé topologie replikace.
- Vytvořeno pro režim offline - CouchDB se může replikovat do zařízení (jako jsou telefony Android), která mohou přejít do režimu offline a zpracovávat synchronizaci dat za vás, když je zařízení opět online.
- Filtry replikace - Můžete přesně filtrovat data, která chcete replikovat do různých uzlů.
Spojení všeho dohromady
CouchDB je databáze navržená pro provoz na dnešním internetu.
CouchDB vám umožňuje napsat aplikaci na straně klienta, která komunikuje přímo s Couchem bez potřeby střední vrstvy na straně serveru, což výrazně zkracuje dobu vývoje. S CouchDB můžete snadno zvládnout poptávku přidáním dalších replikačních uzlů. CouchDB vám umožňuje replikovat databázi do vašeho klienta a pomocí filtrů můžete dokonce replikovat data konkrétního uživatele.
Mít databázi uloženou lokálně znamená, že aplikace na straně klienta může běžet téměř bez latence. CouchDB za vás vyřídí replikaci do cloudu. Vaši uživatelé mohou přistupovat ke svým fakturám na svém mobilním telefonu a provádět změny bez znatelné latence, a to vše v režimu offline. Když je připojení k dispozici a použitelné, CouchDB automaticky replikuje tyto změny do vašeho cloudového CouchDB.
CouchDB je databáze navržená tak, aby běžela na dnešním internetu pro dnešní desktopové aplikace a připojená zařízení, přes která k internetu přistupujeme.
Krok 1 – Instalace CouchDB
Nejjednodušší způsob, jak zprovoznit CouchDB na vašem systému, je zamířit na CouchOne a stáhnout si distribuci CouchDB pro váš OS – v mém případě OSX. Stáhněte si zip, rozbalte jej a vložte CouchDBX do složky aplikací (pokyny pro ostatní OS na CouchOne).
Nakonec otevřete CouchDBX.
Krok 2 – Vítejte ve Futonu
Po spuštění CouchDB byste měli vidět ovládací panel Futon v aplikaci CouchDBX. V případě, že nemůžete, můžete k Futonu přistupovat prostřednictvím vašeho prohlížeče. Při pohledu na protokol nám CouchDBX říká, že CouchDB byl spuštěn na http://127.0.0.1:5984/
(ve vašem systému se může lišit). Otevřete prohlížeč a přejděte na http://127.0.0.1:5984/_utils/
a měli byste vidět Futon.
Ve zbytku tohoto tutoriálu budu používat Futon ve Firefoxu. Budu mít také Firebug a konzolový pohled otevřený, abych viděl všechny HTTP požadavky, které Futon posílá ze zákulisí. To je užitečné, protože vaše aplikace může dělat vše, co dělá Futon. Pojďme do toho a vytvořte databázi s názvem mycouchshop
.
CouchDB jQuery Plugin
Futon ve skutečnosti používá plugin jQuery pro interakci s CouchDB. Tento plugin si můžete prohlédnout na http://127.0.0.1:5984/_utils/script/jquery.couch.js
(mějte na paměti, že váš port může být jiný). To vám dává skvělý příklad interakce s CouchDB.
Krok 3 – Uživatelé v CouchDB
CouchDB je ve výchozím nastavení zcela otevřený a dává každému uživateli administrátorská práva k instanci a všem jejím databázím. To je skvělé pro vývoj, ale samozřejmě špatné pro výrobu. Pokračujeme a nastavíme správce. Vpravo dole uvidíte "Vítejte na Admin Party! Všichni jsou admin! Opravte to".
Pokračujte a klikněte na opravit a dejte si uživatelské jméno a heslo. Tím se vytvoří účet správce a anonymní uživatelé budou mít přístup k operacím čtení a zápisu ve všech databázích, ale žádná konfigurační oprávnění.
Další informace o uživatelích
V CouchDB by nebylo moudré vytvořit jednoho superuživatele a nechat tohoto uživatele dělat veškeré čtení/zápis.
Uchopení uživatelů v CouchDB může být zpočátku trochu matoucí, zvláště pokud jste zvyklí vytvářet jednoho uživatele pro celou aplikaci a poté sami spravovat uživatele v tabulce uživatelů (nikoli v tabulce uživatelů MySQL). V CouchDB by nebylo moudré vytvořit jediného superuživatele a nechat tohoto uživatele provádět veškeré čtení/zápis, protože pokud je vaše aplikace na straně klienta, budou přihlašovací údaje tohoto superuživatele jasně viditelné ve zdrojovém kódu JavaScriptu.
CouchDB má vytvořeno vytváření uživatelů a ověřování. Uživatele můžete vytvářet pomocí pluginu jQuery pomocí $.couch.signup()
. Tito se v podstatě stávají uživateli vašeho systému. Uživatelé jsou pouze dokumenty JSON jako všechno ostatní, takže si můžete uložit jakékoli další atributy, které si přejete, jako je například e-mail. Pomocí skupin v rámci CouchDB pak můžete řídit, k jakým dokumentům má každý uživatel přístup pro zápis. Můžete například pro daného uživatele vytvořit databázi, do které mohou zapisovat, a poté je podle potřeby přidat do skupiny s přístupem pro čtení k ostatním databázím.
Krok 4 – Vytvoření dokumentu o produktu
Nyní vytvoříme náš první dokument pomocí Futon pomocí následujících kroků:
- Otevřete
mycouchshop
databáze. - Klikněte na "Nový dokument".
- Kliknutím na "Přidat pole" začněte přidávat data do dokumentu JSON. Všimněte si, jak je pro vás ID předvyplněno, vřele doporučuji toto neměnit. Přidejte klíč „name“ s hodnotou „Nettuts CouchDB Tutorial One“.
- Ujistěte se, že kliknete na zaškrtnutí vedle každého atributu, abyste jej uložili.
- Klikněte na "Uložit dokument".
Přejděte o úroveň výš, zpět do databáze a měli byste vidět jeden dokument uvedený s předchozím ID jako klíčem a hodnotou začínající {rev:
. Toto je dokument JSON, který jste právě vytvořili.
Krok 5 – Aktualizace dokumentu
CouchDB je databáze pouze pro připojení -- nové aktualizace se připojují k databázi a nepřepisují starou verzi. Každá nová aktualizace dokumentu JSON s již existujícím ID přidá novou revizi. To znamená automaticky vložený revizní klíč. Chcete-li to vidět v akci, postupujte podle následujících kroků:
- Zobrazení obsahu
mycouchshop
databáze, klikněte na jediný viditelný záznam. - Přidejte další atribut s klíčem „type“ a hodnotou „product“.
- Klikněte na „Uložit dokument“.
Po stisknutí tlačítka Uložit by měl být viditelný nový klíč revize začínající číslem 2. Návrat o úroveň zpět do mycouchshop
zobrazení databáze, stále uvidíte pouze jeden dokument, toto je nejnovější revize dokumentu o našem produktu.
Revize
Zatímco CouchDB používá revize interně, snažte se na to příliš neopírat. Revize lze pomocí Futonu celkem snadno vyčistit a není navržen pro použití jako systém kontroly revizí. CouchDB používá revize jako součást své replikační funkce.
Krok 6 – Vytvoření dokumentu pomocí cURL
Již jsem zmínil, že CouchDB používá RESTful rozhraní a čtenář s orlíma očima by si všiml, že Futon používá toto prostřednictvím konzole ve Firebugu. V případě, že jste to neudělali, dokažme to vložením dokumentu pomocí cURL přes Terminál.
První , vytvoříme dokument JSON s níže uvedeným obsahem a uložíme jej na plochu zavoláním souboru person.json
.
{ "forename": "Gavin", "surname": "Cooper", "type": "person" }
Další , otevřete terminál a spusťte cd ~/Desktop/
vložte vás do správného adresáře a poté proveďte vložení pomocí curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @person.json -H "Content-Type:application/json" . CouchDB by měl vrátit dokument JSON podobný tomu níže.
{"ok":true,"id":"c6e2f3d7f8d0c91ce7938e9c0800131c","rev":"1-abadd48a09c270047658dbc38dc8a892"}
Toto je ID a číslo revize vloženého dokumentu. CouchDB se řídí konvencí RESTful a tedy:
- PŘIDAT - vytvoří nový záznam
- ZÍSKAT - čte záznamy
- PUT - aktualizuje záznam
- SMAZAT - smaže záznam
Krok 7 – Zobrazení všech dokumentů
Naši přílohu můžeme dále ověřit zobrazením všech dokumentů v našem mycouchshop
databázi spuštěním curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs
.
Krok 8 – Vytvoření jednoduché mapovací funkce
Prohlížení všech dokumentů je prakticky zbytečné. Ideální by bylo prohlížet si všechny produktové dokumenty. Chcete-li toho dosáhnout, postupujte podle následujících kroků:
- Ve Futonu klikněte na rozbalovací nabídku zobrazení a vyberte „Dočasné zobrazení“.
- Toto je editor zmenšení mapy ve Futonu. Zkopírujte níže uvedený kód do mapové funkce.
function (doc) { if (doc.type === "product" && doc.name) { emit(doc.name, doc); } }
- Klikněte na Spustit a měli byste vidět jediný produkt, který jsme přidali dříve.
- Pokračujte a uložte toto zobrazení natrvalo.
Po vytvoření této jednoduché mapové funkce si nyní můžeme vyžádat toto zobrazení a zobrazit jeho obsah přes HTTP pomocí následujícího příkazu curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products
.
Malá věc, kterou je třeba si všimnout, je, jak ve výchozím nastavení získáváme ID a revizi dokumentu.
Krok 9 – Provedení snížení
Chcete-li provést užitečné snížení, přidejte do naší databáze další produkt a k našemu prvnímu produktu přidejte atribut ceny s hodnotou 1,75.
{ "name": "My Product", "price": 2.99, "type": "product" }
Pro náš nový pohled zahrneme zmenšeninu i mapu. Nejprve musíme provést mapu definovanou níže.
function (doc) { if (doc.type === "product" && doc.price) { emit(doc.id, doc.price); } }
Výše uvedená mapová funkce jednoduše zkontroluje, zda je zadaný dokument produktem a zda má cenu. Pokud jsou tyto podmínky splněny, je vystavena cena produktu. Funkce snížení je níže.
function (keys, prices) { return sum(prices); }
Výše uvedená funkce vezme ceny a vrátí součet pomocí jedné z integrovaných funkcí snížení CouchDB. Ujistěte se, že jste zaškrtli možnost snížení v pravém horním rohu tabulky výsledků, protože jinak byste nemuseli vidět výsledky snížení. Chcete-li zobrazit možnost snížení
, možná budete muset stránku znovu obnovit