Kompletny przewodnik MongoDB: Instalacja, funkcje i najlepsze praktyki na VPS
MongoDB jest jedną z najpotężniejszych i najszerzej przyjętych baz danych NoSQL na świecie — i to z dobrych powodów. Jego elastyczna, zorientowana na dokumenty architektura czyni go pierwszym wyborem dla deweloperów budujących nowoczesne, intensywnie korzystające z danych aplikacje, które muszą szybko się skalować. Niezależnie od tego, czy uruchamiasz startup MVP, czy zarządzasz infrastrukturą klasy enterprise, MongoDB połączone z wysokowydajnym środowiskiem hostingowym zapewnia szybkość, elastyczność i niezawodność, których wymagają Twoje aplikacje.
W tym kompleksowym przewodniku dowiesz się, czym jest MongoDB, dlaczego wyróżnia się na tle tradycyjnych relacyjnych baz danych, jak zainstalować go na Ubuntu i jak wykonywać niezbędne operacje za pomocą powłoki MongoDB.
Czym jest MongoDB i dlaczego powinieneś go używać?
MongoDB to otwarta, zorientowana na dokumenty baza danych NoSQL, która przechowuje dane w elastycznych, podobnych do JSON dokumentach zwanych BSON (Binary JSON). W przeciwieństwie do tradycyjnych relacyjnych baz danych, które opierają się na sztywnych strukturach tabela-wiersz-kolumna, MongoDB pozwala każdemu dokumentowi w kolekcji mieć własną unikalną strukturę. To czyni go wyjątkowo dobrze dostosowanym do aplikacji z ewoluującymi lub nieprzewidywalnymi modelami danych.
Kluczowe zalety MongoDB w stosunku do tradycyjnych baz SQL
| Funkcja | MongoDB (NoSQL) | Tradycyjne SQL |
|---|---|---|
| Model danych | Elastyczne dokumenty (BSON) | Stały schemat (tabele/wiersze) |
| Skalowalność | Pozioma (sharding) | Przede wszystkim pionowa |
| Zmiany schematu | Bez schematu, dynamiczne | Wymaga migracji |
| Język zapytań | Bogaty MQL + agregacja | SQL |
| Najlepsze dla | Dynamiczne, nieustrukturyzowane dane | Ustrukturyzowane, relacyjne dane |
| Wydajność w skali | Doskonała z shardingiem | Może się pogorszyć bez strojenia |
MongoDB jest idealna dla szerokiego zakresu przypadków użycia, w tym analityki w czasie rzeczywistym, systemów zarządzania treścią, platform e-commerce, pozyskiwania danych IoT, backendów mobilnych i każdej aplikacji, w której struktury danych mogą się zmieniać w czasie.
Dlaczego hostować MongoDB na VPS?
Hosting MongoDB na dedykowanym wirtualnym serwerze prywatnym daje Ci poziom kontroli, wydajności i bezpieczeństwa, którego środowiska współdzielone po prostu nie mogą zapewnić. Dzięki planowi VPS Hosting od AlexHost otrzymujesz:
- Pełny dostęp root do konfiguracji MongoDB dokładnie tak, jak wymaga tego Twoja aplikacja
- Dedykowane zasoby RAM i CPU do obsługi wymagających obciążeń odczytu/zapisu
- Izolowane środowisko eliminujące problem „hałaśliwego sąsiada” powszechny w hostingu współdzielonym
- Bezproblemową skalę pionową i poziomą w miarę wzrostu Twoich danych
- Niestandardowe reguły zapory i sieci do zablokowania dostępu do bazy danych
W przypadku aplikacji o wyjątkowo wysokich wymaganiach przepustowości, Serwery dedykowane AlexHost oferują wydajność bare-metal z pełną izolacją sprzętu — złoty standard dla produkcyjnych wdrożeń MongoDB.
Sekcja 1: Zrozumienie architektury MongoDB
Przed przystąpieniem do instalacji ważne jest zrozumienie, jak MongoDB organizuje i zarządza danymi.
Dokumenty
Fundamentalną jednostką danych w MongoDB jest dokument — obiekt podobny do JSON, który może zawierać zagnieżdżone pola, tablice i mieszane typy danych. Na przykład:
{
"_id": ObjectId("64b1f2c3e4b0a1d2e3f4a5b6"),
"name": "Alice",
"age": 30,
"email": "alice@example.com",
"address": {
"city": "New York",
"zip": "10001"
},
"tags": ["developer", "mongodb", "nodejs"]
}Kolekcje
Kolekcje grupują dokumenty, które są analogiczne do tabel w bazach danych SQL. Jednak w przeciwieństwie do tabel SQL, kolekcje nie wymuszają stałego schematu — dokumenty w tej samej kolekcji mogą mieć zupełnie różne pola.
Bazy danych
Serwer MongoDB może hostować wiele baz danych, każda zawierająca własny zestaw kolekcji. To ułatwia izolowanie danych dla różnych aplikacji lub środowisk (np. development, staging, production) na jednym serwerze.
Sekcja 2: Kluczowe funkcje MongoDB
2.1 Magazyn zorientowany na dokumenty
Model dokumentu MongoDB jest jedną z jego najpotężniejszych funkcji. Ponieważ każdy dokument może mieć inną strukturę, deweloperzy mogą organicznie rozwijać schemat bazy danych w miarę zmian wymagań aplikacji — bez uruchamiania złożonych migracji ALTER TABLE ani doświadczania przestojów.
Ta elastyczność jest szczególnie cenna w środowiskach agile development, gdzie wymagania często się zmieniają, lub w aplikacjach, które agregują dane z wielu heterogenicznych źródeł.
2.2 Skalowanie poziome dzięki shardingowi
Jedną z definiujących możliwości MongoDB jest natywne wsparcie dla skalowania poziomego poprzez sharding. Sharding rozprowadza dane na wielu serwerach (zwanych shardami), pozwalając MongoDB obsługiwać zestawy danych i poziomy przepustowości, które przytłoczyłyby pojedynczą maszynę.
Każdy shard przechowuje podzbiór całkowitych danych, a router mongos kieruje zapytania do odpowiedniego shardu (shardów) na podstawie konfigurowalnego klucza shardingu. Ta architektura umożliwia prawie liniową skalowalność w miarę wzrostu objętości danych i obciążenia zapytaniami.
W przypadku wysokotrafficznych środowisk produkcyjnych hosting MongoDB na Serwerach dedykowanych AlexHost zapewnia, że każdy shard ma dostęp do izolowanych, wysokowydajnych zasobów sprzętu.
2.3 Wysoka dostępność dzięki zestawom replik
MongoDB zapewnia wbudowaną tolerancję na uszkodzenia poprzez zestawy replik — grupy instancji MongoDB, które utrzymują identyczne kopie tych samych danych. Zestaw replik składa się z:
- Jednego węzła głównego, który otrzymuje wszystkie operacje zapisu
- Jednego lub więcej węzłów wtórnych, które replikują dane z węzła głównego
- Opcjonalnego arbitra, który uczestniczy w wyborach bez przechowywania danych
Jeśli węzeł główny ulegnie awarii, zestaw replik automatycznie wybiera nowy węzeł główny spośród dostępnych węzłów wtórnych, minimalizując przestoje i zapewniając trwałość danych.
2.4 Potężny język zapytań i framework agregacji
Język zapytań MongoDB (MQL) obsługuje bogaty zestaw operacji, w tym:
- Filtrowanie na poziomie pola z operatorami porównania, logiki i elementów
- Projekcja do zwracania tylko określonych pól
- Sortowanie i paginacja z
sort(),limit()iskip() - Wyszukiwanie tekstu z indeksami pełnotekstowymi
- Zapytania geoprzestrzenne dla aplikacji opartych na lokalizacji
Framework agregacji zapewnia podejście oparte na potoku do transformacji i analizy danych, obsługując operacje takie jak $match, $group, $sort, $project, $lookup (złączenia), $unwind i wiele innych — oferując funkcjonalność porównywalną do złożonych operacji SQL GROUP BY i JOIN.
2.5 Elastyczne indeksowanie
MongoDB obsługuje wiele typów indeksów w celu optymalizacji wydajności zapytań:
- Indeksy jednopolowe dla prostych zapytań
- Indeksy złożone dla zapytań wielopolowych
- Indeksy wielokluczowe dla pól tablicy
- Indeksy tekstowe dla wyszukiwania pełnotekstowego
- Indeksy geoprzestrzenne dla zapytań lokalizacyjnych
- Indeksy TTL dla automatycznego wygasania dokumentów (przydatne dla danych sesji lub dzienników)
Sekcja 3: Instalacja MongoDB na Ubuntu (krok po kroku)
Ta sekcja przeprowadzi Cię przez kompletną instalację MongoDB na Ubuntu 20.04 LTS (Focal Fossa). Te kroki są zoptymalizowane dla środowiska VPS AlexHost z dostępem root lub sudo.
Wymagania wstępne
- Serwer Ubuntu 20.04 LTS
- Konto użytkownika z uprawnieniami
sudo - Podstawowa znajomość wiersza poleceń Linux
Jeśli nie masz jeszcze serwera, możesz uruchomić w pełni skonfigurowany VPS Ubuntu w ciągu kilku minut dzięki VPS Hosting AlexHost.
Krok 1: Importuj publiczny klucz GPG MongoDB
Pakiety MongoDB są podpisane kluczem GPG w celu weryfikacji ich autentyczności. Zaimportuj klucz za pomocą następującego polecenia:
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -Powinieneś zobaczyć OK jako dane wyjściowe, potwierdzające, że klucz został pomyślnie zaimportowany.
Krok 2: Dodaj repozytorium MongoDB
Utwórz plik listy, aby dodać oficjalne repozytorium MongoDB do źródeł pakietów systemu:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list> Uwaga: To polecenie dodaje repozytorium MongoDB 6.0. Dostosuj numer wersji, jeśli potrzebujesz innego wydania.
Krok 3: Zaktualizuj bazę danych pakietów
Odśwież lokalny indeks pakietów, aby uwzględnić nowo dodane repozytorium MongoDB:
sudo apt updateKrok 4: Zainstaluj MongoDB
Zainstaluj najnowszą stabilną wersję MongoDB ze wszystkimi wymaganymi komponentami:
sudo apt install -y mongodb-orgTo instaluje następujące pakiety:
mongod— demon bazy danych MongoDBmongos— router shardingu MongoDBmongosh— powłoka MongoDB (nowoczesny zamiennik starszej powłokimongo)- Narzędzia i biblioteki MongoDB
Krok 5: Uruchom i włącz usługę MongoDB
Uruchom usługę MongoDB natychmiast:
sudo systemctl start mongodWłącz MongoDB, aby uruchamiał się automatycznie przy starcie systemu:
sudo systemctl enable mongodSprawdź, czy MongoDB działa prawidłowo:
sudo systemctl status mongodPowinieneś zobaczyć dane wyjściowe wskazujące, że usługa jest active (running). Jeśli MongoDB uruchomiło się pomyślnie, zobaczysz również linię potwierdzającą, że nasłuchuje na porcie 27017.
Krok 6: Zabezpiecz instalację MongoDB (zalecane)
Przed użyciem MongoDB w jakimkolwiek środowisku produkcyjnym lub dostępnym z Internetu, krytyczne jest włączenie uwierzytelniania. Domyślnie MongoDB nie wymaga nazwy użytkownika ani hasła.
Utwórz użytkownika administracyjnego:
mongoshWewnątrz powłoki MongoDB:
use admin
db.createUser({
user: "adminUser",
pwd: "YourStrongPasswordHere",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
})Włącz uwierzytelnianie poprzez edycję pliku konfiguracyjnego MongoDB:
sudo nano /etc/mongod.confZnajdź sekcję security i dodaj:
security:
authorization: enabledUruchom ponownie MongoDB, aby zastosować zmiany:
sudo systemctl restart mongodOd tego momentu wszystkie połączenia z MongoDB będą wymagać ważnych poświadczeń.
Sekcja 4: Używanie MongoDB — niezbędne polecenia i operacje
Po zainstalowaniu i zabezpieczeniu MongoDB, przeanalizujmy najważniejsze operacje, które będziesz używać na co dzień.
Krok 1: Uzyskaj dostęp do powłoki MongoDB
Połącz się z instancją MongoDB za pomocą nowoczesnej powłoki mongosh:
mongoshJeśli uwierzytelnianie jest włączone, połącz się z poświadczeniami:
mongosh -u adminUser -p YourStrongPasswordHere --authenticationDatabase adminKrok 2: Operacje na bazach danych
Wyświetl listę wszystkich baz danych:
show dbsUtwórz lub przełącz się na bazę danych:
use mydatabase> MongoDB automatycznie tworzy bazę danych podczas pierwszego wstawienia danych do niej.
Sprawdź aktualnie wybraną bazę danych:
dbUsuń bazę danych:
db.dropDatabase()Krok 3: Operacje na kolekcjach
Jawnie utwórz kolekcję:
db.createCollection("users")Wyświetl listę wszystkich kolekcji w bieżącej bazie danych:
show collectionsUsuń kolekcję:
db.users.drop()Krok 4: Operacje CRUD na dokumentach
#### Wstawianie dokumentów
Wstaw jeden dokument:
db.users.insertOne({
name: "Alice",
age: 30,
email: "alice@example.com",
role: "developer"
})Wstaw wiele dokumentów jednocześnie:
db.users.insertMany([
{ name: "Bob", age: 25, email: "bob@example.com", role: "designer" },
{ name: "Carol", age: 35, email: "carol@example.com", role: "manager" },
{ name: "Dave", age: 28, email: "dave@example.com", role: "developer" }
])#### Odczytywanie dokumentów
Znajdź wszystkie dokumenty w kolekcji:
db.users.find()Znajdź dokumenty z określonym warunkiem:
db.users.find({ role: "developer" })Znajdź dokumenty z wieloma warunkami:
db.users.find({ role: "developer", age: { $gte: 28 } })Zwróć tylko określone pola (projekcja):
db.users.find({ role: "developer" }, { name: 1, email: 1, _id: 0 })Znajdź jeden dokument:
db.users.findOne({ name: "Alice" })Sortuj wyniki:
db.users.find().sort({ age: 1 }) // Ascending
db.users.find().sort({ age: -1 }) // DescendingOgranicz i paginuj wyniki:
db.users.find().limit(10).skip(20) // Page 3 with 10 results per page#### Aktualizowanie dokumentów
Zaktualizuj jeden dokument:
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 31, role: "senior developer" } }
)Zaktualizuj wiele dokumentów:
db.users.updateMany(
{ role: "developer" },
{ $set: { department: "Engineering" } }
)Zwiększ pole numeryczne:
db.users.updateOne(
{ name: "Bob" },
{ $inc: { age: 1 } }
)#### Usuwanie dokumentów
Usuń jeden dokument:
db.users.deleteOne({ name: "Dave" })Usuń wiele dokumentów spełniających warunek:
db.users.deleteMany({ role: "designer" })Krok 5: Indeksowanie dla wydajności
Tworzenie indeksów na często wyszukiwanych polach dramatycznie poprawia wydajność zapytań.
Utwórz indeks jednopolowy:
db.users.createIndex({ email: 1 })Utwórz indeks złożony:
db.users.createIndex({ role: 1, age: -1 })Utwórz unikalny indeks:
db.users.createIndex({ email: 1 }, { unique: true })Wyświetl listę wszystkich indeksów w kolekcji:
db.users.getIndexes()Krok 6: Pipeline agregacji
Framework agregacji pozwala na wykonywanie złożonych analiz danych bezpośrednio w MongoDB.
Przykład: Policz użytkowników według roli i sortuj według liczby:
db.users.aggregate([
{ $group: { _id: "$role", count: { $sum: 1 } } },
{ $sort: { count: -1 } }
])Przykład: Filtruj, grupuj i oblicz średni wiek według roli:
db.users.aggregate([
{ $match: { department: "Engineering" } },
{ $group: { _id: "$role", avgAge: { $avg: "$age" }, total: { $sum: 1 } } },
{ $sort: { avgAge: 1 } }
])Sekcja 5: Konfiguracja MongoDB i strojenie wydajności
Konfigurowanie mongod.conf
Główny plik konfiguracyjny MongoDB znajduje się w /etc/mongod.conf. Kluczowe ustawienia do przejrzenia i optymalizacji:
# Network settings
net:
port: 27017
bindIp: 127.0.0.1 # Restrict to localhost for security; use server IP for remote access
# Storage settings
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 2 # Set to ~50% of available RAM
# Logging
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Security
security:
authorization: enabled
# Replication (for replica sets)
replication:
replSetName: "rs0"Najlepsze praktyki wydajności
- Przydziel wystarczającą ilość RAM — silnik magazynu WiredTiger MongoDB używa pamięci podręcznej w pamięci. Ustaw
cacheSizeGBna około 50% dostępnej pamięci RAM systemu. - Używaj odpowiednich indeksów — Analizuj wolne zapytania za pomocą
db.collection.explain("executionStats")i utwórz indeksy odpowiednio. - Monitoruj za pomocą MongoDB Atlas lub mongostat — Używaj narzędzi wiersza poleceń
mongostatimongotopdo monitorowania wydajności w czasie rzeczywistym. - Włącz journaling — Journaling jest domyślnie włączony i zapewnia odzyskiwanie po awarii; nie wyłączaj go w produkcji.
- Używaj puli połączeń — Skonfiguruj sterownik MongoDB aplikacji, aby używał puli połączeń w celu zmniejszenia narzutu połączeń.
- Regularnie kompaktuj kolekcje — Używaj
db.runCommand({ compact: "collectionName" })do odzyskania miejsca na dysku po dużych usunięciach.
Sekcja 6: Tworzenie kopii zapasowych i przywracanie MongoDB
Regularne kopie zapasowe są niezbędne dla każdej produkcyjnej bazy danych. MongoDB zapewnia wbudowane narzędzia do tego celu.
Utwórz kopię zapasową za pomocą mongodump
mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d)Przywróć z kopii zapasowej za pomocą mongorestore
mongorestore --uri="mongodb://adminUser:password@localhost:27017" /backup/mongodb/20240115/Zautomatyzuj kopie zapasowe za pomocą Cron
Dodaj zadanie cron, aby automatycznie uruchamiać codzienne kopie zapasowe:
sudo crontab -eDodaj następującą linię, aby uruchomić kopię zapasową codziennie o 2:00 AM:
0 2 * * * mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d) >> /var/log/mongodb-backup.log 2>&1Wybór odpowiedniego planu AlexHost dla MongoDB
Odpowiedni plan hostingowy zależy od skali, ruchu i wymagań dotyczących danych Twojej aplikacji:
| Przypadek użycia | Zalecany plan | Dlaczego |
|---|---|---|
| Development / Testowanie | VPS Hosting | Opłacalne, pełna kontrola, łatwa konfiguracja |
| Mała do średnia produkcja | VPS Hosting | Skalowalne zasoby, magazyn SSD, dostęp root |
| Wysoki ruch w produkcji | Serwery dedykowane | Wydajność bare-metal, brak współdzielenia zasobów |
| ML/AI z MongoDB |
