MongoDB umuman to'g'ri tanlovmi?

Men buni yaqinda bilib oldim Red Hat sun'iy yo'ldoshdan MongoDB yordamini olib tashlaydi (ular litsenziya o'zgarishlari tufayli deyishadi). Bu meni o'ylashga majbur qildi, chunki so'nggi bir necha yil ichida men MongoDB qanchalik dahshatli ekanligi va uni hech kim ishlatmasligi kerakligi haqida ko'plab maqolalarni ko'rdim. Ammo bu vaqt ichida MongoDB ancha etuk mahsulotga aylandi. Nima bo'ldi? Barcha nafrat haqiqatan ham yangi DBMSning dastlabki marketingidagi xatolar tufaylimi? Yoki odamlar MongoDB-dan noto'g'ri joylarda foydalanmoqdami?

Agar siz MongoDB ni himoya qilayotganimni his qilsangiz, o'qing rad etish maqolaning oxirida.

Yangi trend

Men dasturiy ta'minot sanoatida aytishim mumkin bo'lganidan ko'ra ko'proq yillar davomida ishlayapman, lekin men hali ham bizning sanoatimizga ta'sir qilgan tendentsiyalarning kichik bir qismiga duch keldim. Men 4GL, AOP, Agile, SOA, Web 2.0, AJAX, Blockchain ko‘tarilishining guvohi bo‘ldim... ro‘yxat cheksizdir. Har yili yangi tendentsiyalar paydo bo'ladi. Ba'zilar tezda yo'q bo'lib ketadi, boshqalari esa dasturiy ta'minotni ishlab chiqish usulini tubdan o'zgartiradilar.

Har bir yangi tendentsiya umumiy hayajonni keltirib chiqaradi: odamlar bortga sakrab chiqishadi yoki boshqalar tomonidan yaratilgan shovqinni ko'rishadi va olomonni kuzatib borishadi. Ushbu jarayon Gartner tomonidan kodlangan hayp tsikli. Garchi munozarali bo'lsa-da, bu vaqt jadvali, ular oxir-oqibat foydali bo'lishidan oldin, ular bilan nima sodir bo'lishini taxminan tasvirlaydi.

Ammo vaqti-vaqti bilan yangi innovatsiya paydo bo'ladi (yoki bu holatda bo'lgani kabi, ikkinchi marta keladi) faqat bitta aniq amalga oshirish bilan boshqariladi. NoSQL misolida, shov-shuvga MongoDB ning paydo bo'lishi va meteorik yuksalishi sabab bo'lgan. MongoDB bu tendentsiyani boshlamadi: aslida yirik Internet kompaniyalari katta hajmdagi ma'lumotlarni qayta ishlashda muammolarga duch kela boshladilar, bu esa aloqador bo'lmagan ma'lumotlar bazalarini qaytarishga olib keldi. Umumiy harakat Google-ning Bigtable va Facebook-ning Cassandra kabi loyihalari bilan boshlandi, ammo aynan MongoDB ko'pchilik ishlab chiquvchilar kirish imkoniga ega bo'lgan eng mashhur va mavjud NoSQL ma'lumotlar bazasi dasturiga aylandi.

Eslatma: Men hujjatlar ma'lumotlar bazalarini ustunli ma'lumotlar bazalari, kalitlar/qiymatlar do'konlari yoki umumiy NoSQL ta'rifiga kiruvchi ko'plab boshqa turdagi ma'lumotlar omborlari bilan chalkashtirib yuboryapman deb o'ylashingiz mumkin. Va siz haqsiz. Ammo o'sha paytda tartibsizlik hukm surdi. Hamma NoSQL bilan ovora, u hammaga aylandi albatta zarur, garchi ko'pchilik turli texnologiyalardagi farqlarni ko'rmagan. Ko'pchilik uchun MongoDB aylandi bilan sinonim NoSQL.

Va ishlab chiquvchilar unga kirishdi. Har qanday muammoni hal qilish uchun sehrli tarzda o'lchaydigan sxemasiz ma'lumotlar bazasi g'oyasi juda jozibali edi. Taxminan 2014 yilda, bir yil oldin MySQL, Postgres yoki SQL Server kabi relyatsion ma'lumotlar bazasidan foydalanilgan hamma joyda MongoDB ma'lumotlar bazalarini o'rnatish boshlandi. Sababini so'raganingizda, "bu Internet miqyosi" degan oddiy javobdan, "mening ma'lumotlarim juda erkin tuzilgan va sxemasiz ma'lumotlar bazasiga yaxshi mos keladi" degan savolga javob olishingiz mumkin.

