Nyligen fick jag veta att (det sÀgs bero pÄ Àndringar i licensen). Detta fick mig att fundera pÄ att under de senaste Ären har jag sett massor av artiklar om hur fruktansvÀrt MongoDB Àr och att ingen nÄgonsin borde anvÀnda det. Men under denna tid har MongoDB blivit en mycket mer mogen produkt. Vad har hÀnt? Förklaras all denna hat verkligen av felen i början av marknadsföringen av den nya databashanteraren? Eller anvÀnder folk bara MongoDB pÄ fel platser?
Om du plötsligt tycker att jag försvarar MongoDB, vÀnligen lÀs i slutet av artikeln.
En ny trend
Jag har arbetat inom mjukvaruindustrin lÀngre Àn vad som Àr passande att nÀmna, men ÀndÄ har jag bara upplevt en liten del av de trender som har pÄverkat vÄr bransch. Jag har bevittnat tillvÀxten av 4GL, AOP, Agile, SOA, Web 2.0, AJAX, blockchain... listan Àr oÀndlig. Varje Är dyker nya tendenser upp. Vissa falnar snabbt, medan andra radikalt förÀndrar sÀttet att utveckla programvara.
Runt varje ny trend skapas det en slags allmĂ€n upphetsning: folk hoppar antingen sjĂ€lva pĂ„ tĂ„get, eller sĂ„ ser de det vĂ€sen som skapas av andra - och följer strömmen. Denna process kodifierades av Gartner i . Ăven om den Ă€r kontroversiell, beskriver denna graf ganska bra vad som hĂ€nder med teknologier innan de till slut blir anvĂ€ndbara.
Men dÄ och dÄ dyker en (eller en andra kommande, som i det hÀr fallet) ny innovation upp, drivet av en enda specifik implementering. NÀr det gÀller NoSQL var hypen starkt prÀglad av framvÀxten och den snabba uppgÄngen av MongoDB. Det var inte MongoDB som satte igÄng denna trend: i sjÀlva verket började stora internetföretag fÄ problem med att hantera stora datavolymer, vilket ledde till att icke-relationsdatabaser kom tillbaka. Den allmÀnna rörelsen startade med projekt som Bigtable frÄn Google och Cassandra frÄn Facebook, men det var MongoDB som blev den mest kÀnda och tillgÀngliga NoSQL-databasen, till vilken de flesta utvecklare hade tillgÄng.
Notera: Du kanske tror att jag blandar dokumentdatabaser med kolumndatabaser, nyckel-vÀrde-lager eller nÄgot av de mÄnga andra typerna av datalager som faller under den gemensamma termen NoSQL. Och du har rÀtt. Men vid den tiden rÄdde kaos. Alla var besatta av NoSQL, det blev fullstÀndigt det Àr nödvÀndigt, Àven om mÄnga inte mÀrkte nÄgra skillnader mellan de olika teknologierna. För mÄnga blev MongoDB synonymt med NoSQL.
Och utvecklare kastade sig över det. Idén om en schemalös databas som magiskt kan skalas för att lösa vilket problem som helst var ganska lockande. Runt 2014 verkade det som om överallt dÀr det för ett Är sedan anvÀndes en relationsdatabas som MySQL, Postgres eller SQL Server, sÄ började man implementera MongoDB-databaser. PÄ frÄgan varför kunde du fÄ svar som strÀckte sig frÄn den banala "det handlar om webbs skala" till det mer genomtÀnkta "mina data Àr vÀldigt dÄligt strukturerade och passar bra i en schemalös databas".
Det Àr viktigt att komma ihÄg att MongoDB och dokumentdatabaser i allmÀnhet löser ett antal problem med traditionella relationsdatabaser:
- Strikt schema: i en relationsdatabas, om du har dynamiskt genererade data, tvingas du antingen skapa en massa slumpmÀssiga "olika" datakolumner, trycka in blobbar av data eller anvÀnda en konfiguration ⊠allt detta har betydande nackdelar.
- SvÄrighet att skala: om det finns sÄ mycket data att den inte fÄr plats pÄ en server, erbjöd MongoDB mekanismer för att skala den över flera maskiner.
- Komplexa schemaÀndringar: inga migrationer! I en relationsdatabas kan förÀndringar i databasens struktur bli ett stort problem (sÀrskilt nÀr datamÀngden vÀxer mycket). MongoDB lyckades förenkla processen avsevÀrt. Och gjorde den sÄ enkel att du bara kan uppdatera schemat pÄ sprÄng och snabbt gÄ vidare.
- Skrivprestanda: MongoDB:s prestanda var bra, sĂ€rskilt med rĂ€tt instĂ€llningar. Ăven MongoDB-konfigurationen ur lĂ„dan, som ofta kritiserades, visade upp en del imponerande prestandasiffror.
All risk ligger pÄ dig
De potentiella fördelarna med MongoDB var enorma, sÀrskilt för vissa typer av problem. Om du lÀser listan ovan utan att förstÄ kontexten och utan erfarenhet kan det ge intryck av att MongoDB verkligen Àr en revolutionerande databashanterare. Det enda problemet var att de fördelar som nÀmndes ovan Ätföljdes av ett antal förbehÄll, varav nÄgra anges nedan.
För rÀttvisans skull, ingen pÄ 10gen/MongoDB Inc. skulle sÀga att det som nÀmns nedan Àr osant, det Àr bara kompromisser.
- Förlust av transaktioner: transaktioner Àr en grundlÀggande funktion i mÄnga relationella databaser (inte alla, men de flesta). Transaktionalitet innebÀr att du kan utföra flera operationer atomÀrt och kan garantera att data förblir konsekventa. Naturligtvis kan transaktionalitet i en NoSQL-databas vara inom ett enda dokument, eller sÄ kan du anvÀnda tvÄfas-bekrÀftelser för att fÄ transaktionell semantik. Men du mÄste implementera denna funktionalitet sjÀlv... vilket kan vara en komplicerad och tidskrÀvande uppgift. Ofta inser du inte problemen förrÀn du ser att data i databasen hamnar i ogiltiga tillstÄnd, eftersom det Àr omöjligt att garantera atomaritet av operationer. Notera: mÄnga har sagt till mig att transaktioner kom till MongoDB 4.0 förra Äret, men med ett antal begrÀnsningar. Slutsatsen frÄn artikeln förblir densamma: utvÀrdera hur vÀl teknologin passar dina behov.
- Förlust av relationell integritet (externa nycklar): om dina data har relationer, mÄste du tillÀmpa dem i applikationen. Att ha en databas som upprÀtthÄller dessa relationer tar bort en betydande del av arbetet frÄn applikationen och dÀrmed frÄn dina programmerare.
- Brist pÄ möjlighet att tillÀmpa databasstruktur: strikta scheman kan ibland vara ett stort problem, men de Àr ocksÄ en kraftfull mekanism för att strukturera data pÄ ett bra sÀtt, om de anvÀnds klokt. Dokumentbaserade databaser, sÄsom MongoDB, erbjuder otrolig schemaflexibilitet, men denna flexibilitet lÀgger ansvaret pÄ att hÄlla data rena. Om du inte ser efter dem, sÄ kommer det i slutÀndan att krÀvas mycket kod i applikationen för att hantera data som lagras i former som inte Àr vad du förvÀntar dig. Som det ofta sÀgs pÄ vÄrt företag Simple Thread... applikationen kommer nÄgon gÄng att skrivas om, men data kommer att leva för evigt. Obs: MongoDB stödjer schemakontroll: det Àr anvÀndbart, men ger inte samma garantier som en relationsdatabas. För det första pÄverkar tillÀgg eller Àndring av schemakontroll inte befintliga data i samlingen. Du mÄste sjÀlv sÀkerstÀlla att du uppdaterar data i enlighet med det nya schemat. Avgör sjÀlv om detta Àr tillrÀckligt för dina behov.
- Eget frÄgesprÄk / förlorad verktygsekosystem: introduktionen av SQL var en absolut revolution, och sedan dess har ingenting förÀndrats. Det Àr ett otroligt kraftfullt sprÄk, men ocksÄ ganska komplext. Behovet av att konstruera frÄgor till databasen pÄ ett nytt sprÄk bestÄende av JSON-fragment ses som ett stort steg tillbaka av dem med erfarenhet av SQL. Det finns ett helt universum av verktyg som interagerar med SQL-databaser: frÄn IDE:er till rapporteringsverktyg. Att byta till en databas som inte stöder SQL betyder att du inte kan anvÀnda de flesta av dessa verktyg eller att du mÄste översÀtta data till SQL för att kunna anvÀnda dem, vilket kan vara svÄrare Àn du tror.
MÄnga utvecklare som vÀnde sig till MongoDB förstod inte riktigt kompromisserna, och ofta hoppade de huvudet först in i att installera den som sitt primÀra datalager. EfterÄt var det ofta otroligt svÄrt att gÄ tillbaka.
Vad kunde ha gjorts annorlunda?
Inte alla hoppade huvudstupa och kraschade. Men mÄnga projekt installerade MongoDB pÄ stÀllen dÀr den helt enkelt inte passade - och de kommer att fÄ leva med det i mÄnga Är framöver. Om dessa organisationer hade tagit sig tid och metodiskt övervÀgt sitt teknikval skulle mÄnga ha gjort ett annat val.
Hur vÀljer man rÀtt teknik? Det har gjorts flera försök att skapa en systematisk ram för att utvÀrdera teknologier, sÄsom och , men jag tycker att det Àr onödig komplexitet.
MÄnga teknologier kan rimligt utvÀrderas genom att stÀlla bara tvÄ grundlÀggande frÄgor. Problemet ligger i att hitta personer som kan svara pÄ dem ansvarsfullt, ta sig tid att leta efter svar och vara objektiva.
Om du inte stÄr inför nÄgot problem behöver du inte ett nytt verktyg. Punkt.
FrÄga 1: Vilka problem försöker jag lösa?
Om du inte stÄr inför nÄgot problem behöver du inte ett nytt verktyg. Punkt. Du behöver inte leta efter en lösning och sedan pÄhitta ett problem. Om du inte har stött pÄ ett problem som den nya teknologin löser betydligt bÀttre Àn din befintliga teknologi, sÄ Àr det inget att diskutera. Om du övervÀger att anvÀnda denna teknik för att andra gör det, tÀnk pÄ vilka problem de stÄr inför och frÄga om du har sÄdana problem. Det Àr lÀtt att acceptera teknologi eftersom andra anvÀnder den, utmaningen ligger i att förstÄ om du stÄr inför samma problem.
FrÄga 2: Vad gÄr jag miste om?
Detta Àr utan tvekan en svÄrare frÄga, eftersom det krÀver grÀvande och en god förstÄelse av bÄde den gamla och den nya teknologin. Ibland kan du inte riktigt förstÄ den nya tills du har byggt nÄgot med den eller har en medarbetare med sÄdan erfarenhet.
Om du varken har det ena eller det andra Àr det rimligt att tÀnka pÄ minimala investeringar för att faststÀlla vÀrdet av detta verktyg. Och om du gör investeringar, hur svÄrt blir det att Ängra beslutet?
Folk förstör alltid saker
NÀr du försöker svara pÄ dessa frÄgor sÄ objektivt som möjligt, kom ihÄg en sak: du kommer att behöva kÀmpa mot den mÀnskliga naturen. Det finns en rad kognitiva förvrÀngningar som mÄste övervinnas för att effektivt kunna bedöma teknologin. HÀr Àr bara nÄgra:
- â alla kĂ€nner till det, men det Ă€r fortfarande svĂ„rt att motverka. Se bara till att teknologin verkligen uppfyller dina verkliga behov.
- â mĂ„nga utvecklare tenderar att underskatta teknologier de har arbetat med under lĂ„ng tid och överskatta fördelarna med ny teknologi. Inte bara programmerare, alla Ă€r benĂ€gna att drabbas av denna kognitiva förvrĂ€ngning.
- â vi tenderar att se det som finns och missar det som saknas. Detta kan leda till kaos i kombination med nyhetseffekten, eftersom du inte bara tenderar att överskatta den nya teknologin utan ocksĂ„ ignorerar dess brister..
En objektiv bedömning Àr inte lÀtt att göra, men förstÄelse för grundlÀggande kognitiva förvrÀngningar kan hjÀlpa till att fatta mer rationella beslut.
Sammanfattning
NÀr en innovation uppstÄr, behöver man med stor försiktighet svara pÄ tvÄ frÄgor:
- Löser det hÀr verktyget ett verkligt problem?
- FörstÄr vi kompromisserna vÀl?
Om du inte kan svara pÄ dessa tvÄ frÄgor med sjÀlvförtroende, ta ett par steg tillbaka och fundera.
Var MongoDB verkligen rÀtt val? Absolut; precis som med de flesta ingenjörsteknologi, beror det pÄ mÄnga faktorer. MÄnga som svarade pÄ dessa tvÄ frÄgor har dragit fördel av MongoDB och fortsÀtter att göra det. De som inte gjorde det hoppas jag har fÄtt en vÀrdefull och inte alltför smÀrtsam lÀxa om att navigera genom hype-cykeln.
Disclaimer
Jag vill klargöra att jag varken har nÄgon kÀrlek eller hat mot MongoDB. Vi hade helt enkelt inte de problem som MongoDB Àr bÀst lÀmpat att lösa. Jag vet att 10gen/MongoDB Inc. frÄn början agerade mycket djÀrvt genom att sÀtta osÀkra standardinstÀllningar och marknadsföra MongoDB överallt (sÀrskilt pÄ hackathons) som en universallösning för att hantera alla typer av data. Det var förmodligen ett dÄligt beslut, men det bekrÀftar det method som beskrivs hÀr: dessa problem kunde snabbt upptÀckas Àven vid en ytliga bedömning av teknologin.
KĂ€lla: habr.com
