MongoDB - wydajna nierelacyjna baza danych

Opis nierelacyjnej bazy danych MongoDB i jej zastosowań

MongoDB to nierelacyjna baza danych "dokumentów". Jest wysoce wydajna, napisana w C++ i wydawana na otwartej licencji.

  • Zapisuje dane w oparciu o kolekcje, w formacie przypominającym JSON (BSON).
  • Dynamiczne zapytania
  • Pełna obsługa indeksów, wliczając indeksy na wewnętrzne obiekty i wbudowane tablice
  • Profilowanie zapytań
  • Obsługa replikacji i fail-over
  • Efektywne przetrzymywanie dużych binarnych obiektów (np. grafiki, czy klipy wideo)
  • Automatyczny sharding o skalowalności chmury (w fazie alfa)
  • Wsparcie komercyjne
Celem MongoDB jest zapełnienie przestrzeni pomiędzy "magazynami" klucz-wartość (o wysokiej skalowalności), a tradycyjnymi bazami relacyjnymi (które posiadają bardzo rozbudowaną funkcjonalność). Projekt zyskał ostatnio na popularności po kilku udanych wdrożeniach. MusicNation.com używa MongoDB do przechowywania ~100MB plików wideo, a Server Density przeszedł z MySQL na rzecz MongoDB w swojej flagowej aplikacji do monitoringu stanu serwerów. Businessinsider.com wykorzystuje Mongo m.in. w swojej wyszukiwarce. API do bazy dostępne jest w wielu językach - C++, Java, Perl, PHP (Obsługa MongoDB w PHP), Python, Ruby.

Zastosowania

MongoDB najlepiej nadaje się do pewnych zadań takich jak:

  • Źródło danych dla serwisu internetowego: Mongo jest bardzo dobre w operowaniu na danych (insert, update, zapytania) "na żywo". Bardzo dobrze skaluje się i posiada mechanizmy replikacji - wymagane dla dużych serwisów internetowych.
  • Keszowanie: wydajność Mongo można wykorzystać jako kesz danych w np. infrastrukturze intranetowej. Dzięki trwałemu keszowaniu po restarcie systemu, czy bazy sieć nie zostanie przeciążona generowanie kesza
  • Duża ilość mało wartościowych danych: w przypadku napływu bardzo dużej ilości "mało ważnych" danych (np. logi) przetrzymywanie ich w tradycyjnej bazie staje się nieefektywne i zazwyczaj trzeba obsługiwać to na poziomie plików. MongoDB można wykorzystać w prostszy sposób jako magazyn tego typu danych.
  • Problemy wymagające wysokiej skalowalności: MongoDB dobrze czuje się w wieloserwerowych konfiguracjach. Silnik map/reduce jest także w planach dla kolejnych wydań.

Instalacja MongoDB

Warto sprawdzić czy MongoDB nie jest dostępna w pakietach używanej dystrybucji Linuksa (jest to możliwe). Jeżeli nie ma to można użyć np. standardowych pakietów ze strony mongoDB i odpalić bazę zgodnie z opisem na tejże stronie.

MongoDB i Python

Dla Pythona dostępny jest moduł mongo-python-driver pozwalający na pełne wykorzystanie możliwości tej bazy danych. Dostępne są także przykłady jak moduł wykorzystać w praktyce. Oto przykład:

from pymongo.connection import Connection
from pymongo import ASCENDING

# połączenie z serwerem
connection = Connection("localhost", 27017)

# wybranie kolekcji (niejako bazy danych)
# "test" jest tutaj nazwą kolekcji
db = connection.test
# jakiej kolekcji teraz używamy?
print db.name()

# dodajemy jakieś dane
db.my_collection.save({"x": 10})
db.my_collection.save({"x": 8})
db.my_collection.save({"x": 11})

# pobieramy wiersz
print db.my_collection.find_one()

# pobieramy wszystkie
for item in db.my_collection.find():
	print item["x"]

# tworzymy indeks
print db.my_collection.create_index("x")

# wykorzystujemy indeks do pobrania posortowanych danych
for item in db.my_collection.find().sort("x", ASCENDING):
	print item["x"]

# pobieramy 2 wpisy, pomijając 1
print [item["x"] for item in db.my_collection.find().limit(2).skip(1)]

blog comments powered by Disqus

Kategorie

Strony