15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
01.11.2024
2 +1

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

FunkcjaMongoDB (NoSQL)Tradycyjne SQL
Model danychElastyczne dokumenty (BSON)Stały schemat (tabele/wiersze)
SkalowalnośćPozioma (sharding)Przede wszystkim pionowa
Zmiany schematuBez schematu, dynamiczneWymaga migracji
Język zapytańBogaty MQL + agregacjaSQL
Najlepsze dlaDynamiczne, nieustrukturyzowane daneUstrukturyzowane, relacyjne dane
Wydajność w skaliDoskonała z shardingiemMoż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() i skip()
  • 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 update

Krok 4: Zainstaluj MongoDB

Zainstaluj najnowszą stabilną wersję MongoDB ze wszystkimi wymaganymi komponentami:

sudo apt install -y mongodb-org

To instaluje następujące pakiety:

  • mongod — demon bazy danych MongoDB
  • mongos — router shardingu MongoDB
  • mongosh — powłoka MongoDB (nowoczesny zamiennik starszej powłoki mongo)
  • Narzędzia i biblioteki MongoDB

Krok 5: Uruchom i włącz usługę MongoDB

Uruchom usługę MongoDB natychmiast:

sudo systemctl start mongod

Włącz MongoDB, aby uruchamiał się automatycznie przy starcie systemu:

sudo systemctl enable mongod

Sprawdź, czy MongoDB działa prawidłowo:

sudo systemctl status mongod

Powinieneś 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:

mongosh

Wewną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.conf

Znajdź sekcję security i dodaj:

security:
  authorization: enabled

Uruchom ponownie MongoDB, aby zastosować zmiany:

sudo systemctl restart mongod

Od 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:

mongosh

Jeśli uwierzytelnianie jest włączone, połącz się z poświadczeniami:

mongosh -u adminUser -p YourStrongPasswordHere --authenticationDatabase admin

Krok 2: Operacje na bazach danych

Wyświetl listę wszystkich baz danych:

show dbs

Utwó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:

db

Usuń 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 collections

Usuń 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 })  // Descending

Ogranicz 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

  1. Przydziel wystarczającą ilość RAM — silnik magazynu WiredTiger MongoDB używa pamięci podręcznej w pamięci. Ustaw cacheSizeGB na około 50% dostępnej pamięci RAM systemu.
  2. Używaj odpowiednich indeksów — Analizuj wolne zapytania za pomocą db.collection.explain("executionStats") i utwórz indeksy odpowiednio.
  3. Monitoruj za pomocą MongoDB Atlas lub mongostat — Używaj narzędzi wiersza poleceń mongostat i mongotop do monitorowania wydajności w czasie rzeczywistym.
  4. Włącz journaling — Journaling jest domyślnie włączony i zapewnia odzyskiwanie po awarii; nie wyłączaj go w produkcji.
  5. Używaj puli połączeń — Skonfiguruj sterownik MongoDB aplikacji, aby używał puli połączeń w celu zmniejszenia narzutu połączeń.
  6. 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 -e

Dodaj 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>&1

Wybór odpowiedniego planu AlexHost dla MongoDB

Odpowiedni plan hostingowy zależy od skali, ruchu i wymagań dotyczących danych Twojej aplikacji:

Przypadek użyciaZalecany planDlaczego
Development / TestowanieVPS HostingOpłacalne, pełna kontrola, łatwa konfiguracja
Mała do średnia produkcjaVPS HostingSkalowalne zasoby, magazyn SSD, dostęp root
Wysoki ruch w produkcjiSerwery dedykowaneWydajność bare-metal, brak współdzielenia zasobów
ML/AI z MongoDB
15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij