MongoDB жалпысынан туура тандоо болдубу?

Мен муну жакында билдим Red Hat спутниктен MongoDB колдоосун алып салат (лицензия өзгөргөнүнө байланыштуу дешет). Бул мени ойлондурду, анткени акыркы бир нече жылда мен MongoDB канчалык коркунучтуу экендиги жана аны эч ким эч качан колдонбошу керектиги жөнүндө көптөгөн макалаларды көрдүм. Бирок бул убакыттын ичинде, MongoDB кыйла жетилген продукт болуп калды. Не болду? Бардык жек көрүү чындыгында жаңы DBMSтин алгачкы маркетингиндеги каталардан уламбы? Же адамдар MongoDBди туура эмес жерлерде колдонуп жатышабы?

Эгер сиз мени MongoDB коргоп жаткандай сезсеңиз, окуп чыгыңыз баш тартуу макаланын аягында.

Жаңы тенденция

Мен программалык камсыздоо тармагында көп жылдар бою иштеп келем, бирок мен дагы деле биздин тармакка тийген тенденциялардын аз гана бөлүгүнө дуушар болдум. Мен 4GL, AOP, Agile, SOA, Web 2.0, AJAX, Blockchain өсүүсүнө күбө болдум... тизме чексиз. Жыл сайын жаңы тренддер пайда болот. Кээ бирлери тез эле өчүп калат, ал эми башкалары программалык камсыздоону иштеп чыгуу ыкмасын түп-тамырынан бери өзгөртөт.

Ар бир жаңы тенденция жалпы толкунданууну жаратат: адамдар же бортко секирип, же башкалардын ызы-чуусун көрүп, элди ээрчишет. Бул процесс Gartner тарабынан кодификацияланган хайп цикли. Талаштуу болсо да, бул убакыт тилкеси, алар акыры пайдалуу боло электе технологияга эмне болорун болжол менен сүрөттөйт.

Бирок мезгил-мезгили менен бир гана конкреттүү ишке ашыруу менен шартталган жаңы инновация пайда болот (же бул учурда экинчи жолу келет). NoSQL учурда, хайп MongoDBдин пайда болушу жана метеорикалык өсүшү менен шартталган. MongoDB бул тенденцияны баштаган жок: чындыгында, ири интернет-компаниялар чоң көлөмдөгү маалыматтарды иштеп чыгууда көйгөйлөргө туш боло башташты, бул реляциялык эмес маалымат базаларынын кайтып келишине алып келди. Жалпы кыймыл Google'дун Bigtable жана Facebook'тун Кассандра сыяктуу долбоорлор менен башталды, бирок MongoDB көпчүлүк иштеп чыгуучуларга кире алган эң белгилүү жана жеткиликтүү NoSQL маалымат базасын ишке ашыруу болуп калды.

Эскертүү: Сиз мен документ базаларын мамычалык маалымат базалары, ачкыч/баалуу дүкөндөр же жалпы NoSQL аныктамасына кирген көптөгөн башка маалыматтар кампалары менен чаташтырдым деп ойлошуңуз мүмкүн. А сиз туура айтасыз. Бирок ал убакта баш аламандык өкүм сүргөн. Ар бир адам NoSQL менен алек, ал бардыгы болуп калды толугу менен зарыл, бирок көптөр ар кандай технологиялардагы айырмачылыктарды көргөн жок. Көптөр үчүн MongoDB болуп калды менен синоним NoSQL.

Ал эми иштеп чыгуучулар анын үстүнө. Кандайдыр бир көйгөйдү чечүү үчүн сыйкырдуу масштабдуу схемасыз маалымат базасы идеясы абдан азгырыктуу болду. Болжол менен 2014-жылы, бир жыл мурун MySQL, Postgres же SQL Server сыяктуу реляциялык маалымат базасы колдонулган бардык жерде MongoDB маалымат базалары жайыла баштагандай сезилген. Эмне үчүн деп сураганда, сиз "бул интернеттин масштабы" деген баналдык жооптон "менин маалыматтарым абдан эркин структураланган жана схемасы жок маалымат базасына туура келет" дегенге жооп ала аласыз.

