Az első tapasztalatok MongoDB, programozó jegyzetek

A legtöbb programozó (kivéve azokat, akik nem követik a híreket) hallott valamit MongoDB, de soha nem használt az adatbázisban. Engedje meg, hogy mit lehet MongoDB, és mit nem, és felfegyverkezve Perl és Mojolicious. írj egy egyszerű sokraschalku linkek foglalkoztató MongoDB.

Az elméleti rész

Ez először is meg kell tudni MongoDB?

Ahhoz azonban, hogy a jó dolgokat meg kell fizetnie. A MongoDB atomi műveleteket csak akkor biztosítható szintjén az egyes dokumentumokat. Például, ha egy MongoDB szerver lesz feszültségmentes a frissítés során a gyűjtemény a dokumentumok egy része a dokumentumokat frissítésre kerül, és néhány - nem. A MongoDB nem csatlakozik. Meg kell csinálni kézzel. Meg kell jegyezni, hogy miközben te csatlakozik az adatbázis állapota megváltozik. Szintén MongoDB nincs tranzakció, de lehetséges, hogy írjon a kétfázisú.

Sok más finom pontok. Például, amikor frissíti a dokumentum egy gyűjtemény korlátozott méretű, a dokumentum nem lehet növelni. Tovább MongoDB nem teszi lehetővé a nem optimalizált válogató iratok (amikor vontatás nagy mennyiségű adatot, és nem rendelkeznek megfelelő index). És dolgozni fájlokat MongoDB használja az mmap. Ebben a tekintetben, MongoDB általában nagyobb lemezterületet használ, mint más adatbázisokhoz. Továbbá, ha dolgozni szeretne adatmennyiség meghaladja a 4 GB-ot, akkor kell egy 64 bites szerver.

Lehet kérni, hogyan lehet csinálni valamit használni, hogy az adatbázis, ha nem támogatja még a tranzakció? A valóságban nincs semmi ok az aggodalomra. Bizonyára weboldalak fele még mindig tartja az adatait MyISAM. És semmi, mert élünk valahogy. Például, ha úgy döntött, hogy írjon az MongoDB motor fórum, törlésére szálak először el kell távolítani az összes választ ebben a téma, majd a témáról. Ezen kívül senkinek nem tiltja, hogy használd MongoDB például együtt PostgreSQL.

Példa - egy egyszerű sokraschalka linkek

A Debian / Ubuntu telepítéséhez MongoDB történik nagyon egyszerűen:

sudo apt-get install MongoDB

A FreeBSD-ben - egy kicsit bonyolultabb:

pkg_add -r MongoDB
/ Usr / local / etc / rc.d / mongod onestart

Én személy szerint a FreeBSD telepítése során MongoDB ezt a hibát:

Felhasználó létrehozása 'MongoDB' UID '922'.
PW: felhasználói MongoDB már létezik

Ha hirtelen találkozott vele, csak telepítése után a következő parancsot:

pwd_mkdb -p /etc/master.passwd

Gratulálok, MongoDB telepítés befejeződött! Ez, persze, nem egy fürt replikakészletek és automatikus szegmentálás, hanem egy teszt környezet a legjobban. Amellett, hogy a szerver maga MongoDB (mongod) a rendelkezésünkre álló számos hasznos segédprogramot, nevezetesen a mongodump, mongorestere és mongo. Az első két nyilvánvalóan tervezett biztonsági mentés és visszaállítás az hát. Az utóbbi egy héjat dolgozni mongod. És, ha megy a localhost: 28017, akkor láthatjuk a web-alapú interfész mongod naplók, terhelési adatok, és így tovább.

git clone git: // github.com / afiskon / mongo_shortener.git
cd mongo_shortener
sudo. / INSTALLDEPS.sh # set függően
bizonyítani -rl. / T # fut a teszt
starman --port 3000. / script / mongo_shortener

Most, ha elmész locahost: 3000, akkor lehet, hogy megpróbálja sokraschalku akcióban:

Az első tapasztalatok MongoDB, programozó jegyzetek