MongoDB va umuman hujjat ma'lumotlar bazalari an'anaviy relyatsion ma'lumotlar bazalari bilan bir qator muammolarni hal qilishini yodda tutish kerak:

  • Qattiq sxema: Aloqaviy ma'lumotlar bazasi bilan, agar siz dinamik ravishda yaratilgan ma'lumotlarga ega bo'lsangiz, siz tasodifiy "turli" ma'lumotlar ustunlari to'plamini yaratishga, u erda ma'lumotlar bloklarini joylashtirishga yoki konfiguratsiyadan foydalanishga majbur bo'lasiz. EAV...bularning barchasi muhim kamchiliklarga ega.
  • Masshtablashning qiyinligi: Agar bitta serverga sig'maydigan darajada ko'p ma'lumotlar mavjud bo'lsa, MongoDB uni bir nechta mashinalar bo'ylab kengaytirishga imkon beradigan mexanizmlarni taklif qildi.
  • Murakkab sxema modifikatsiyalari: migratsiya yo'q! Relyatsion ma'lumotlar bazasida ma'lumotlar bazasi strukturasini o'zgartirish juda katta muammo bo'lishi mumkin (ayniqsa, ko'p ma'lumotlar mavjud bo'lganda). MongoDB jarayonni sezilarli darajada soddalashtira oldi. Va bu juda oson qildiki, siz borganingizda va juda tez harakatlanayotganda sxemani yangilashingiz mumkin.
  • Yozib olish unumdorligi: MongoDB ishlashi yaxshi edi, ayniqsa to'g'ri sozlanganda. Hatto tez-tez tanqid qilinadigan MongoDB-ning tayyor konfiguratsiyasi ham ta'sirchan ishlash raqamlarini ko'rsatdi.

Barcha xavflar sizning zimmangizda

MongoDB ning potentsial afzalliklari, ayniqsa muammolarning muayyan sinflari uchun juda katta edi. Agar siz yuqoridagi ro'yxatni kontekstni tushunmasdan va tajribasiz o'qib chiqsangiz, MongoDB haqiqatan ham inqilobiy DBMS ekanligi haqida taassurot qoldirishingiz mumkin. Yagona muammo shundaki, yuqorida sanab o'tilgan imtiyozlar bir qator ogohlantirishlar bilan birga kelgan, ulardan ba'zilari quyida keltirilgan.