MongoDB жана жалпысынан документ маалымат базалары салттуу реляциялык маалымат базалары менен бир катар маселелерди чечерин эстен чыгарбоо керек:

  • Катуу схема: Реляциялык маалымат базасы менен, эгер сизде динамикалык түрдө түзүлгөн маалыматтар болсо, сиз же бир топ туш келди "ар кандай" маалымат мамычаларын түзүүгө, ал жерге маалыматтар блокторун түртүүгө же конфигурацияны колдонууга аргасыз болосуз. EAV...булардын бардыгынын олуттуу кемчиликтери бар.
  • Масштабдоо кыйынчылыгы: Эгер бир серверге туура келбей тургандай көп маалымат болсо, MongoDB аны бир нече машиналарга масштабдатуу үчүн механизмдерди сунуштады.
  • Татаал схемаларды өзгөртүү: миграция жок! Реляциялык маалымат базасында маалымат базасынын түзүмүн өзгөртүү чоң көйгөй болушу мүмкүн (өзгөчө маалыматтар көп болгондо). MongoDB процессти абдан жөнөкөйлөштүрө алды. Жана аны ушунчалык жеңилдеткендиктен, сиз жөн гана схеманы жаңыртып, өтө тез уланта аласыз.
  • Жаздыруу аткаруу: MongoDB иштеши жакшы болду, өзгөчө туура конфигурацияланганда. Атүгүл MongoDBдин кутудан тышкаркы конфигурациясы, ал көп учурда сынга алынып, кээ бир таасирдүү көрсөткүчтөрдү көрсөттү.

Бардык тобокелдиктер сизде

MongoDB потенциалдуу пайдалары, өзгөчө көйгөйлөрдүн айрым класстары үчүн абдан чоң болгон. Эгерде сиз жогорудагы тизмени контекстти түшүнбөстөн жана тажрыйбасыз окусаңыз, MongoDB чындап эле революциялык DBMS деген ойго ээ болосуз. Бир гана көйгөй, жогоруда саналып өткөн пайдалар бир катар эскертүүлөр менен коштолгон, алардын айрымдары төмөндө келтирилген.

Адилеттүүлүк үчүн, 10gen/MongoDB Inc.те эч ким жок. төмөндөгүлөр туура эмес деп айтпайм, бул жөн гана компромисстер.

  • Жоголгон транзакциялар: Транзакциялар көптөгөн реляциялык маалымат базаларынын негизги өзгөчөлүгү болуп саналат (баары эмес, бирок көпчүлүгү). Транзакция дегенди билдирет, сиз атомдук түрдө бир нече операцияларды аткара аласыз жана маалыматтардын ырааттуулугун камсыздай аласыз. Албетте, NoSQL маалымат базасы менен транзакция бир документтин ичинде болушу мүмкүн же транзакциялык семантиканы алуу үчүн эки фазалуу милдеттенмелерди колдоно аласыз. Бирок бул функцияны өзүңүз ишке ашырышыңыз керек болот... бул татаал жана көп убакытты талап кылган иш болушу мүмкүн. Көп учурда сиз маалымат базасындагы маалыматтар жараксыз абалга келип калганын көрмөйүнчө көйгөй бар экенин түшүнбөйсүз, анткени операциялардын атомдуулугуна кепилдик берилбейт. Эскертүү: Көптөр мага MongoDB 4.0 өткөн жылы транзакцияларды киргизгенин айтышты, бирок кээ бир чектөөлөр менен. Макаладан алынган нерсе ошол эле бойдон калууда: технология сиздин муктаждыктарыңызга канчалык деңгээлде жооп берерин баалаңыз.
  • мамиленин бүтүндүгүн жоготуу (чет өлкөлүк ачкычтар): Эгерде сиздин маалыматтарыңызда байланыштар болсо, анда аларды колдонмодо колдонушуңуз керек болот. Бул мамилелерди сыйлаган маалымат базасына ээ болуу тиркеменин жана демек сиздин программисттериңиздин көп жумушун талап кылат.
  • Маалымат структурасын колдонуу мүмкүнчүлүгүнүн жоктугу: Катуу схемалар кээде чоң көйгөй болушу мүмкүн, бирок алар ошондой эле акылдуулук менен колдонулса, маалыматтарды жакшы структуралаштыруу үчүн күчтүү механизм болуп саналат. MongoDB сыяктуу документ базалары схеманын укмуштуу ийкемдүүлүгүн камсыз кылат, бирок бул ийкемдүүлүк маалыматтарды таза сактоо жоопкерчилигин алып салат. Эгер сиз аларга кам көрбөсөңүз, сиз күткөн формада сакталбаган маалыматтарды эсепке алуу үчүн колдонмоңузга көп код жазасыз. Simple Thread компаниябызда көп айткандай... тиркеме качандыр бир күнү кайра жазылат, бирок маалыматтар түбөлүк жашайт. Эскертүү: MongoDB схемаларды текшерүүнү колдойт: бул пайдалуу, бирок реляциялык маалымат базасындагыдай кепилдиктерди бербейт. Биринчиден, схеманы текшерүүнү кошуу же өзгөртүү коллекциядагы болгон маалыматтарга таасирин тийгизбейт. Жаңы схемага ылайык маалыматтарды жаңыртуу сизге көз каранды. Бул сиздин муктаждыктарыңыз үчүн жетиштүүбү, жокпу, өзүңүз чечиңиз.
  • Эне суроо тили / курал экосистемасынын жоголушу: SQLдин пайда болушу абсолюттук революция болгон жана андан бери эч нерсе өзгөргөн жок. Бул укмуштай күчтүү тил, бирок ошондой эле татаал тил. JSON фрагменттеринен турган жаңы тилде маалымат базасынын суроо-талаптарын куруу зарылдыгы SQL менен иштөө тажрыйбасы бар адамдар тарабынан артка карай чоң кадам катары каралат. SQL маалымат базалары менен иштешкен инструменттердин бүт ааламы бар, IDEлерден отчеттук куралдарга чейин. SQLди колдобогон маалымат базасына өтүү бул куралдардын көбүн колдоно албайсыз же аларды колдонуу үчүн маалыматтарды SQLге которуу керек дегенди билдирет, бул сиз ойлогондон да кыйын болушу мүмкүн.

