MongoDB - wydajna nierelacyjna baza danych
17 September 2009
Comments
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
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)]
RkBlog
Comment article