Wprowadzenie
Najwyższa pora dodać do mojej konkursowej aplikacji jakąś bazę danych. Od początku zakładałam, że z powodów edukacyjnych użyję bazy nierelacyjnej. Zdecydowałam się w końcu na MongoDB. Jest to jedna z popularnych baz nierelacyjnych obsługiwanych przez mojego dostawcę PaaS (Platform as a Service), tj. Pivotal Web Services.
Źródła
Swoją działalność w tym obszarze opieram na następujących źródłach:
- Lista baz danych udostępnianych przez Pivotal: http://docs.run.pivotal.io/buildpacks/java/spring-service-bindings.html#services
- Krótkie porównanie filozofii leżącej u podstaw nierelacyjnych baz MongoDB i Redis (obie są na powyższej liście): http://oldblog.antirez.com/post/MongoDB-and-Redis.html
- Dokumentacja MongoDB w wersji javowej: https://docs.mongodb.org/getting-started/java/
- Strona projektu Hibernate dla baz nierelacyjnych: http://hibernate.org/ogm/ Jeszcze nie wiem, czy Hibernate się przyda. Twórcy MongoDB twierdzą, że ich produkt likwiduje potrzebę korzystania z ORM, ale, z drugiej strony, Spring ma też swoje wymagania.
Pierwsze kroki
Po instalacji serwera bazodanowego wykonuję następujące kroki:
- Uruchamiam proces serwera MongoDB:
1mongod --dbpath istniejaca/sciezka - Przygotowuję rekord reprezentujący użytkownika mojego systemu (plik user.json). Rekordy w MongoDB mają postać dokumentów w standardzie JSON (w przybliżeniu). Wartościami pól mogą być również inne dokumenty oraz tablice (w tym tablice dokumentów). Dokumenty są przechowywane w ramach kolekcji. Kolekcja przypomina tablicę w relacyjnej bazie danych, tyle że zawarte w niej dokumenty wcale nie muszą mieć tej samej struktury. Dokumenty w kolekcji muszą mieć klucz główny o nazwie
_id
:
12345678910111213{"_id": "12345","email": "mail@mail","user_name": "first","displayed_name": "First User","description": "aaa","birthday": "2004-01-16T00:00:00Z","wardrobes": [{"name": "main wardrobe"}, {"name": "winter wardrobe"}]} - Importuję rekord użytkownika do bazy danych:
1mongoimport --db test --collection users --drop --file git\szafbook\src\main\resources\templates\User.json - Dodaję sterownik MongoDB jako zależność w mavenowym pliku pom.xml.
- Łączę się z bazą danych z kodu w Javie:
1234567891011121314151617181920package pl.namiekko;...public class MongoMain {public static void main(String[] args) {//connectMongoClient mongoClient = new MongoClient();MongoDatabase db = mongoClient.getDatabase("test");...//disconnectmongoClient.close();}} - Wyszukuję użytkowników:
12345678//znajdź wszystkich użytkownikówFindIterable<Document> result = db.getCollection("users").find();//pobierz pierwszy wynikDocument d = result.first();//wypiszSystem.out.println(d); //Document{{_id=12345, email=mail@mail, user_name=first, ... - Zmieniam wartość jednego z pól użytkownika (dokument
d
pełni tu rolę wzorca, według którego odnajdywany jest rekord z bazy):
123//aktualizacja pierwszego dokumentu, który pasuje do wzorca ddb.getCollection("users").updateOne(d,new Document("$set", new Document("user_name", "second"))); - Nakładam indeks na nazwy użytkowników:
12//stwórz indeks w celu przyspieszenia wyszukiwania według pola user_namedb.getCollection("users").createIndex(new Document("user_name", 1));
No i działa 🙂
Cały plik jest dostępny w GitHub.
Co dalej?
- Na serio dodać to do aplikacji 🙂
- Zastanowić się nad użyciem Hibernate.
- Zastanowić się, jak przechowywać zdjęcia.
2 myśli nt. „Jak zacząć z MongoDB?”