MongoDBге кайрылган көптөгөн иштеп чыгуучулар соодалашууну чындап түшүнүшкөн эмес жана көбүнчө аны баштапкы маалымат дүкөнү катары орнотууга киришкен. Андан кийин кайра кайтып келүү көп учурда абдан кыйын болгон.

Башкача эмне кылса болмок?

Баардыгы эле секирип, түбүнө тийген жок. Бирок көптөгөн долбоорлор MongoDBди жөн эле туура келбеген жерлерге орнотушкан - жана алар аны менен көп жылдар бою жашашы керек. Эгер бул уюмдар бир аз убакыт өткөрүп, технологиялык тандоолорун методикалык түрдө ойлонушса, көптөр ар кандай тандоо жасамак.

туура технологияны кантип тандоо керек? сыяктуу технологияларды баалоо үчүн системалуу негизди түзүү үчүн бир нече аракеттер болду "Программалык камсыздоо уюмдарына технологияларды киргизүү үчүн негиз" и "Программалык технологияларды баалоо үчүн негиз", бирок мага бул керексиз татаалдык окшойт.

Көптөгөн технологияларды эки эле негизги суроону берүү менен акылдуу баалоого болот. Маселе аларга жоопкерчиликтүү жооп бере ала турган адамдарды табууда, жоопторду табууга убакыт бөлүүдө жана бир жактуу эмес.

Эгер кандайдыр бир көйгөйгө туш болбосоңуз, сизге жаңы куралдын кереги жок. чекит.

1-суроо: Мен кандай көйгөйлөрдү чечүүгө аракет кылып жатам?

Эгер кандайдыр бир көйгөйгө туш болбосоңуз, сизге жаңы куралдын кереги жок. чекит. Чечим издеп, анан маселени ойлоп табуунун кереги жок. Жаңы технология учурдагы технологияңызга караганда кыйла жакшыраак чече турган көйгөйгө туш болбосоңуз, бул жерде талкуулай турган эч нерсе жок. Эгер сиз бул технологияны башкалардын колдонуп жатканын көргөндүктөн колдонууну ойлонуп жатсаңыз, алар кандай көйгөйлөргө туш болуп жатканы жөнүндө ойлонуп, ал көйгөйлөр сизде барбы деп сураңыз. Технологияны кабыл алуу оңой, анткени аны башкалар колдонуп жатат, көйгөй - сизде ошол эле көйгөйлөргө туш болобузбу, түшүнүү.

