Prima mea experiență cu MongoDB, note de programator

Cei mai mulți programatori (cu excepția celor care nu respectă știri), probabil, a auzit ceva despre MongoDB, dar nu a folosit niciodată această bază de date. Să aflăm ce se poate MongoDB, și ceea ce nu se poate, și, înarmați cu Perl și Mojolicious. scrie un simplu link-uri care utilizează sokraschalku MongoDB.







Partea teoretică

Asta în primul rând ar trebui să știi despre MongoDB?

Cu toate acestea, pentru toate lucrurile bune trebuie să plătească. În MongoDB operații atomice pot fi garantate doar la nivelul documentelor individuale. De exemplu, în cazul în care un server MongoDB va fi scos de sub tensiune în timpul actualizării de colectare a documentelor, unele dintre documentele vor fi actualizate, iar altele - nu. În MongoDB nu se alătură. Trebuie să-i facă manual. Trebuie avut în vedere faptul că în timp ce faci se alăture, modificările de stat bazei de date. De asemenea, MongoDB nici o tranzacție, dar este posibil să se scrie comitere în două faze.

Există multe alte puncte fine. De exemplu, atunci când actualizați un document într-o colecție de dimensiuni limitate, documentul nu poate fi mărit. Un alt MongoDB nu permite documente neoptimizate de sortare (când remorcarea cantități mari de date, și nu aveți un indice adecvat). Și pentru a lucra cu fișiere MongoDB utilizează mmap. În acest sens, MongoDB folosește în mod normal mai mult spațiu pe disc decât alte baze de date. De asemenea, dacă doriți să lucrați cu volume de date mai mare de 4 GB, veți avea nevoie de un server pe 64 de biți.

Ați putea întreba cum poți să faci ceva pentru a utiliza această bază de date, în cazul în care nu acceptă nici o tranzacție? În realitate, nu este nimic să vă faceți griji. Cu siguranță site-uri de jumătate păstrează încă datele în MyISAM. Și nimic, pentru că noi trăim într-un fel. De exemplu, dacă te-ai decis să scrie pe forum motor MongoDB, fire trebuie să eliminați mai întâi ștergerea toate răspunsurile din acest fir și apoi foarte subiect. În plus, nimeni nu interzice să utilizați MongoDB, de exemplu, împreună cu PostgreSQL.

Exemplu - un simplu link-uri sokraschalka

În Debian / Ubuntu instalat MongoDB se face foarte simplu:

sudo apt-get install MongoDB

În FreeBSD - un pic mai complicat:

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

Eu personal în timpul instalării sub FreeBSD MongoDB această eroare:

Crearea de utilizator 'MongoDB' cu UID '922'.
pw: utilizator „MongoDB“ există deja

Dacă dintr-o dată, de asemenea, sa întâlnit cu ea imediat după instalarea următoarea comandă:

pwd_mkdb -p /etc/master.passwd

Felicitări, instalarea MongoDB este completă! Aceasta, desigur, nu un cluster seturi replica și segmentarea automată, ci ca un mediu de testare cel mai mult. În plus față de serverul MongoDB în sine (mongod) la dispoziția noastră există un număr de utilități utile, în special mongodump, mongorestere și Mongo. Primele două sunt în mod evident concepute pentru backup și restaurare de rezervă. Acesta din urmă este un shell pentru a lucra cu mongod. Și, dacă te duci la localhost: 28017, atunci puteți vedea interfața web pentru mongod cu bușteni, informații de încărcare, și așa mai departe.







git clone git: // github.com / afiskon / mongo_shortener.git
cd mongo_shortener
sudo. / INSTALLDEPS.sh # set în funcție
dovedesc -rl. / T # ruleaza testele
Starman --port 3000. / script / mongo_shortener

Acum, dacă te duci pe locahost: 3000, va fi posibil să se încerce sokraschalku în acțiune:

Prima mea experiență cu MongoDB, note de programator

Vă reamintesc că eu sunt un programator, nu un designer, și nu știu cât de frumos site-uri # 58;) Acum, încercați să dau seama cum sokraschalka lucrări. Pentru a începe, deschide fișierul lib / MongoShortener / Database.pm:

