katalog produktów w mongodb na przykładzie nokaut.pl
TRANSCRIPT
![Page 1: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/1.jpg)
Katalog produktów w MongoDB na przykładzie Nokaut.pl
Piotr DudaSenior Software Developer & Team Leader
![Page 2: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/2.jpg)
Co to jest Nokaut.pl?
![Page 3: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/3.jpg)
Katalog produktów
![Page 4: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/4.jpg)
Oferta a produkt
Produkt “X” (od 30 do 50 zł)
Oferta “X” sklepu 1 30 złOferta “X” sklepu 2 32 złOferta “X” sklepu 3 38 złOferta “X” sklepu 4 47 złOferta “X” sklepu 5 50 zł
![Page 5: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/5.jpg)
Proces przetwarzania danych
Katalog produktów
Oferty Pobieranie danych API
Nokaut.pl
Partner 1
Partner 2
Partner 3
Partner 4
Grupowanie
![Page 6: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/6.jpg)
Katalog produktów w liczbach● ilość kategorii ostatniego poziomu: 3 tys.,● ilość ofert: 17 mln,● ilość produktów: 12 mln,● ilość URL’i produktów 19 mln,● ilość zdjęć 105 mln,● wyrażenia regularne przekształcające dane: 330 tys.,● wyrażenia regularne do przenoszenia ofert w strukturze: 30 tys.,● liczba możliwych importów sklepu na dobę: 15 (co godzinę, między 7:00 a 21:00)
![Page 7: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/7.jpg)
Dlaczego MongoDB?
![Page 8: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/8.jpg)
Nokaut.pl w 2011● jeden import danych ze sklepów w ciągu dnia,● jeden sposób grupowania ofert w produkty,● przechowywanie tylko aktywnych produktów,● katalog w bazie danych MySQL (Master - Slave) problemy wydajnościowe:
○ Entity–attribute–value model,○ przy aktualizacji danych ,○ przy wykonywaniu DDL’i (ALTER TABLE ...)
![Page 9: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/9.jpg)
Nowy import danych - wymagania biznesowe● wiele importów w ciągu dnia,● przechowywanie historycznych produktów i ich adresów URL,● możliwość grupowania ofert różnymi algorytmami,● porządkowanie danych RegExp’ami,● udostępnienie danych przez API
![Page 10: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/10.jpg)
Alternatywy w 2011● Sharding w MySQL
○ brak wbudowanego rozwiązania - zewnętrzni dostawcy
● NoSQL○ CouchDB (1.0)
■ dostęp do danych REST’em po HTTP (JSON)○ Elastic (0.18)
■ wczesna faza rozwoju projektu, ■ słaba dokumentacja i wsparcie
○ MongoDB (2.0)■ dobre opinie o skalowalności,■ BSON,■ indeksy,■ obsługa RegExp’ów w zapytaniach,■ dokumentacja, społeczność
![Page 11: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/11.jpg)
MongoDB w Nokaut
![Page 12: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/12.jpg)
![Page 13: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/13.jpg)
KlastryGłówny klaster z sharding’em (Main):
● 5 shard’ów (set’ów)○ Primary (priority 10, votes 1),○ Secondary (priority 5, votes 1),○ Hidden Secondary (priority 0, votes 1),○ 2 x Arbiter (votes 1)
● 3 x Config Servers● 3 x Mongos (query router)
● Primary - WiredTiger (kompresja snappy), ● Secondary - MMAP,● Hidden Secondary - WiredTiger (kompresja zlib)
Klaster zdjęć (photorb):
● Primary (priority 1, votes 1),● Secondary (priority 0.5, votes 1),● Arbiter (votes 1)
WiredTiger (kompresja zlib)
![Page 14: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/14.jpg)
MMAP vs WiredTiger, photorb DB Storage
2014-05 2016-12
![Page 15: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/15.jpg)
MMAP vs WiredTiger, photorb Memory
2016-122014-05
![Page 16: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/16.jpg)
MMAP vs WiredTiger, Main DB Storage
2016-122012-05
![Page 17: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/17.jpg)
MMAP vs WiredTiger, Main Memory
2016-122012-05
![Page 18: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/18.jpg)
Dlaczego różne silniki w shard’zie?● Primary (WiredTiger, indeksy LSM) - obsługuje odczyty i zapisy systemów
przetwarzających dane, ● Secondary (MMAP, indeksy BTree) - obsługuje odczyty (głównie API)● Hidden Secondary (WiredTiger) - “gorący backup”
![Page 19: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/19.jpg)
Monitoring - Mongo Cloud Manager 1
![Page 20: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/20.jpg)
Monitoring - Mongo Cloud Manager 2
![Page 21: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/21.jpg)
Monitoring - Mongo Cloud Manager 3
![Page 22: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/22.jpg)
Alerty - Mongo Cloud Manager 1
![Page 23: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/23.jpg)
Alerty - Mongo Cloud Manager 2
![Page 24: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/24.jpg)
Alerty - Mongo Cloud Manager 3
![Page 25: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/25.jpg)
Backup● własny skrypt oparty o mongodump,● kompresja gzip,● 5 x 5G = 25G
![Page 26: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/26.jpg)
Backup Mongo Cloud Manager
24G * $2.5 * 4,2 = 252 zł (miesięcznie)
![Page 27: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/27.jpg)
GUI● Robomongo (Windows, Mac, Linux),● Mongo Compass (Windows, Mac) - wersja na Linux’a zapowiadana na
styczeń 2017
![Page 28: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/28.jpg)
Szukanie wolnych zapytań● włączone logowanie zapytań o czasie wykonania dłuższym niż 2 ms,● w poniedziałki na zebranych logach ze wszystkich serwerów startuje Dex,● UWAGA: Rekomendacje dedykowane dla MMAP’a
![Page 29: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/29.jpg)
Jak to działa? Ile z tego można wycisnąć?
![Page 30: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/30.jpg)
mongostat - spokojna praca
![Page 31: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/31.jpg)
mongostat - rusza slot importowy
![Page 32: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/32.jpg)
mongostat - slot importowy cd.
![Page 33: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/33.jpg)
Wydajność - uwagi
![Page 34: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/34.jpg)
1. Wybór silnika● MMAP (indeksy BTree)● WiredTiger (kompresja, indeksy LSM),● RocksDB (indeksy LSM),● TokuMXse (indeksy Fractal Tree)
![Page 35: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/35.jpg)
2.1. Sterownik (create) http://www.slideshare.net/mongodb/mongodb-europe-2016-star-in-a-reasonably-priced-car-which-driver-is-best/34
![Page 36: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/36.jpg)
2.2. Sterownik (read) http://www.slideshare.net/mongodb/mongodb-europe-2016-star-in-a-reasonably-priced-car-which-driver-is-best/35
![Page 37: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/37.jpg)
3. Sharding
● Dobry dobór klucza:○ sami tworzymy klucz + pre-splitting,○ integer, ObjectID -> Hashed indexes,
● “gorący shard”,● nie wszystkie funkcjonalności dostępne dla kolekcji z sharding’iem :(
![Page 38: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/38.jpg)
4. Indeksy● na starcie jeden indeks na klucz główny _id,● indeksy typu sparse i partial,● hint,● indexStats,● błąd "Btree::insert: key too large to index, failing"
![Page 39: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/39.jpg)
Ile to kosztuje?
![Page 40: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/40.jpg)
Mongo Atlas
![Page 41: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/41.jpg)
Mongo Atlas, koszty miesięczne (15 * 24 * 30 * 4.2) ● MMAP
○ M50 (32 GB / 160 GB) ~33 tys zł,○ M40 (16 GB / 80 GB) ~17 tys zł
● WiredTiger○ M30 (8 GB / 40 GB) ~9 tys zł,○ M20 (4 GB / 20 GB) ~3,2 tys zł
![Page 42: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/42.jpg)
Mongo Atlas Sharding :(
![Page 43: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/43.jpg)
Mongo Atlas M50 (~53 tys zł)
![Page 44: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/44.jpg)
Jakie są dobre i złe strony MongoDB● Storage Engines,● wydajna replikacja i sharding,● dostępne wiele typów indeksów,● dużo funkcjonalności,● szybki rozwój (popularność w USA),● dobra dokumentacja,● narzędzia
● MMAP - zużycie pamięci i dysku, konieczność odzyskiwania miejsca,
● skomplikowana architektura shardingu (nody z danymi, arbiter, config, mongos),
● ograniczona funkcjonalność kolekcji shardowanych,
● sortowanie z uwzględnieniem polskich znaków poprawione po 6 latach (SERVER-1920),
![Page 45: Katalog produktów w MongoDB na przykładzie Nokaut.pl](https://reader030.vdocuments.mx/reader030/viewer/2022020301/588928671a28ab77528b6837/html5/thumbnails/45.jpg)