2-суроо: Мага эмне жетишпей жатат?

Бул, албетте, татаалыраак суроо, анткени сиз казып, эски жана жаңы технологияны жакшы түшүнүшүңүз керек болот. Кээде жаңысын аны менен бир нерсе курмайынча же ошол тажрыйбага ээ болгон адам болмоюнча түшүнө албайсың.

Эгер сизде да жок болсо, анда бул инструменттин баасын аныктоо үчүн минималдуу мүмкүн болгон инвестиция жөнүндө ойлонуу маанилүү. Жана инвестиция салгандан кийин, чечимди жокко чыгаруу канчалык кыйын болот?

Адамдар ар дайым баарын бузат

Бул суроолорго мүмкүн болушунча калыс жооп берүүгө аракет кылып жатып, бир нерсени эстен чыгарбаңыз: адам табияты менен күрөшүүгө туура келет. Технологияга эффективдүү баа берүү үчүн бир катар когнитивдик тенденциялар бар. Бул жерде бир нечеси:

  • Көпчүлүккө кошулуунун таасири - Ал жөнүндө баары билет, бирок аны менен күрөшүү дагы деле кыйын. Технология иш жүзүндө сиздин чыныгы муктаждыктарыңызга дал келгенин текшериңиз.
  • Жаңылык эффекти — Көптөгөн иштеп чыгуучулар көптөн бери иштешкен технологияларды баалабай, жаңы технологиянын артыкчылыктарын ашыра баалашат. Бул жөн гана программисттер эмес, ар бир адам бул когнитивдик тенденцияга кабылат.
  • Позитивдүү мүнөздөмөлөрдүн таасири - Биз ал жакта эмне бар экенин көрүп, эмне жетишпей жатканын көрбөй калабыз. Бул жаңылык эффектиси менен айкалышканда башаламандыкка алып келиши мүмкүн, анткени сиз жаңы технологияны өтө жогору баалабастан, анын кемчиликтерине да көңүл бурбайсыз..

Объективдүү баа берүү оңой эмес, бирок негизги когнитивдик тенденцияларды түшүнүү сизге көбүрөөк рационалдуу чечимдерди кабыл алууга жардам берет.

на

Жаңылык пайда болгондо, эки суроого өтө кылдаттык менен жооп берүү керек:

  • Бул курал чыныгы көйгөйдү чечеби?
  • Биз соодалашууну жакшы түшүнөбүзбү?

Эгерде сиз бул эки суроого ишенимдүү жооп бере албасаңыз, бир нече кадам артка кетип, ойлонуп көрүңүз.

Ошентип, MongoDB туура тандоо болдубу? Албетте Ооба; Көпчүлүк инженердик технологиялар сыяктуу эле, бул көптөгөн факторлорго көз каранды. Бул эки суроого жооп бергендердин арасында көптөр MongoDBден пайда көрүштү жана улантууда. Антпегендер үчүн, сиз хайп циклинен өтүү боюнча баалуу жана өтө оор эмес сабак алдыңыз деп үмүттөнөм.

Жоопкерчиликтен баш тартуу

Мен MongoDB менен сүйүү да, жек көрүү мамилем да жок экенин тактагым келет. Бизде MongoDB чечүүгө эң ылайыктуу болгон көйгөйлөр болгон эмес. Мен 10gen/MongoDB Inc. адегенде абдан тайманбастык кылып, кооптуу дефолттарды коюп, MongoDBди бардык жерде (айрыкча хакатондордо) ар кандай маалыматтар менен иштөө үчүн универсалдуу чечим катары илгерилетти. Бул, балким, жаман чечим болгон. Бирок бул жерде сүрөттөлгөн ыкманы ырастайт: бул көйгөйлөр технологияга үстүртөн баа берүү менен да тез эле аныкталышы мүмкүн.

Source: www.habr.com

Комментарий кошуу