Pachetul MongoShortener. Baza de date;

utilizați stricte;
utilizați avertismente;
utilizați MongoDB;

Sub getHandle # 123;
dacă nu # 40; definit $ db # 41; # 123;
$ Db = MongoDB. Conexiune -> nou # 40;
host => 'MongoDB: // localhost: 27017'.
# 41; -> get_database # 40; 'MongoShortener' # 41; ;

$ Db -> url-uri -> ensure_index # 40; # 123; code => 1 # 125;. # 123; unic => 1 # 125; # 41; ;
# 125;

reveni $ db;
# 125;

Acum știm numele bazei de date. Totuși, vedem că după instalarea fiecărei conexiuni noi în colectarea are loc pentru a url-uri a crea un index unic pe codul de câmp. În cazul în care indicele încă, acesta va fi creat, dar dacă este deja acolo, nimic nu se va întâmpla. În ceea ce am înțeles, de a crea indici direct în cod, astfel încât să nu tulpina acestor administratori - o practică obișnuită atunci când se utilizează MongoDB.

Tu ar trebui să acorde o atenție, de asemenea, la fișierul / MongoShortener / Main.pm lib:

Sub _create_short_url # 123;
meu # 40; $ Auto. $ url # 41; = @_;
mi $ db = MongoShortener. Baza de date. getHandle # 40; # 41; ;
codul meu $ = undef;
pentru # 40; 1. 5 # 41; # 123;
$ Cod = 1 + int rand # 40; 2 ** 40-1 # 41; ;
încerca # 123;
$ Db -> url-uri -> Inserare # 40; # 123; code => cod $. url => $ url # 125;. # 123; safe => 1 # 125; # 41; ;
# 125; captură # 123;
Cod $ = undef;
# 125; ;
Ultima dacă codul de $ definit;
# 125;
die 'CODE_GEN_FAILED' cu excepția cazului în codul $ definit;

mi $ SHORT_URL = encode_base64url # 40; ambalaj # 40; 'Q'. cod $ # 41; # 41; ;
$ SHORT_URL =

întoarcere HOME_URL # 40; # 41;. $ SHORT_URL;
# 125;

Sub _resolve_short_url # 123;
meu # 40; $ Auto. $ SHORT_URL # 41; = @_;
$ SHORT_URL. = 'A' x # 40; 11 - lungime $ SHORT_URL # 41; ;
codul meu $ = despacheta # 40; 'Q'. decode_base64url # 40; $ SHORT_URL # 41; # 41; ;

mi $ db = MongoShortener. Baza de date. getHandle # 40; # 41; ;
$ Meu doc ​​= $ db -> url-uri -> find_one # 40; # 123; code => cod $ # 125; # 41; ;
reveni $ doc definit. $ Doc -> # 123; URL-ul # 125;. undef;
# 125;

Observați al doilea argument pentru a insera. intrare implicită în MongoDB se face fără confirmare. Asta este, vom da doar comanda „Create / Actualizare / Îndepărtează un astfel de document,“ și nu a așteptat un răspuns. Din motive evidente, în acest caz, este important să așteptați confirmarea de la server. Ceea ce se realizează prin transmiterea, iar al doilea argument 1> introduce metoda.

Puteți experimenta un pic cu MongoDB, după ce a lucrat cu ea prin Mongo shell:

$ Mongo MongoShortener
MongoDB versiune coajă: 2.0.6
conectarea la: MongoShortener

A se vedea lista de colecții în baza de date:

> Afișare colecții

materiale suplimentare

Ca surse de mai multe informații despre MongoDB, aș recomanda următoarele:

Și ce spui despre MongoDB? Deja a încercat să folosească baza de date în proiecte reale? Cum afișări?

Ca și postul? Împărtășește cu alții:

(Trebuie să includeți JS)

Despre mine

Salutări! Numele meu este Alexandru. Aici am scris despre lucruri de interes pentru mine
și uneori - doar despre viata.

Acorde o atenție!

nor de etichete