Adolat uchun, 10gen/MongoDB Inc.da hech kim yo'q. quyidagi to'g'ri emas, deb aytmayman, bu faqat murosaga.

  • Yo'qotilgan tranzaktsiyalar: Tranzaksiyalar ko'plab relyatsion ma'lumotlar bazalarining asosiy xususiyatidir (barchasi emas, balki ko'pchilik). Tranzaksiya bir nechta operatsiyalarni atomik tarzda bajarishingiz va ma'lumotlarning izchilligini ta'minlashingiz mumkinligini anglatadi. Albatta, NoSQL ma'lumotlar bazasi bilan tranzaksiya bir hujjat ichida bo'lishi mumkin yoki tranzaksiya semantikasini olish uchun ikki fazali majburiyatlardan foydalanishingiz mumkin. Lekin siz bu funksiyani o‘zingiz amalga oshirishingiz kerak bo‘ladi... bu qiyin va ko‘p vaqt talab qiladigan ish bo‘lishi mumkin. Ko'pincha siz ma'lumotlar bazasidagi ma'lumotlar noto'g'ri holatlarga tushib qolganini ko'rmaguningizcha muammo borligini tushunmaysiz, chunki operatsiyalarning atomligi kafolatlanmaydi. Eslatma: Ko'pchilik menga MongoDB 4.0 o'tgan yili tranzaktsiyalarni joriy qilganini aytdi, ammo ba'zi cheklovlar bilan. Maqoladan olingan ma'lumot bir xil bo'lib qoladi: texnologiya sizning ehtiyojlaringizga qanchalik mos kelishini baholang.
  • Munosabatlar yaxlitligini yo'qotish (xorijiy kalitlar): Agar sizning ma'lumotlaringiz o'zaro bog'liq bo'lsa, ularni ilovada qo'llashingiz kerak bo'ladi. Ushbu munosabatlarni hurmat qiladigan ma'lumotlar bazasiga ega bo'lish dastur va shuning uchun dasturchilaringizning ko'p ishlarini olib tashlaydi.
  • Ma'lumotlar strukturasini qo'llash qobiliyatining yo'qligi: Qattiq sxemalar ba'zan katta muammo bo'lishi mumkin, ammo ular oqilona foydalanilsa, ma'lumotlarni yaxshi tizimlashtirish uchun kuchli mexanizmdir. MongoDB kabi hujjat ma'lumotlar bazalari sxemaning ajoyib moslashuvchanligini ta'minlaydi, ammo bu moslashuvchanlik ma'lumotlarni toza saqlash mas'uliyatini olib tashlaydi. Agar siz ularga g'amxo'rlik qilmasangiz, siz kutgan shaklda saqlanmaydigan ma'lumotlarni hisobga olish uchun ilovangizga juda ko'p kod yozasiz. Simple Thread kompaniyamizda tez-tez aytganimizdek... dastur qachonlardir qayta yoziladi, ammo ma'lumotlar abadiy qoladi. Eslatma: MongoDB sxemalarni tekshirishni qo'llab-quvvatlaydi: u foydali, lekin relyatsion ma'lumotlar bazasidagi kabi kafolatlarni bermaydi. Birinchidan, sxema tekshiruvini qo'shish yoki o'zgartirish to'plamdagi mavjud ma'lumotlarga ta'sir qilmaydi. Yangi sxema bo'yicha ma'lumotlarni yangilash sizga bog'liq. Bu sizning ehtiyojlaringiz uchun etarli yoki yo'qligini o'zingiz hal qiling.
  • Mahalliy so'rovlar tili / asbob ekotizimining yo'qolishi: SQLning paydo bo'lishi mutlaq inqilob edi va o'shandan beri hech narsa o'zgarmadi. Bu nihoyatda kuchli til, lekin ayni paytda juda murakkab. JSON fragmentlaridan tashkil topgan yangi tilda ma'lumotlar bazasi so'rovlarini yaratish zarurati SQL bilan ishlash tajribasiga ega odamlar tomonidan orqaga katta qadam sifatida qaraladi. SQL ma'lumotlar bazalari bilan o'zaro aloqada bo'lgan IDE'lardan hisobot vositalarigacha bo'lgan butun bir koinot mavjud. SQL-ni qo'llab-quvvatlamaydigan ma'lumotlar bazasiga o'tish siz ushbu vositalarning ko'pchiligidan foydalana olmaysiz yoki ulardan foydalanish uchun ma'lumotlarni SQL-ga tarjima qilishingiz kerak degan ma'noni anglatadi, bu siz o'ylagandan ko'ra qiyinroq bo'lishi mumkin.

MongoDB-ga murojaat qilgan ko'plab ishlab chiquvchilar kelishuvni tushunmadilar va ko'pincha uni asosiy ma'lumotlar ombori sifatida o'rnatishga shoshildilar. Shundan so'ng, ko'pincha qaytib kelish juda qiyin edi.

Nimani boshqacha qilish mumkin edi?

Hamma ham boshi bilan sakrab pastga tushmadi. Ammo ko'plab loyihalar MongoDB-ni u oddiygina sig'maydigan joylarda o'rnatgan - va ular uzoq yillar davomida u bilan yashashlari kerak bo'ladi. Agar bu tashkilotlar bir oz vaqt sarflagan bo'lsa va o'zlarining texnologik tanlovlarini uslubiy ravishda o'ylab ko'rganlarida, ko'pchilik turli xil tanlovlar qilgan bo'lar edi.

To'g'ri texnologiyani qanday tanlash mumkin? kabi texnologiyani baholash uchun tizimli asos yaratish uchun bir necha urinishlar bo'ldi "Dasturiy ta'minot tashkilotlariga texnologiyalarni joriy etish asoslari" и "Dasturiy ta'minot texnologiyalarini baholash uchun asos", lekin menimcha, bu keraksiz murakkablik.

Ko'pgina texnologiyalarni faqat ikkita asosiy savol berish orqali oqilona baholash mumkin. Muammo ularga mas'uliyat bilan javob bera oladigan, javoblarni topishga vaqt ajratadigan va tarafkashliksiz odamlarni topishdir.

Hech qanday muammoga duch kelmasangiz, sizga yangi vosita kerak emas. Nuqta.

1-savol: Men qanday muammolarni hal qilmoqchiman?

Hech qanday muammoga duch kelmasangiz, sizga yangi vosita kerak emas. Nuqta. Yechim izlab, keyin muammo o'ylab topishning hojati yo'q. Agar siz yangi texnologiya sizning mavjud texnologiyangizga qaraganda ancha yaxshi hal qiladigan muammoga duch kelmasangiz, bu erda muhokama qilinadigan hech narsa yo'q. Agar siz ushbu texnologiyadan boshqalarning foydalanayotganini ko‘rganingiz uchun foydalanmoqchi bo‘lsangiz, ular qanday muammolarga duch kelayotgani haqida o‘ylab ko‘ring va sizda bunday muammolar bor yoki yo‘qligini so‘rang. Texnologiyani qabul qilish oson, chunki boshqalar undan foydalanmoqda, muammo sizning bir xil muammolarga duch kelasizmi yoki yo'qligini tushunishdir.

