Performance MongoDB

Performance MongoDB
« kdy: 24. 06. 2022, 14:59:33 »
Ahoj,

dokázal by někdo poradit jak do MongoDB zapisovat 40k r/s. Zkoušel jsem jak shardovany cluster se zonami tak čistě replica sety a nemůžu z toho vytáhnout víc než 16k r/s při konfiguraci:
3x shard -16GB ram / 16 CPU
1x  mongose - 16GB ram / 16CPU
1x config db -  2GB / 4CPU

Dík za rady a náměty.
« Poslední změna: 24. 06. 2022, 15:01:07 od Jan Opravil »


CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #1 kdy: 24. 06. 2022, 15:30:18 »
Nejprve přece potřebuješ zjistit, na čem ti to vyhnívá ne?
Jaké je vytížení CPU, jak vypadá fronta požadavků na disku, jak moc komplikované jsou ty zápisy? .... Co ti říká profiler? (Nakopnu tě: db.setProfilingLevel(2))

Re:Performance MongoDB
« Odpověď #2 kdy: 24. 06. 2022, 23:13:37 »
řekl bych, že bude jednodušší to mongo prostě nepoužít a vzít vhodnější databázi.

Zvedni počet shardů, ale se shardery zase riskuješ, že příjdeš o data, s mongem prostě blbě řešitelné, má raději čtení než zápis.

CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #3 kdy: 25. 06. 2022, 08:56:26 »
řekl bych, že bude jednodušší to mongo prostě nepoužít a vzít vhodnější databázi.

Zas až tolik od toho nechce...
Vždycky to na něčem visí.
Kdyby měl jednojádro PIII/800MHz a 128 GB RAM, tak chceš použít něco, co potřebuje málo systémových prostředků.
Jenže teď mají i souborové servery 16/24core a 32 GB RAM, za pět let se budou prodávat souborové servery a 32/64core...

Odladit = 5 hodin
Přepsat na ?xx? = ?xx? hodin, otestovat ?xx? hodin, udržovat různé systémy ?xx? hodin, řešit problémy na systému, který neznám ?xx? hodin, licence ?xx? peněz, dohoda týmu ?xx? hodin....

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #4 kdy: 25. 06. 2022, 10:53:39 »
bude jednodušší to mongo prostě nepoužít a vzít vhodnější databázi
Tak. Postgres se svým JSONB je výrazně výkonnější než MongoDB. Pokud to nemusí být přímo JSON, tak výkonnějších NoSQL databází je hafo.


Re:Performance MongoDB
« Odpověď #5 kdy: 25. 06. 2022, 13:18:43 »
řekl bych, že bude jednodušší to mongo prostě nepoužít a vzít vhodnější databázi.

Zas až tolik od toho nechce...
Vždycky to na něčem visí.
Kdyby měl jednojádro PIII/800MHz a 128 GB RAM, tak chceš použít něco, co potřebuje málo systémových prostředků.
Jenže teď mají i souborové servery 16/24core a 32 GB RAM, za pět let se budou prodávat souborové servery a 32/64core...

Odladit = 5 hodin
Přepsat na ?xx? = ?xx? hodin, otestovat ?xx? hodin, udržovat různé systémy ?xx? hodin, řešit problémy na systému, který neznám ?xx? hodin, licence ?xx? peněz, dohoda týmu ?xx? hodin....

ne, mongo řeší nevhodně zápisy, 40k požadavků za vteřinu je skoro nereálné, můžeš to rozdělit na shardery, ale tím jsou spojené jiné problémy.

Takhle vysoký zápis na mongu lze docílit pouze přes bulk operace a sdružovat to třeba přes kafku.

Re:Performance MongoDB
« Odpověď #6 kdy: 25. 06. 2022, 15:36:15 »
Mam s Mongem podobnou zkusenost, pomohlo cpat data nejdriv do Kafky a z ni delat bulk writes - jak psal kolega prede mnou.

BTW: Jsou ty tvoje pomale zapisy modifikace stavajicich dokumentu, nebo ciste inserty? (append-only struktura dat je pro Mongo rozhodne lepsi)

CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #7 kdy: 25. 06. 2022, 22:12:09 »

Tazatel sem něco plácnul a od té doby nereaguje, což je škoda, protože bych se o tom jeho systému rád dozvěděl víc.
Obecně není požadavek jako požavek. Ideální by bylo, kdyby dokázal udělat jednoduchý generátor, docela rád bych to testnul a ozval se, kolik z toho Monga vytřískám. Jinak to tam sypu přes C# VM-VM

...mongo řeší nevhodně zápisy, 40k požadavků za vteřinu je skoro nereálné

Bez toho, aniž bych věděl, co to je za požadavky, těžko soudit - tězko zkusit - těžko věřit.
Při posledních testech výkonu jsem zkoušel 24k založení (poměrně jednoduchých objektů) jako limit, kdy to má odmítat další užíváky, aby se to nezhroutilo. Systém se nijak nepotil, rozhodně ne tak, abych o něj měl strach. ::)
Při čtení se u mě odehrávají všechny věci z RAMky, ale tady se bavíme asi o těch zápisech  ::)

