Název MongoDB byl odvozen od Humongo nás DB.
Jedná se o open source NoSQL databázi. MongoDB je vyvíjen a komerčně podporován společností 10gen.
Zaměření MongoDB je na škálovatelnost a výkon. MongoDB je databáze orientovaná na dokumenty bez schémat. To ukládá data jako objekty JSON. Na rozdíl od tradiční SQL databáze nemusíte definovat schéma. Schéma je začleněno do samotného datového dokumentu, takže schéma můžete kdykoli snadno změnit, aniž byste se museli starat o změnu kteréhokoli z předchozích načtených dokumentů. Vysoký výkon a škálovatelnost jsou možné, protože v MongoDB nejsou prováděna žádná spojení a žádné transakce s více dokumenty. To také zajišťuje replikaci mezi servery s možností automatického převzetí služeb při selhání. Pro vysokou dostupnost můžete také škálovat napříč servery.
Tento článek je 1. částí ze série článků o MongoDB.
Nainstalujte MongoDB pomocí YUM
Instalace MongoDB pomocí yum je poměrně přímočará.
Nastavení úložiště 10gen Yum
Nejprve do svého yum přidejte úložiště 10gen, jak je znázorněno níže.
# vi /etc/yum.repos.d/10gen.repo [10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 enabled=1
Poznámka:Výše uvedené platí pro 64bitový systém. Pokud používáte 32bitový systém, nasměrujte baseurl ve výše uvedeném souboru na http://downloads-distro.mongodb.org/repo/redhat/os/i686
Nyní spusťte „yum info“ pro zobrazení balíčků mongo-10gen a mongo-10gen-server.
# yum info mongo-10gen Name : mongo-10gen Arch : x86_64 Version : 2.2.2 Release : mongodb_1 Size : 43 M Repo : 10gen Summary : mongo client shell and tools URL : http://www.mongodb.org License : AGPL 3.0 # yum info mongo-10gen-server Name : mongo-10gen-server Arch : x86_64 Version : 2.2.2 Release : mongodb_1 Size : 6.7 M Repo : 10gen Summary : mongo server, sharding server, and support scripts URL : http://www.mongodb.org License : AGPL 3.0
Nainstalujte balíčky klienta a serveru Mongo
Nainstalujte tyto dva mongo-* balíčky, jak je ukázáno níže.
# yum install mongo-10gen mongo-10gen-server Installing : mongo-10gen-2.2.2-mongodb_1.x86_64 Installing : mongo-10gen-server-2.2.2-mongodb_1.x86_64
Ověřte soubor mongod.conf
Tím se také nainstaluje výchozí soubor /etc/mongod.conf a spouštěcí skript /etc/rc.d/init.d/mongod
Soubor /etc/mongod.conf obsahuje následující výchozí hodnoty. Jak vidíte zde, soubory databáze mongo budou vytvořeny v adresáři /var/lib/mongo. Pokud chcete, aby byly soubory DB vytvořeny v jiném adresáři, změňte adresář dbpath v souboru mongod.conf.
# cat /etc/mongod.conf logpath=/var/log/mongo/mongod.log logappend=true fork = true dbpath=/var/lib/mongo pidfilepath = /var/run/mongodb/mongod.pid
Spusťte server MongoDB
Spusťte službu mongod, jak je uvedeno níže.
# service mongod start Starting mongod: forked process: 15968 all output going to: /var/log/mongo/mongod.log child process started successfully, parent exiting
Prohlédněte si soubory protokolu, abyste se ujistili, že se MongoDB úspěšně spustil. Ve výchozím nastavení běží MongoDB server na portu 27017.
# cat /var/log/mongo/mongod.log Sat Jan 19 10:57:03 [initandlisten] MongoDB starting : pid=15968 port=27017 dbpath=/var/lib/mongo 64-bit host=centos Sat Jan 19 10:57:03 [initandlisten] db version v2.2.2, pdfile version 4.5 Sat Jan 19 10:57:03 [initandlisten] git version: d1b43b61a5308c4ad0679d34b262c5af9d664267 Sat Jan 19 10:57:03 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49 Sat Jan 19 10:57:03 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/var/lib/mongo", fork: "true", logappend: "true", logpath: "/var/log/mongo/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid" } Sat Jan 19 10:57:03 [initandlisten] journal dir=/var/lib/mongo/journal Sat Jan 19 10:57:03 [initandlisten] recover : no journal files present, no recovery needed Sat Jan 19 10:57:03 [websvr] admin web console waiting for connections on port 28017 Sat Jan 19 10:57:03 [initandlisten] waiting for connections on port 27017
Pro připojení k MongoDB použijte Mongo Shell
Zadáním „mongo“ spusťte mongo shell a připojte se k MongoDB, abyste provedli nějakou databázovou operaci. Zobrazí se výzva „>“, kde můžete zadat příkazy klienta mongo.
# mongo MongoDB shell version: 2.2.2 connecting to: test Welcome to the MongoDB shell. >
Následující příkaz vloží ukázkový dokument do kolekce MongoDB s názvem „sites“. Je to podobné příkazu SQL „INSERT into“.
> doc1 = { name : "ramesh" }; > db.sites.insert( doc1 );
Následující zobrazí všechny dokumenty v kolekci „sites“ MongoDB. Je to podobné příkazu SQL „SELECT * from“.
> db.sites.find() { "_id" : ObjectId("50f72809a8e3c7a3aba2bf15"), "name" : "ramesh" }
Nainstalujte MongoDB ze zdroje
Pokud chcete nainstalovat MongoDB ze zdroje, postupujte podle kroků uvedených níže.
Install Pre-Reqs
Ujistěte se, že jsou již nainstalovány balíčky gcc-c++ a glibc-devel. MongoDB používá scons k vytvoření zdrojového kódu. Ujistěte se tedy, že balíček scons je již nainstalován.
# rpm -qa | egrep 'gcc-c++|glibc-devel|scons' gcc-c++-4.4.6-4.el6.x86_64 glibc-devel-2.12-1.80.el6_3.6.x86_64 scons-2.0.1-1.el6.noarch
Pokud tyto předběžné požadavky nemáte, nainstalujte je.
# yum install gcc-c++ glibc-devel scons
Stáhněte si MongoDB
Přejděte na stránku stahování MongoDB a stáhněte si zdrojový kód. Aktuální stabilní verze MongoDB je 2.2.2.
Jakmile budete mít odkaz ke stažení, můžete také použít wget k přímému stažení zdrojového kódu.
cd /usr/src wget http://downloads.mongodb.org/src/mongodb-src-r2.2.2.tar.gz tar xvfz mongodb-src-r2.2.2.tar.gz cd mongodb-src-r2.2.2
Sestavte MongoDB pomocí Scons
Scons je podobný dělat. Napište „scons all“ a sestavte MongoDB ze zdroje.
Vezměte prosím na vědomí, že když spustíte „scons all“, používá pouze jeden CPU a současně spouští pouze jednu úlohu k vytvoření zdrojového kódu. Takže to bude pomalé. Pokud chcete, aby scons využívaly celý CPU a spouštěly při sestavování více úloh, měli byste zadat počet úloh, které by měly provést.
V mém systému mám 8 jader. Pro sestavení jsem tedy provedl „scons -j 8 all“, jak je uvedeno níže.
# scons -j 8 all scons: Reading SConscript files ... scons version: 2.0.1 python version: 2 6 6 'final' 0 Checking whether the C++ compiler works(cached) yes Checking for C header file unistd.h... (cached) yes Checking whether clock_gettime is declared... (cached) yes Checking for C library rt... (cached) yes Checking for C++ header file execinfo.h... (cached) yes Checking whether backtrace is declared... (cached) yes Checking whether backtrace_symbols is declared... (cached) yes Checking for C library pcap... (cached) no Checking for C library wpcap... (cached) no Checking if __malloc_hook is declared volatile... (cached) no scons: done reading SConscript files. .. Install file: "build/linux2/normal/mongo/test" as "test" scons: done building targets.
Jakmile vytvoříte zdrojový kód, měli bychom jej nainstalovat. K instalaci MongoDB použijte „scons install“. Ve výchozím nastavení se nainstaluje do /usr/local/bin. Pokud chcete nainstalovat MongoDB do jiného adresáře, použijte volbu „–prefix“.
Chcete-li nainstalovat MongoDB do adresáře /opt/mongo, spusťte následující příkaz scons.
# scons --prefix=/opt/mongo install
Jak vidíte níže, nainstaloval MongoDB do adresáře /opt/mongo.
# ls -l /opt/mongo/ total 12 drwxr-xr-x. 2 root root 4096 Jan 19 13:33 bin drwxr-xr-x. 3 root root 4096 Jan 19 13:33 include drwxr-xr-x. 2 root root 4096 Jan 19 13:33 lib
Vytvořte soubor /etc/mongod.conf
Vytvořte následující konfigurační soubor, který bude server MongoDB používat při spouštění.
# cat /etc/mongod.conf logpath=/var/log/mongo/mongod.log logappend=true fork = true dbpath=/var/lib/mongo pidfilepath = /var/run/mongodb/mongod.pid
Ve výše uvedeném souboru parametr dbpath označuje, že když spustíme databázi MongoDB, vytvoří všechny požadované databáze v adresáři /var/lib/mongo. Tuto cestu můžete odpovídajícím způsobem změnit.
Vytvořte adresář, na který odkazuje cesta dbpath.
# mkdir -p /var/lib/mongo
Spusťte démona MongoDB
Přidejte /opt/mongo/bin/ do proměnné PATH.
# export $PATH=$PATH:/opt/mongo/bin/
Spusťte mongodb, jak je ukázáno níže, předáním umístění konfiguračního souboru pomocí volby -f.
# mongod -f /etc/mongod.conf forked process: 20127 all output going to: /var/log/mongo/mongod.log child process started successfully, parent exiting
Pokud použijete „mongod“ bez jakéhokoli argumentu, spustí se proces v popředí. Když zavřete terminál, váš server MongoDB se také zastaví. Ujistěte se tedy, že spustíte mongod s volbou -f, jak je uvedeno výše.
Ověřte soubory protokolu, abyste se ujistili, že se spustil správně. Ve výchozím nastavení běží MongoDB server na portu 27017.
# cat /var/log/mongo/mongod.log Sat Jan 19 13:48:44 [initandlisten] MongoDB starting : pid=20127 port=27017 dbpath=/var/lib/mongo 64-bit host=centos Sat Jan 19 13:48:44 [initandlisten] db version v2.2.2, pdfile version 4.5 Sat Jan 19 13:48:44 [initandlisten] git version: nogitversion Sat Jan 19 13:48:44 [initandlisten] build info: Linux centos 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 BOOST_LIB_VERSION=1_49 Sat Jan 19 13:48:44 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/var/lib/mongo", fork: "true", logappend: "true", logpath: "/var/log/mongo/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid" } Sat Jan 19 13:48:44 [initandlisten] journal dir=/var/lib/mongo/journal Sat Jan 19 13:48:44 [initandlisten] recover : no journal files present, no recovery needed Sat Jan 19 13:48:44 [websvr] admin web console waiting for connections on port 28017 Sat Jan 19 13:48:44 [initandlisten] waiting for connections on port 27017
Pro připojení k MongoDB použijte Mongo Shell
Zadáním „mongo“ spusťte mongo shell a připojte se k MongoDB, abyste provedli nějakou databázovou operaci. Zobrazí se výzva „>“, kde můžete zadat příkazy klienta mongo.
# mongo MongoDB shell version: 2.2.2 connecting to: test Welcome to the MongoDB shell. >
Následující příkaz vloží ukázkový dokument do kolekce MongoDB s názvem „sites“. Je to podobné příkazu SQL „INSERT into“.
> doc1 = { name : "ramesh" }; > db.sites.insert( doc1 );
Následující zobrazí všechny dokumenty v kolekci „sites“ MongoDB. Je to podobné příkazu SQL „SELECT * from“.
> db.sites.find() { "_id" : ObjectId("50f72809a8e3c7a3aba2bf15"), "name" : "ramesh" }
V dalším článku této série vysvětlíme několik příkazů MongoDB s příklady.