2-savol: Menga nima etishmayapti?

Bu, albatta, qiyinroq savol, chunki siz qazishingiz va eski va yangi texnologiyani yaxshi tushunishingiz kerak bo'ladi. Ba'zan siz yangisini to'g'ridan-to'g'ri tushuna olmaysiz, u bilan biror narsa qurmaguningizcha yoki bunday tajribaga ega bo'lgan odamga ega bo'lguningizcha.

Agar sizda ikkalasi ham bo'lmasa, ushbu vositaning qiymatini aniqlash uchun mumkin bo'lgan minimal investitsiyalar haqida o'ylash mantiqan. Va sarmoya kiritganingizdan so'ng, qarorni bekor qilish qanchalik qiyin bo'ladi?

Odamlar har doim hamma narsani buzadi

Bu savollarga imkon qadar xolis javob berishga harakat qilar ekansiz, bir narsani yodda tuting: inson tabiatiga qarshi kurashishga to‘g‘ri keladi. Texnologiyani samarali baholash uchun engib o'tish kerak bo'lgan bir qator kognitiv noto'g'ri holatlar mavjud. Mana bir nechtasi:

  • Ko'pchilikka qo'shilishning ta'siri - u haqida hamma biladi, lekin u bilan kurashish hali ham qiyin. Faqat texnologiya sizning haqiqiy ehtiyojlaringizga mos kelishiga ishonch hosil qiling.
  • Yangilik effekti — Ko‘pgina ishlab chiquvchilar uzoq vaqt davomida ishlagan texnologiyalarni kam baholaydilar va yangi texnologiyalarning afzalliklarini ortiqcha baholaydilar. Bu nafaqat dasturchilar, balki hamma ham bu kognitiv tarafkashlikka moyil.
  • Ijobiy xususiyatlarning ta'siri - Biz u erda nima borligini ko'rishga moyilmiz va nima etishmayotganini yo'qotamiz. Bu yangilik effekti bilan birlashganda tartibsizlikka olib kelishi mumkin, chunki siz nafaqat yangi texnologiyani yuqori baholaysiz, balki uning kamchiliklarini ham e'tiborsiz qoldirasiz..

Ob'ektiv baholash oson emas, lekin asosiy kognitiv noto'g'ri tushunchalarni tushunish sizga yanada oqilona qarorlar qabul qilishga yordam beradi.

Xulosa

Har doim yangilik paydo bo'lganda, ikkita savolga juda ehtiyotkorlik bilan javob berish kerak:

  • Ushbu vosita haqiqiy muammoni hal qiladimi?
  • Savdolarni yaxshi tushunamizmi?

Agar bu ikki savolga ishonch bilan javob bera olmasangiz, bir necha qadam orqaga qayting va o‘ylab ko‘ring.

Shunday qilib, MongoDB to'g'ri tanlovmi? Albatta Ha; Ko'pgina muhandislik texnologiyalarida bo'lgani kabi, bu ko'plab omillarga bog'liq. Ushbu ikki savolga javob berganlar orasida ko'pchilik MongoDB-dan foyda ko'rgan va buni davom ettirmoqda. Yo'q bo'lganlar uchun umid qilamanki, siz shov-shuv tsiklidan o'tish haqida qimmatli va juda og'riqli bo'lmagan saboq oldingiz.

Rad etish

Men MongoDB bilan na sevgi, na nafrat munosabatlariga ega ekanligimni aniqlamoqchiman. Bizda MongoDB hal qilish uchun eng mos bo'lgan muammolar mavjud emas. Men 10gen/MongoDB Inc. dastlab juda jasoratli edi, xavfsiz bo'lmagan standart sozlamalarni o'rnatdi va MongoDB-ni hamma joyda (ayniqsa, hackathonlarda) har qanday ma'lumotlar bilan ishlash uchun universal echim sifatida targ'ib qildi. Ehtimol, bu noto'g'ri qaror edi. Ammo bu bu erda tasvirlangan yondashuvni tasdiqlaydi: bu muammolarni hatto texnologiyani yuzaki baholash bilan ham juda tez aniqlash mumkin edi.

Manba: www.habr.com

a Izoh qo'shish