MongoDB 2011
-
Upload
natalia-stanko -
Category
Technology
-
view
340 -
download
0
description
Transcript of MongoDB 2011
NoSQL i MongoDB
http://www.mongodb.com/
Czerwiec 2011, Kraków
Natalia Stanko
Plan
1. Ruch NoSQL
• Problem skalowalności
• Charakteryzacja NoSQL
• Popularne DBMS zorientowane na dokumenty
2. MongoDB
• Czym jest MongoDB?
• Właściwości MongoDB
• Tworzenie zapytań
• Analogie do SQL
• Możliwości MongoDB
• Współpraca z językami programowania
3. Kiedy wybrać?
4. Wady i problemy
5. Kto korzysta z tego rozwiązania?
6. Literatura i źródła
Problem skalowalności
● Większa liczba użytkowników aplikacji - większa liczba wykonywanych operacji
● Niewydajne JOINy, transakcje
● Rozmiar bazy rośnie – problem z wydajnością
RDBMS nie skalują się dobrze.
NOSQL http://nosql-database.org/
Charakteryzacja NoSQL
● Brak relacji
● Stosunkowo nowy sposób składowania danych (XML, JSON)
● Alternatywa dla relacyjnych i obiektowych baz danych
● Hybrydowość
● Skalowalność
● Brak stałego schematu struktury danych, brak migracji schematów baz
● Redukcja ORM, mapowania, migracji
● Bazy następnej generacji?
Popularne DBMS zorientowane na dokumenty:
● CouchDB (BBC, meebo.com, LHC)
● Cassandra (Facebook)
● Dynamo (Amazon Web Serwises)
● Voldemort (Linkedln)
● BigTable (Google Engine)
● MongoDB (?)
Czym jest MongoDB?
MongoDB jest systemem zarządzania bazą danych napisanym w języku C++. Pierwsze wydanie miało miejsce w 2009 r. Rozwiązanie jest dostępne na licencji GNU AGPL.
Twórcy: Dwight Merriman i Eliot Horowitz
Producent: www.10gen.com/
Download: http://www.mongodb.org/downloads
Aktualna wersja: 1.6.5 z 2010 r.
Właściwości MongoDB
● Open Source
● Społeczność
● Zorientowane dokumentowo
● Struktura składowania danych:
● Składnia JavaScript
● JSON
● Brak stałego schematu
● Klucz: wartość
● BSON
● Updates in Place
Właściwości MongoDB
● Wybranie i zastosowanie zalet z metody przechowywania danych w formacie klucz: wartość (JSON), co da szybkość i skalowalność oraz zalet relacyjnych baz danych, co da bogatą funkcjonalność
● Pełne wsparcie dla indeksów
● Replikacja - wysoka dostępność do danych
● GridFS
● Rozwiązania GIS
● Szybkość i wydajność
● Wysoka skalowalność pozioma
Tworzenie zapytań
> user = {name: 'Natalia', ulubiony_kolor: ['brązowy', 'biały']}
> db.mybase.save(user)
> db.mybase.save({name: 'Stach', ulubiony_kolor: ['żółty'], hobby: ['żaglówki']})
> db.mybase.find()
[
{ "_id" : { "$oid" : "4dec14eccc93747e680347c3" }, "name" : "Natalia", "ulubiony_kolor" : [ "brązowy", "biały" ] },
{ "_id" : { "$oid" : "4dec159fcc93747e680347c4" }, "hobby" : [ "żaglówki" ], "name" : "Stach", "ulubiony_kolor" : [ "żółty" ] }
]
Tworzenie zapytań
> db.mybase.update({name: 'Natalia'}, {'$push': {'ulubiony_kolor': 'łososiowy'}})
> db.mybase.update({name: 'Natalia'}, {'$pull': {'ulubiony_kolor': 'biały'}})
> db.mybase.find({name: 'Natalia'})
[
{ "_id" : { "$oid" : "4dec14eccc93747e680347c3" }, "name" : "Natalia", "ulubiony_kolor" : [ "brązowy", "łososiowy" ] },
{ "_id" : { "$oid" : "4dec159fcc93747e680347c4" }, "hobby" : [ "żaglówki" ], "name" : "Stach", "ulubiony_kolor" : [ "żółty" ] }
]
> db.mybase.find({ulubiony_kolor: 'żółty'})
Analogie do SQL
MongoDB SQL
dokument rekord
kolekcja tablica
id klucz główny
zagnieżdżenie relacja 1:n
tablica obiektów relacja m:n
indeks indeks
Możliwości MongoDB
● Duża liczba obsługiwanych typów danych
● Zapytania do zagnieżdżonych pól dokumentów
● Możliwość składowania plików w bazie
● Architektura zaprojektowana z myślą o łatwej replikacji
● Instalacja możliwa na wszystkich platformach, dostępny również w systemach zarządzania pakietami dla konkretnej platformy
Współpraca z językami programowania
Dostęp do bazy możliwy jest przy wykorzystaniu sterowników. Oficjalnie w tej chwili są dostępne dla języków:
C, C++, Java, JavaScript, Perl, PHP, Python, Ruby
Sterowniki nieoficjalne dla:
C#, .NET, Clojure, ColdFusion, Delphi, Erlang, Factor, Fantom, F#, Go, Groovy, Haskell, Lua, Node.js, PowerShell, Scala, Scheme, Smalltalk
Kiedy wybrać?
● Aplikacje działające w czasie rzeczywistym: zapis danych, aktualizacja i odczyt
● Śledzenie w czasie rzeczywistym parametrów wydajności na swoich stronach internetowych, statystyki (odsłony itp.)
● Archiwizacja danych, zdarzeń
● Serwisy i aplikacje, które mają wysokie wymagania wydajnościowe:
● duża liczba użytkowników, serwisy gromadzące duża ilość danych
● Caching
Wady i problemy
● Brak obsługi transakcji
● Systemy bankowe, księgowe itp.
● Inne, w których krytycznie ważna jest spójność danych i pewność wykonania operacji zapisu (sklepy, rezerwacje)
● Problemy wymagające użycia SQL
● Życie bez JOINów wymaga odpowiedniego przygotowania modeli danych
● Sortowanie i filtrowanie danych
Kto korzysta z tego rozwiązania?
http://www.10gen.com/customers
• Diaspora
https://joindiaspora.com/
• SourceForge
http://sourceforge.net/
• LHC
• The New York Times
http://www.nytimes.com
Literatura i źródła:
• MongoDB
http://www.mongodb.org/
• 10gen
http://www.10gen.com
• Dwight Merriman's presentationhttp://assets.leadit.us/mysql/MongoDB-10gen-CEO-Dwight-Merriman-presenting-at-NYC-MySQL-Group-at-Sun-Microsystems.pdf
• Document-oriented database
http://en.wikipedia.org/wiki/Document-oriented_database
• MongoDB is Web Scale
http://nosql.mypopescu.com/post/1016320617/mongodb-is-web-scale
• GNU AGPL
http://www.gnu.org/licenses/agpl.html
• Wojciech Sznapka, MongoDb - baza danych zorientowana dokumentowo
http://www.slideshare.net/xsolve/mongo-db-baza-danych-zorientowana-dokumentowo
• NoSQL DB
http://ai.ia.agh.edu.pl/wiki/pl:dydaktyka:ztb:2010:projekty:nosql_mongodb:start