Var MongoDB verkligen ett bra val?

Nyligen fick jag veta att Red Hat tar bort stödet för MongoDB frÄn Satellite (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 disclaimer 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 hypecykeln. Ä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 EAV
 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 «Ramverket för införande av teknologier i mjukvaruorganisationer» och «Ramverk för utvÀrdering av mjukvaruteknologier», 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:

  • Majoritetseffekt — alla kĂ€nner till det, men det Ă€r fortfarande svĂ„rt att motverka. Se bara till att teknologin verkligen uppfyller dina verkliga behov.
  • Nyhetseffekt — 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.
  • Positiva egenseffekt — 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

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster