Przewodnik po MongoDB
Wydajna i skalowalna baza
danych
MongoDB
jest wieloplatformowym, nierelacyjnym systemem do obsługi baz danych,
napisanym w języku C++. Nie przypomina ściśle ustrukturyzowanych
relacyjnych baz danych, zamiast tego korzysta z dokumentów w
formacie BSON. Ułatwia to bardziej naturalne przetwarzanie informacji w
aplikacjach, oczywiście przy zachowaniu możliwości tworzenia hierarchii
oraz indeksowania. W ten sposób cały system zyskuje na
wydajności, co jest szczególnie istotne przy przetwarzaniu
bardzo dużych zbiorów danych. MongoDB umożliwia stosowanie
elastycznych modeli danych, uzyskiwanie wysokiego poziomu dostępności i
poziome skalowanie.
Ten praktyczny przewodnik
jest przeznaczony dla użytkowników bazy MongoDB w wersji
4.2.
W
przystępny i konkretny sposób opisuje zalety stosowania
dokumentowych baz danych, równocześnie wskazuje zaawansowane
metody konfiguracji systemu oraz możliwe zastosowania w
różnych projektach. Książka zainteresuje zarówno
użytkowników i administratorów MongoDB, jak i
programistów tworzących złożone aplikacje. Przedstawia
kwestie tworzenia zapytań, indeksów, agregacji, transakcji,
zbiorów replik, zarządzania systemem, shardingu i
administrowania danymi, trwałości danych, monitorowania systemu oraz
jego zabezpieczenia. Znalazło się tu także wprowadzenie do pracy z
MongoDB, omówiono też zasady pracy z klastrem
shardów oraz administrowania aplikacją i serwerem bazy
MongoDB.
W książce między innymi:
- ogólne zasady
pracy z MongoDB
- operacje zapisu i
wyszukiwania oraz tworzenie złożonych zapytań
- indeksy w kolekcjach,
agregowanie danych i transakcje
- lokalny zbiór
replik i korzystanie z replikacji
- konfiguracja
elementów klastra
- monitorowanie systemu,
kopie bezpieczeństwa i odtwarzanie bazy MongoDB
Przedmowa
15
CZĘŚĆ I.
WPROWADZENIE
DO MONGODB 19
1.
Wprowadzenie
21
Łatwość użycia 21
Skalowanie 21
Bogactwo funkcji... 23
...bez ograniczania prędkości 23
Filozofia 24
2.
Zaczynamy
25
Dokumenty 25
Kolekcje 26
Dynamiczne schematy 26
Nazewnictwo 27
Bazy danych 28
Pobieranie i uruchamianie MongoDB 29
Wprowadzenie do powłoki MongoDB 30
Uruchamianie powłoki 31
Klient MongoDB 31
Podstawowe operacje w powłoce 32
Typy danych 34
Proste typy danych 34
Daty 36
Tablice 37
Zagnieżdżone dokumenty 37
Klucz _id i typ ObjectId 38
Używanie powłoki MongoDB 40
Porady przy używaniu powłoki 40
Uruchamianie skryptów w powłoce 41
Tworzenie pliku .mongorc.js 43
Dostosowywanie znaku zachęty 44
Edytowanie złożonych zmiennych 45
Niewygodne nazwy kolekcji 45
3.
Tworzenie, aktualizowanie i usuwanie dokumentów
47
Wstawianie dokumentów 47
Metoda insertMany 47
Sprawdzanie poprawności wstawiania 50
Metoda insert 50
Usuwanie dokumentów 51
Metoda drop 52
Aktualizowanie dokumentów 52
Zastępowanie dokumentów 53
Używanie operatorów aktualizacji 54
Operacje typu upsert 64
Aktualizowanie wielu dokumentów 66
Zwracanie zaktualizowanych dokumentów 67
4.
Zapytania
71
Metoda find 71
Wybieranie zwracanych kluczy 72
Ograniczenia 72
Kryteria zapytania 73
Zapytania warunkowe 73
Zapytania LUB 74
Operator $not 75
Zapytania związane z różnymi typami 75
Typ null 75
Wyrażenia regularne 76
Zapytania dotyczące tablic 77
Zapytania do dokumentów zagnieżdżonych 81
Zapytania $where 83
Kursory 84
Limity, pominięcia i sortowanie 85
Unikanie pomijania dużej liczby dokumentów 87
Nieśmiertelne kursory 89
CZĘŚĆ II.
PROJEKTOWANIE APLIKACJI
91
5.
Indeksy
93
Wprowadzenie do indeksów 93
Tworzenie indeksu 95
Wprowadzenie do indeksów złożonych 98
W jaki sposób MongoDB wybiera indeks? 102
Używanie indeksów złożonych 103
W jaki sposób operatory $ korzystają z indeksów?
120
Indeksowanie obiektów i tablic 130
Liczność indeksu 132
Dane z polecenia explain 132
Kiedy nie używać indeksu? 140
Rodzaje indeksów 141
Indeksy unikalne 141
Indeksy częściowe 143
Administrowanie indeksem 144
Identyfikowanie indeksów 145
Zmienianie indeksów 146
6.
Specjalne
typy indeksów i kolekcji 147
Indeksy geoprzestrzenne 147
Rodzaje zapytań geoprzestrzennych 148
Używanie indeksów geoprzestrzennych 149
Złożone indeksy geoprzestrzenne 157
Indeksy 2d 157
Indeksy wyszukiwania pełnotekstowego 159
Tworzenie indeksu tekstowego 160
Wyszukiwanie tekstowe 161
Optymalizowanie wyszukiwania pełnotekstowego 163
Wyszukiwanie w innych językach 164
Kolekcje ograniczone 164
Tworzenie kolekcji ograniczonych 166
Wieczne kursory 167
Indeksy o ograniczonym czasie życia 167
Przechowywanie plików za pomocą GridFS 168
Zaczynamy pracę z GridFS - mongofiles 168
Praca z GridFS w sterownikach MongoDB 169
Pod maską 170
7.
Wprowadzenie
do frameworka agregacji 173
Potoki, etapy i regulatory 173
Praca z etapami - typowe operacje 175
Wyrażenia 179
Etap typu $project 180
Etap typu $unwind 185
Wyrażenia tablicowe 192
Akumulatory 196
Używanie akumulatorów w etapie projekcji 197
Wprowadzenie do grupowania 198
Pole _id w etapie grupowania 202
Etap grupowania i etap projekcji 205
Zapisywanie wyników potoku agregacji do kolekcji 208
8.
Transakcje
209
Wprowadzenie do transakcji 209
Definicja standardu ACID 209
Jak używać transakcji? 210
Dostosowywanie limitów transakcji w swojej aplikacji 214
Ograniczenia czasowe i limity wielkości protokołu 215
9.
Projektowanie aplikacji 217
Projektowanie schematu danych 217
Wzorce projektowe schematów 218
Normalizacja i denormalizacja 221
Przykłady reprezentacji danych 222
Kardynalność 226
Znajomi, obserwujący i inne nieprzyjemności 226
Optymalizowanie manipulacji na danych 229
Usuwanie starych danych 229
Planowanie baz danych i kolekcji 230
Spójność danych 231
Migrowanie schematów 232
Zarządzanie schematami 233
Kiedy nie używać MongoDB? 233
CZĘŚĆ III.
REPLIKACJA
235
10.
Konfigurowanie
zbioru replik 237
Wprowadzenie do replikacji 237
Konfigurowanie zbioru replik, część 1. 238
Przemyślenia na temat sieci 239
Przemyślenia na temat bezpieczeństwa 239
Konfigurowanie zbioru replik, część 2. 240
Kontrolowanie replikacji 243
Modyfikowanie konfiguracji zbioru replik 248
Jak zaprojektować zbiór? 250
Jak działa wybieranie serwera podstawowego? 252
Opcje konfiguracji elementów zbioru replik 253
Priorytet 254
Ukrywanie serwerów 254
Arbiter wyborów 255
Tworzenie indeksów 257
11.
Komponenty
zbioru replik 259
Synchronizacja 259
Synchronizacja początkowa 261
Replikacja 263
Jak radzić sobie z przestarzałymi danymi? 263
Żądania heartbeat 263
Stany elementów zbioru 264
Wybory 265
Cofanie zmian 266
Gdy cofanie operacji się nie powiedzie 269
12.
Łączenie
aplikacji ze zbiorem replik
271
Zachowania związane z łączeniem klienta ze zbiorem replik 271
Oczekiwanie na replikację operacji zapisu 273
Pozostałe wartości klucza "w" 275
Definiowanie gwarancji dla replikacji 275
Gwarantowany jeden serwer na centrum danych 275
Gwarancja większości nieukrytych serwerów 277
Tworzenie innych gwarancji 277
Wysyłanie żądań odczytu do serwerów wtórnych 278
Problemy ze spójnością danych 278
Problemy z obciążeniem serwerów 279
Kiedy warto korzystać z serwerów wtórnych do
odczytywania danych 280
13.
Administracja
283
Uruchamianie serwerów w trybie samodzielnym 283
Konfiguracja zbioru replik 284
Tworzenie zbioru replik 284
Zmienianie serwerów w zbiorze 285
Tworzenie większych zbiorów 285
Wymuszanie rekonfiguracji 286
Manipulowanie stanem serwera 286
Przekształcanie serwera podstawowego we wtórny 287
Zapobieganie wyborom 287
Monitorowanie replikacji 287
Odczytywanie statusu 288
Wizualizacja grafu replikacji 291
Pętle replikacji 292
Wyłączanie chainingu 292
Wyliczanie opóźnień 293
Zmiana wielkości protokołu operacji 294
Tworzenie indeksów 295
Replikacja budżetowa 296
CZĘŚĆ IV.
SHARDING
299
14.
Wprowadzenie
do shardingu 301
Czym jest sharding? 301
Komponenty klastra 302
Sharding w klastrze jednoserwerowym 303
15.
Konfigurowanie
shardingu 313
Kiedy stosować sharding? 313
Uruchamianie serwerów 314
Serwery konfiguracji 314
Procesy mongos 315
Tworzenie sharda ze zbioru replik 316
Zwiększanie pojemności 319
Dzielenie danych 320
W jaki sposób MongoDB kontroluje dane klastra? 320
Zakresy kawałków 321
Dzielenie kawałków 323
Równoważenie obciążeń 325
Zestawienia 326
Strumienie zmian 326
16.
Wybieranie
klucza shardingu 329
Mierzenie sposobu używania kolekcji 329
Rozrysowywanie rozdziału danych 330
Rosnące klucze shardingu 330
Klucze shardingu o losowym rozkładzie 333
Klucze shardingu zależne od lokalizacji 335
Strategie kluczy shardingu 336
Haszowany klucz shardingu 336
Haszowane klucze shardingu dla systemu GridFS 338
Strategia węża strażackiego 338
Hotspoty 339
Reguły i wskazówki dotyczące kluczy shardingu 341
Ograniczenia kluczy shardingu 341
Kardynalność kluczy shardingu 343
Kontrolowanie rozdziału danych 343
Używanie klastra z wieloma bazami danych i kolekcjami 343
Sharding manualny 345
17.
Administrowanie
shardingiem 347
Sprawdzanie aktualnego stanu 347
Przeglądanie podsumowania za pomocą metody sh.status() 347
Przeglądanie informacji o konfiguracji 349
Kontrolowanie połączeń sieciowych 355
Pobieranie statystyk dotyczących połączeń 355
Ograniczanie liczby połączeń 362
Administrowanie serwerem 363
Dodawanie serwerów 363
Zmienianie serwerów w shardzie 363
Usuwanie sharda 364
Równoważenie danych 367
Proces równoważący 367
Zmiana wielkości kawałka 368
Przenoszenie kawałków 369
Wielkie kawałki 371
Odświeżanie konfiguracji 374
CZĘŚĆ V.
ADMINISTROWANIE APLIKACJĄ 375
18.
Kontrolowanie
działania aplikacji 377
Przeglądanie aktualnych operacji 377
Wyszukiwanie problematycznych operacji 380
Zatrzymywanie operacji 380
Fałszywe alarmy 381
Zapobieganie powstawaniu fantomowych operacji 381
Używanie profilera systemowego 382
Wyliczanie wielkości 385
Dokumenty 385
Kolekcje 386
Bazy danych 390
Używanie narzędzi mongotop i mongostat 391
19.
Wprowadzenie
do bezpieczeństwa MongoDB 395
Uwierzytelnianie i autoryzacja 395
Mechanizmy uwierzytelniania 395
Autoryzacja 396
Stosowanie certyfikatów X.509 do uwierzytelniania
serwerów i klientów 398
Samouczek uwierzytelniania i szyfrowania komunikacji w MongoDB 400
Tworzenie centrum certyfikacji 400
Generowanie i podpisywanie certyfikatów serwerów
405
Generowanie i podpisywanie certyfikatów klientów
406
Uruchamianie zbioru replik bez włączonego uwierzytelniania i
autoryzacji 406
Tworzenie użytkownika administracyjnego 407
Ponowne uruchomienie zbioru replik z włączonym uwierzytelnianiem i
autoryzacją 408
20.
Trwałość
danych 411
Trwałość danych na poziomie serwera dzięki mechanizmowi księgowania 411
Trwałość danych na poziomie klastra dzięki opcjom "write concern" 413
Opcje "w" i "wtimeout" 413
Używanie opcji "j" w dokumencie writeConcern 414
Trwałość danych na poziomie klastra dzięki opcjom "read concern" 415
Trwałość danych w transakcjach dzięki opcjom "write concern" 415
Czego MongoDB nie gwarantuje? 416
Poszukiwanie uszkodzeń danych 417
CZĘŚĆ VI.
ADMINISTROWANIE SERWEREM 419
21.
Konfigurowanie
MongoDB w środowisku produkcyjnym 421
Uruchamianie z wiersza poleceń 421
Konfiguracja zapisana w pliku 425
Zatrzymywanie serwera MongoDB 426
Bezpieczeństwo 426
Szyfrowanie danych 427
Połączenia SSL 428
Protokołowanie 428
22.
Monitorowanie
MongoDB 431
Monitorowanie wykorzystania pamięci 431
Wprowadzenie do pamięci komputerów 431
Kontrolowanie wykorzystania pamięci 432
Kontrolowanie liczby błędów stron 433
Parametr I/O wait 435
Wyliczanie wielkości zbioru roboczego 435
Kilka przykładów zbiorów roboczych 437
Kontrolowanie wydajności 437
Kontrolowanie wolnej przestrzeni na dysku 439
Monitorowanie procesu replikacji 439
23.
Tworzenie kopii zapasowych 443
Metody tworzenia kopii zapasowych 443
Tworzenie kopii zapasowej serwera 444
Migawka systemu plików 444
Kopiowanie plików z danymi 447
Używanie narzędzia mongodump 449
Szczególny przypadek kopii zapasowej zbioru replik 451
Szczególny przypadek kopii zapasowej klastra
shardów 452
Tworzenie kopii zapasowej całego klastra i jej odtwarzanie 453
Tworzenie kopii zapasowej pojedynczego sharda i jej odtwarzanie 453
24.
Wdrożenia MongoDB 455
Projektowanie systemu 455
Wybieranie nośników danych 455
Zalecane konfiguracje macierzy RAID 456
Procesor 457
System operacyjny 457
Przestrzeń wymiany 458
System plików 458
Wirtualizacja 459
Nadmierne używanie pamięci 459
Tajemnicza pamięć 459
Problemy z dyskami sieciowymi 459
Używanie dysków niesieciowych 461
Konfigurowanie ustawień systemowych 461
Wyłączanie opcji NUMA 461
Opcja readahead 463
Wyłączanie opcji THP 464
Wybieranie algorytmu planisty dysku 465
Wyłączanie śledzenia czasu dostępu 465
Modyfikowanie limitów 466
Konfigurowanie sieci 467
Porządkowanie systemu 469
Synchronizowanie zegarów 469
Proces OOM killer 469
Wyłączanie zadań okresowych 470
A.
Instalowanie MongoDB 471
Wybieranie wersji 471
Instalowanie w systemie Windows 472
Instalowanie jako usługa 473
Instalowanie w systemach POSIX (Linux i Mac OS X) 473
Instalowanie za pomocą menedżera pakietów 474
B.
Wewnętrzne
elementy MongoDB 475
BSON 475
Protokół komunikacji 476
Pliki danych 476
Przestrzenie nazw 478
Mechanizm zapisywania danych WiredTiger 478
480
stron, Format: 17.0x23.0cm, oprawa miękka