Pokud se někdo hodně nutíde, napráskejte někdo jednoduchý generátor v pythonu a pošlete, kolik vám to udělá zápisů  ::)

oss

  • ***
  • 229
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #8 kdy: 26. 06. 2022, 13:58:53 »
Mongo je pomale a to je fakt, je pomalsie ako ostatne databazy.

(A to, ze je vhodne ak este neviete presne poziadavky je asi javetsie klamstvo o nom.)

Richlejsie bude asi aj Postgre alebo cokolvek.

Ja mam velmi dobre skunosti s IN MEMORY OLTP v MsSql 2017, na mojom sedem rokov slabom notebooku so 4GB RAM, 2 jardami a priemernym SSD to dalo 30K zapisov a updatov s persistenciou. Plus to ma realne transakcie.


CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #9 kdy: 26. 06. 2022, 14:51:38 »
Mongo je fakt pomalé, na datové kostky to není, ale těch 40k snad není až tolik :o

Re:Performance MongoDB
« Odpověď #10 kdy: 26. 06. 2022, 20:28:05 »
Mongo je fakt pomalé, na datové kostky to není, ale těch 40k snad není až tolik :o

mongo na zápis používá semafor pro každou kolekci/databázi, dát 40k rps je strašně moc, to máš 0,025ms na jeden zápis, to je přibližně o dva řády více než zvládne jedna instance mongodb. Takže, aby ti tohle cluster dal, potřebuješ asi 100 sharedů (nebo kolekcí) a rovnoměrný zápis mezi nimi, to je prostě strašně obtížné. Se shardy pak jsi na minovém poli a kličkuješ mezi nestabilitou, ztrátou dat a nepodporou řady funkcí.

V praxi to řešíme bufferem před mongem, který pak dělá bulk operace třeba jednou za vteřinu, pokud je ale ten bulk příliš velký, mongo to morálně neunese a má tam šílené latence (i ve vteřinách), nastavá read uncommit, stale indexes a jiné voloviny. Je to těžká databáze na provoz a doporučuji se jí vyhnout obloukem, je blbě navržená, má velice dobrý marketing, ale ve větším měřítku nefunguje vůbec dobře.

CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #11 kdy: 26. 06. 2022, 21:00:55 »

Bavíme se tu o prostém, prostě jednoduchém, vložení objektu do databáze?
O jak velkém objektu se bavíme? Můj je asi 4kB velký.

oss

  • ***
  • 229
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #12 kdy: 27. 06. 2022, 07:17:13 »
Mongo je fakt pomalé, na datové kostky to není, ale těch 40k snad není až tolik :o

mongo na zápis používá semafor pro každou kolekci/databázi, dát 40k rps je strašně moc, to máš 0,025ms na jeden zápis, to je přibližně o dva řády více než zvládne jedna instance mongodb. Takže, aby ti tohle cluster dal, potřebuješ asi 100 sharedů (nebo kolekcí) a rovnoměrný zápis mezi nimi, to je prostě strašně obtížné. Se shardy pak jsi na minovém poli a kličkuješ mezi nestabilitou, ztrátou dat a nepodporou řady funkcí.

V praxi to řešíme bufferem před mongem, který pak dělá bulk operace třeba jednou za vteřinu, pokud je ale ten bulk příliš velký, mongo to morálně neunese a má tam šílené latence (i ve vteřinách), nastavá read uncommit, stale indexes a jiné voloviny. Je to těžká databáze na provoz a doporučuji se jí vyhnout obloukem, je blbě navržená, má velice dobrý marketing, ale ve větším měřítku nefunguje vůbec dobře.


Tesat do kamena, mal som rovnake skunosti. Mam pocit, ze ludia pouzivaju Mongo len kvoli tomu, ze bol prvy znamy a je zadarmo. Inak si to vyvstlit neviem.

proste veci co deklaruju, ze maju, tak funguju len ked nema clovek cluster, no ked nema clovek cluster, tak kazda relacna databaza je richlejsia a funkcnejsia.

Ak chce tvorca temy robit s tymi datami nieco viac ako ich len ukladat tak odporucam MS SQL s IN Memory OLTP tabulkami a stored procedurov, ktora bude odlievat data do Colum Store Index, je to nieco co zvladne big data s prstom v nose.

Ak mu ide len o ukladanie dat, tak asi Cassandru ta ide paradne skalovat.

Re:Performance MongoDB
« Odpověď #13 kdy: 27. 06. 2022, 09:45:48 »
Ahoj,

tazatel dotaz neopustil ale ma taky soukromy zivot ne jen profesni.

Pouzivame funkci updateOne protoze je potrebe zaznamy bud ulozit a pokud uz podle klicovych parametru existuje tak aktualizovat. Dokument je sklada z 6 hodnot kdy 3 jsou string, 2 number a 1 boolean.

CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Performance MongoDB
« Odpověď #14 kdy: 27. 06. 2022, 18:03:54 »
Ahoj,

tazatel dotaz neopustil ale ma taky soukromy zivot ne jen profesni.

Zato my žijeme jen tím, abychom se starali o tvůj dotaz.... ::)