ugrás a tartalomhoz

PostgreSQL vs MongoDB

mind1 valami név · 2021. Ápr. 29. (Cs), 15.55
A Pató Pál projekt esetleges átalakítása kapcsán vetődött fel bennem a kérdés: most a text mellett postgresql-be tolom a logokat, partícionált táblába. Mivel update nincs az adatokon, az input is megfelel egy rdbms-ben tárolható struktúranak (azonosítók, időpontok, és egy szabadon kitölthető szövegmező), hátrányát eddig nem láttam a postgresql-nek, előnyét igen.
Viszont eddig csak tároltam a logokat, most esnék neki újra a webes felületnek, benne keresésekkel.
2-2.5 millió soron már nem túl gyors. (Nem vészes, de 4-5mp/lekérdezés)
Betöltve mongo-ba, látszólag sokkal gyorsabb a keresés. Legalábbis az első pár rekordig.
Gondolom, a teljes keresés azért ennyire nem lenne gyors, de ezt csak egy .count() segítségével tudtam megnézni, az meg gyanítom, valami cache-ből dobta vissza azonnal, hogy adott feltételre hány találat volt.
(Select count(*) from syslog where message like '% DPT=22 %'; vs db.syslog.find({"message": /.* DPT=22 .*/}))

Kérdés: tud valaki jó indokot az adatbázis cseréjére? Azon túl, hogy az rdbms nem erre van kitalálva.

Postgresql mellett szól, hogy sql-ben nem vagyok teljesen kezdő, ha parancssorból akarok matatni az adatokon, egy selectet egyszerűbb begépelni, mint egy mongo lekérdezést, egy join egyszerűen leírható két tábla közt, olvasható is, míg mongo-ban a $lookup a millió egymásba ágyazott json adattal... Másnak lehet, hogy könnyű olvasmány, nekem kifolyik a szemem a sok {} párostól :)
Mongot viszont egyszerűbbnek tűnik elérni pythonból.

Milyen szakmai érv lenne a mongo mellett?
Mi az, amiben a mongo jobb lehet?
 
1

Azt hiszem, tárgytalan

mind1 valami név · 2021. Ápr. 29. (Cs), 16.50
Összekaparva a maradék emlékeimet, pythonból kipróbáltam és a mongodb egy nagyságrenddel lassúbb az első keresésnél. (ismétlésnél villámgyors, de elsődlegesen nem cache-ből működne)

Viszont az is igaz, hogy a postgres tud "... like ..."-t, a pymongo úgy fest, csak regex keresésre képes:

MongoDB cli:
speedtest.syslog.find({"message":/.* DPT=22 .*/})

Pymongo:
speedtest.syslog.find({"message": {"$regex":".* DPT=22 .*"}})

Elég jelentős különbség van ezek közt is, ha az így visszaadott sorok számát kérem. De ugye ez regex, nem sima like.
Ha találnék a like-nak megfelelőt a pymongo-ban, akkor lenne értelme tovább rágódni a dolgon, így nem nagyon.