46
Katalog produktów w MongoDB na przykładzie Nokaut.pl Piotr Duda Senior Software Developer & Team Leader

Katalog produktów w MongoDB na przykładzie Nokaut.pl

Embed Size (px)

Citation preview

Page 1: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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

Co to jest Nokaut.pl?

Page 3: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Katalog produktów

Page 4: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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

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

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

Dlaczego MongoDB?

Page 8: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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

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

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

MongoDB w Nokaut

Page 12: Katalog produktów w MongoDB na przykładzie Nokaut.pl
Page 13: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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

MMAP vs WiredTiger, photorb DB Storage

2014-05 2016-12

Page 15: Katalog produktów w MongoDB na przykładzie Nokaut.pl

MMAP vs WiredTiger, photorb Memory

2016-122014-05

Page 16: Katalog produktów w MongoDB na przykładzie Nokaut.pl

MMAP vs WiredTiger, Main DB Storage

2016-122012-05

Page 17: Katalog produktów w MongoDB na przykładzie Nokaut.pl

MMAP vs WiredTiger, Main Memory

2016-122012-05

Page 18: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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

Monitoring - Mongo Cloud Manager 1

Page 20: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Monitoring - Mongo Cloud Manager 2

Page 21: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Monitoring - Mongo Cloud Manager 3

Page 22: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Alerty - Mongo Cloud Manager 1

Page 23: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Alerty - Mongo Cloud Manager 2

Page 24: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Alerty - Mongo Cloud Manager 3

Page 25: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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

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

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

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

Jak to działa? Ile z tego można wycisnąć?

Page 30: Katalog produktów w MongoDB na przykładzie Nokaut.pl

mongostat - spokojna praca

Page 31: Katalog produktów w MongoDB na przykładzie Nokaut.pl

mongostat - rusza slot importowy

Page 32: Katalog produktów w MongoDB na przykładzie Nokaut.pl

mongostat - slot importowy cd.

Page 33: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Wydajność - uwagi

Page 34: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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

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

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

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

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

Ile to kosztuje?

Page 40: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Mongo Atlas

Page 41: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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

Mongo Atlas Sharding :(

Page 43: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Mongo Atlas M50 (~53 tys zł)

Page 44: Katalog produktów w MongoDB na przykładzie Nokaut.pl

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
Page 46: Katalog produktów w MongoDB na przykładzie Nokaut.pl

Pytania?

[email protected]