Emlékeztetem Önöket, hogy én vagyok programozó, nem egy tervező, és nem tudom, hogy milyen szép helyek # 58;) Most próbálja meg kitalálni, hogyan sokraschalka munkák. A kezdéshez nyissa meg a fájlt lib / MongoShortener / Database.pm:

csomag MongoShortener. adatbázis;

use strict;
használja figyelmeztetések;
használja MongoDB;

sub getHandle # 123;
hacsak # 40; definiált $ db # 41; # 123;
$ Db = MongoDB. Connection -> új # 40;
host => 'MongoDB: // localhost: 27017'.
# 41; -> get_database # 40; 'MongoShortener' # 41; ;

$ Db -> URL-ek -> ensure_index # 40; # 123; code => 1 # 125;. # 123; egyedi => 1 # 125; # 41; ;
# 125;

return $ db;
# 125;

Most már tudjuk a nevét az adatbázisba. Mégis azt látjuk, hogy a telepítés után minden új kapcsolat urls gyűjtését az, hogy hozzon létre egy egyedi index a pályán kódot. Ha az index mégis, úgy jön létre, de ha már ott van, akkor nem történik semmi. Amennyire én értem, hozzon létre indexeket közvetlenül a kódot, hogy ne feszítse ezeket a rendszergazdák - a bevett gyakorlat, amikor a MongoDB.

Azt is meg kell figyelni, hogy a lib / MongoShortener / Main.pm file:

sub _create_short_url # 123;
én # 40; $ Self. $ url # 41; = @_;
my $ db = MongoShortener. Adatbázis. getHandle # 40; # 41; ;
my $ code = undef;
mert # 40; 1. 5 # 41; # 123;
$ Code = 1 + int rand # 40; 2 ** 40-1 # 41; ;
megpróbál # 123;
$ Db -> URL-ek -> insert # 40; # 123; kód => $ kódot. url => $ url # 125;. # 123; safe => 1 # 125; # 41; ;
# 125; fogás # 123;
$ Code = undef;
# 125; ;
Utolsó, ha meghatározott $ kódja;
# 125;
die 'CODE_GEN_FAILED', ha meghatározott $ kódja;

my $ SHORT_URL = encode_base64url # 40; csomag # 40; 'Q'. $ kód # 41; # 41; ;
$ SHORT_URL =

visszatérés HOME_URL # 40; # 41;. $ SHORT_URL;
# 125;

sub _resolve_short_url # 123;
én # 40; $ Self. $ SHORT_URL # 41; = @_;
$ SHORT_URL. = 'A' x # 40; 11 - hossz $ SHORT_URL # 41; ;
my $ code = csomagolja # 40; 'Q'. decode_base64url # 40; $ SHORT_URL # 41; # 41; ;

my $ db = MongoShortener. Adatbázis. getHandle # 40; # 41; ;
my $ doc = $ db -> URL-ek -> find_one # 40; # 123; kód => $ kód # 125; # 41; ;
visszaút definiált $ doc. $ Doc -> # 123; url # 125;. undef;
# 125;

Figyeljük meg a második argumentum beilleszteni. Alapértelmezett bejegyzés MongoDB készül megerősítés nélkül. Azaz, csak adja a parancsot: „Create / Update / Vedd el egy ilyen dokumentum”, és nem várta meg a választ. Érthető okokból, ebben az esetben, azt kritikus várni megerősítést a szerverről. Azt érjük el, továbbítása, és a második argumentum 1> illessze módszer.

Akkor kísérlet egy kicsit MongoDB, dolgozott vele a héjon keresztül mongo:

$ Mongo MongoShortener
MongoDB shell verzió: 2.0.6
kapcsolódás: MongoShortener

Lásd a listát gyűjtemények az adatbázisban:

> Gyűjtemények megjelenítése

további anyagok

Ahogy források több információt MongoDB, azt ajánlom a következőket:

És mit mondanak MongoDB? Már próbáltam használni az adatbázist valós projektek? A benyomások?

Mint a bejegyzést? Oszd meg másokkal:

(Meg kell adni JS)

rólam

Üdvözlet! A nevem Alexander. Itt írok dolgok érdekelnek
és időnként - csak az életről.

Figyeljen!

címkefelhő