JavaRush /Java блогу /Random-KY /Иштеп чыгуучулар үчүн NoSQL колдонмосу

Иштеп чыгуучулар үчүн NoSQL колдонмосу

Группада жарыяланган
Эгер сиз бэкэндди өнүктүрүү жана Big Data тенденцияларына көз салып жатсаңыз, акыркы жылдары NoSQL маалымат базаларынын айланасындагы ызы-чууну байкаган чыгарсыз . Кээ бир адамдар маалымат базасына болгон мындай мамиледен шыктанса, башкалары анда кандайдыр бир куулук бар деп ойлошот: алардагы маалымат моделдери кадимки реляциялык маалымат базаларындагыдай эмес, колдонмо программалоо интерфейстери адаттан тыш жана колдонмолор көп учурда түшүнүксүз. NoSQL Иштеп чыгуучу колдонмосу - 1Бул макалада мен сизге айтып берем, эмне үчүн алар биринчи кезекте түзүлгөн, бул NoSQL маалымат базалары, алар кандай көйгөйлөрдү чечет жана эмне үчүн мынчалык көп түрдүү маалымат базалары күтүлбөгөн жерден керек болот. Эгер сиз NoSQLди жаңыдан билсеңиз, сизди макаланын акыркы бөлүгү кызыктырышы мүмкүн, анда NoSQL маалымат базасынын түрлөрү тизмеленген, менимче, бул тармакты толук түшүнүү үчүн алгач изилдөөгө арзырлык.

Эмне үчүн бизге күтүлбөгөн жерден жаңы маалымат базасы керек?

Сиз суроо берүү үчүн таң калышыңыз мүмкүн: реляциялык маалымат базаларында эмне туура эмес? Кеп, алар чындап эле көп жылдар бою жакшы иштешти, бирок азыр алар көтөрө албай турган маселе бар. Кээ бир божомолдор боюнча, 2018-жылы адамзат секундасына 50 000 гигаbyte маалымат өндүрөт. Бул өтө чоң маалымат! Аны сактоо жана иштетүү олуттуу инженердик кыйынчылыктарды жаратат. Андан да жаманы, бул көлөм тынымсыз өсүп жатат. Көрүнүп тургандай, реляциялык маалымат базалары чындап эле чоң көлөмдөгү маалыматтар менен иштөөгө ылайыктуу эмес. Алар бир машинада иштөө үчүн иштелип чыккан жана эгер сиз көбүрөөк суроо-талаптарды аткарууну кааласаңыз, анда бир гана жол - көбүрөөк оперативдүү эс жана күчтүү процессору бар компьютерди сатып алуу. Тилекке каршы, бир машина чече ала турган сурамдардын саны чектелүү жана бир нече машиналарга бөлүштүрүлгөн иш үчүн бизге башка маалымат базасынын технологиясы керек. Албетте, кээ бир окурмандар бул учурда күлүп калышат жана реляциялык маалымат базасында бир нече машинаны колдонуунун кеңири колдонулган эки ыкмасы бар деп айтышат: репликация жана бөлүү. Бул туура, бирок бул ыкмалар биздин милдеттерди чечүүгө жетишсиз. Окуу репликациясы - бул ар бир маалымат базасын жаңыртуу окуу сурамдарын гана аткара алган башка машиналарга жайылтылган ыкма. Бул учурда бардык өзгөртүүлөр башкы түйүн деп аталган бир server тарабынан аткарылат, ал эми окуу репликалары деп аталган башка serverлер маалыматтардын көчүрмөлөрүн гана сакташат. Колдонуучу каалаган машинадан окуй алат, бирок маалыматтарды башкы түйүн аркылуу гана өзгөртө алат. Бул ыңгайлуу жана абдан популярдуу ыкма, бирок ал көбүрөөк окуу сурамдарын иштетүүгө гана мүмкүндүк берет жана керектүү көлөмдөгү маалыматтарды иштетүү маселесин эч кандай чечпейт.
NoSQL Иштеп чыгуучу колдонмосу - 2
Сүрөттө:
Лидер (окуу жана жазуу): Алдыңкы түйүн (окуу жана жазуу)
Окуу-репликалар (окуу үчүн гана): Окуу репликалары (окуу үчүн гана)
Sharding - бул реляциялык маалымат базасынын бир нече нускасын колдонгон дагы бир популярдуу ыкма. Алардын ар бири маалыматтардын бир бөлүгү үчүн жазуу жана окуу операцияларын аткарат. Эгерде маалымат базасы кардарлар жөнүндө маалыматты сактаса, мисалы, sharding аркылуу, бир машина аты А менен башталган кардарлар үчүн бардык суроо-талаптарды аткара алат, башка машина аттары В менен башталган кардарлар үчүн бардык маалыматтарды сактай алат ж.б.у.с.
NoSQL Иштеп чыгуучу колдонмосу - 3
Сүрөттө:
Мульти-мастер (маалыматтын бир бөлүгүн окуу жана жазуу): Бир нече башкы түйүндөр (маалыматтын бөлүктөрүн окуу жана жазуу)
Sharding көбүрөөк маалыматтарды жаздырууга мүмкүндүк бергени менен, мындай маалымат базасын башкаруу - бул чыныгы коркунучтуу: сиз маалыматтарды машиналар боюнча тегиздеп, кластерди керек болсо эки тарапка тең масштабдашыңыз керек. Теориялык жактан жөнөкөй көрүнгөнү менен, аны туура кабыл алуу абдан кыйын.

Реляциялык маалымат базаларын жакшыртууга болобу?

Менин оюмча, сиз реляциялык маалымат базалары заманбап дүйнөдө түзүлгөн маалыматтардын көлөмүнө эң ылайыктуу эмес деп ишенип калдыңыз. Ошентсе да, сиз дагы эле эмне үчүн бир нече машиналарда натыйжалуу иштей турган "жакшы" реляциялык маалымат базасын эч ким түзө элек деп ойлонуп жатсаңыз болот. Бул технология жөн гана иштелип чыга электей сезorши мүмкүн жана бөлүштүрүлгөн реляциялык маалымат базалары жакында пайда болот. Аттиң, андай болбойт. Бул математикалык жактан мүмкүн эмес жана бул тууралуу эч нерсе кыла алbyte. Бул эмне үчүн мындай экенин түшүнүү үчүн, сиз CAP теоремасын (ака Брюердин теоремасы) карап чыгышыңыз керек. Ал 1999-жылы далилденген жана анда бир нече машиналарда иштеген бөлүштүрүлгөн маалымат базасы төмөнкү үч касиетке ээ болушу мүмкүн экени айтылат: Ылдамдуулук - каалаган окуу операциясы акыркы тиешелүү жазуу операциясынын жыйынтыгын берет. Система ырааттуу болсо, жаңы маалыматтарды жазгандан кийин, эски, үстүнө жазылган маалыматтарды окуу мүмкүн эмес. Жеткorктүүлүк ( Жеткorктүүлүк ) - бөлүштүрүлгөн система каалаган убакта келген суроо-талапты тейлеп, катасыз жооп кайтара алат. Бөлүү толеранттуулук - маалымат базасы анын кээ бир serverлери бири-бири менен убактылуу байланыша албаган учурда да окуу жана жазуу суроо-талаптарына жооп берүүнү улантат. Бул убактылуу мүчүлүштүк тармак туташуунун бузулушу деп аталат жана serverдин жай иштөөсүнөн улам физикалык тармак көйгөйлөрүнөн тартып, тармак жабдууларынын физикалык бузулушуна чейин ар кандай факторлор менен шартталышы мүмкүн. Бул касиеттердин баары, албетте, ыңгайлуу жана биз алардын баарын бириктирген маалымат базасын каалайбыз. Эч бир акыл-эстүү иштеп чыгуучу эч нерсе албастан, айталы, жеткorктүүлүктөн баш тарткысы келбейт. Тилекке каршы, CAP теоремасы да үч касиеттин бир эле учурда кармалышы мүмкүн эмес экенин айтат. Муну түшүнүү оңой эмес, бирок мүмкүн. Биринчиден, эгерде бизге бөлүштүрүлгөн маалымат базасы керек болсо, ал "ажыратууга чыдамдуу" болушу керек. Бул да талкууланbyte. Ажыратуулар ар дайым болуп турат жана биздин маалымат базабыз буга карабастан иштеши керек. Эми эмне үчүн ырааттуулукка да, жеткorктүүлүккө да жетише албай жатканыбызды түшүнөлү. Элестеткиле, бизде эки машинада иштеген жөнөкөй маалымат базасы бар: A жана B. Каалаган колдонуучу эки машинага жаза алат, андан кийин маалыматтар экинчисине көчүрүлөт.
NoSQL Иштеп чыгуучу колдонмосу - 4
Эми элестетиңиз, бул машиналар убактылуу бири-бири менен байланыша алbyte, ал эми В машинасы А машинасына маалымат жөнөтө алbyte же андан маалымат ала алbyte. Эгерде ушул убакыттын ичинде В машинасы кардардан окуу сурамын алса, анын эки варианты бар:
  1. Жергorктүү дайындарыңыздын акыркысы болбосо да, кайра алыңыз. Бул учурда, артыкчылык жеткorктүүлүгүнө берилет (жок дегенде кээ бир маалыматтарды, атүгүл эскиргендерин кайтаруу үчүн).
  2. Кайтуу катасы. Бул учурда, ырааттуулугу артыкчылыктуу болуп саналат: кардар эскирген маалыматтарды алbyte, бирок ал эч кандай маалыматтарды кабыл алbyte.
NoSQL Иштеп чыгуучу колдонмосу - 5
Сүрөттө:
Тармак бөлүмү: Тармактык байланышты жоготуу
Реляциялык маалымат базалары бир эле учурда "ырааттуулук" жана "жеткorктүүлүк" касиеттерин камтууга умтулат, ошондуктан бөлүштүрүлгөн чөйрөдө иштей алbyte. Реляциялык маалымат базасынын бардык мүмкүнчүлүктөрүн бөлүштүрүлгөн системада ишке ашырууга аракет кылуу реалдуу эмес же жөн эле ишке ашпай калат . Башка жагынан алганда, NoSQL маалымат базалары масштабдуулукка жана аткарууга артыкчылык берет. Аларда, адатта, байланыштар жана транзакциялар сыяктуу "негизги" мүмкүнчүлүктөр жок, ал эми маалымат модели такыр башкача болуп чыгат, балким, кандайдыр бир жол менен чектейт. Мунун баары маалыматтардын чоң көлөмүн сактоого жана мурда болуп көрбөгөндөй көп суроону иштетүүгө мүмкүндүк берет.

NoSQL маалымат базалары ырааттуулук менен жеткorктүүлүктү кантип тең салмактайт?

Эгер сиз NoSQL маалымат базасын тандасаңыз, сиз дайыма эскирген маалыматтарды же кандайдыр бир ката болгондо ката аласыз деп ойлошу мүмкүн. Иш жүзүндө, жеткorктүүлүк жана ырааттуулук эч кандай гана жеткorктүү варианттар эмес. Сиз тандоо үчүн жеткorктүү тандоолордун кенен спектри бар. Реляциялык маалымат базаларында мындай опциялар жок, бирок NoSQL суроонун аткарылышын ушундай эле жол менен көзөмөлдөөгө мүмкүндүк берет. Кандайдыр бир жол менен, алар NoSQL маалымат базасында жазуу же окуу операцияларын аткарып жатканда эки параметрди коюуга мүмкүндүк берет: W - кластердеги канча машина жазуу операциясын аткарууда маалыматтарды сактоону ырасташы керек . Маалыматтарыңызды жаза турган машиналардын саны канчалык көп болсо, кийинки окуу операциясында эң акыркы маалыматтарды окуу ошончолук жеңил болот, бирок ошончолук көп убакыт талап кылынат. R – канча машинадан маалыматтарды окугуңуз келет . Бөлүштүрүлгөн системада кластердеги бардык машиналарга маалыматтарды таратуу бир аз убакытты талап кылышы мүмкүн, андыктан кээ бир serverлер эң акыркы маалыматтарга ээ болот, ал эми башкалары артта калат. Маалыматтар окула турган машиналардын саны канчалык көп болсо, учурдагы маалыматтарды окуу мүмкүнчүлүгү ошончолук жогору болот. Келгиле, практикалык мисалды карап көрөлү. Эгерде сиздин кластериңизде беш компьютер болсо жана сиз бир гана компьютерге маалыматтарды жазып, анан кокусунан тандалган бир компьютерден маалыматтарды окууну чечсеңиз, анда эскирген маалыматтарды окууга 80% шансы бар. Башка жагынан алып караганда, бул минималдуу ресурстарды колдонот. Демек, эгер эски дайындар сизге жакшы болсо, анда бул жаман вариант эмес. Бул учурда W жана R параметрлери 1ге барабар.
NoSQL Иштеп чыгуучу колдонмосу - 6
Башка жагынан алганда, эгерде сиз NoSQL маалымат базасындагы бардык беш машинага маалыматтарды жазсаңыз, сиз каалаган машинадан маалыматтарды окуй аласыз жана ар дайым актуалдуу маалыматтарды алууга кепилдик бере аласыз. Бир эле операцияны көбүрөөк сандагы машиналарда аткаруу көбүрөөк убакытты талап кылат, бирок сиз үчүн актуалдуу маалыматтар маанилүү болсо, анда бул параметрди тандасаңыз болот. Бул учурда, W = R = 5. Маалыматтар базасынын ырааттуулугу үчүн окуу жана жазуулардын минималдуу саны канча болушу керек? Бул жерде жөнөкөй формула: R + W ≥ N + 1 , мында N - кластердеги машиналардын саны. Бул беш server менен сиз R = 2 жана W = 4, же R = 3 жана W = 3, же R = 4 жана W = 2ди тандай аласыз дегенди билдирет. Бул учурда, маалымат кайсы машиналарга маанилүү эмес. жазылган болсо, окуу ар дайым заманбап маалыматтар менен жок дегенде бир машинадан аткарылат.
NoSQL Иштеп чыгуучу колдонмосу - 7
Башка маалымат базалары, мисалы, DynamoDB, ар кандай чектөөлөргө ээ жана ырааттуу жазууга гана уруксат берет. Ар бир маалымат үч serverде сакталат жана кандайдыр бир маалымат жазылганда үч машинанын экөөнө жазылат. Бирок маалыматтарды окуп жатканда, сиз эки варианттын бирин тандай аласыз:
  1. Катуу ырааттуу окуу, мында маалыматтар үч машинанын ичинен эки машинадан окулат жана ар дайым эң акыркы жазылган маалыматтарды кайтарат.
  2. Маалыматтарды окуй турган бир машина туш келди тандалып алынган ырааттуу окуу. Бирок, бул убактылуу эскирген маалыматтарды кайтарып бериши мүмкүн.

Эмне үчүн ушунчалык көп NoSQL маалымат базалары бар?

Эгерде сиз программалык камсыздоону иштеп чыгуу чөйрөсүндөгү акыркы жаңылыктарды байкасаңыз, сиз MongoDB, DynamoDB, Cassandra, Redis жана башка көптөгөн ар кандай NoSQL маалымат базалары жөнүндө уккандырсыз. Сиз кызыктырышы мүмкүн: эмне үчүн бизге мынчалык көп түрдүү NoSQL маалымат базалары керек? Себеби жөнөкөй: ар кандай NoSQL маалымат базалары ар кандай маселелерди чечүү үчүн иштелип чыккан. Мына ушундан улам атаандаш маалымат базаларынын саны абдан чоң. NoSQL маалымат базалары төрт негизги категорияга бөлүнөт:

Документке багытталган маалымат базалары

Бул маалымат базалары татаал уяланган documentтерди сактоо мүмкүнчүлүгүн камсыз кылат, ал эми көпчүлүк реляциялык маалымат базалары бир өлчөмдүү саптарды гана колдойт. Бул функция көп учурларда пайдалуу болушу мүмкүн, мисалы, системада бир нече даректери бар колдонуучу жөнүндө маалыматты сактоо зарыл болгондо. Документке багытталган маалымат базасын колдонууда, бул учурда сиз жөн гана даректер массивдерин камтыган татаал an objectти сактай аласыз, ал эми реляциялык маалымат базасында эки table түзүшүңүз керек болот: бирөө колдонуучу маалыматы үчүн, экинчиси даректер үчүн. Документке багытталган маалымат базалары an object модели менен маалымат моделинин ортосундагы ажырымды түзөт . Кээ бир реляциялык маалымат базалары, мисалы PostgreSQL, азыр да documentке багытталган сактоону колдойт, бирок реляциялык маалымат базаларынын көбү дагы эле бул мүмкүнчүлүккө ээ эмес.

Ачкыч/нарк маалымат базалары

Ачкыч/баа маалымат базалары адатта эң жөнөкөй NoSQL моделин ишке ашырат. Негизи, алар сизге берилген ачкычка маалыматтарды жазууга жана аны колдонуу менен кайра окууга мүмкүндүк берүүчү бөлүштүрүлгөн хэш tableсын беришет . Ачкыч/баа базалары өтө масштабдуу жана башка маалымат базаларына караганда бир кыйла төмөн күтүү убактысына ээ.

График маалымат базалары

Көптөгөн предметтик чөйрөлөр, мисалы, социалдык тармактар ​​же фильмдер жана актёрлор жөнүндө маалымат графиктер катары көрсөтүлүшү мүмкүн. График реляциялык маалымат базасын колдонуу менен берилсе да, ал кыйын жана ыңгайсыз. Эгерде сизге графикалык маалыматтар керек болсо, анда график жөнүндө маалыматты бөлүштүрүлгөн кластерде сактай турган жана графиктерде алгоритмдерди эффективдүү ишке ашырууга мүмкүндүк берүүчү атайын графиктер базасын колдонуу жакшы.

Мамычалык маалымат базалары

Мамычалуу маалымат базаларынын башка түрлөрүнүн негизги айырмасы бул маалыматтардын дискте сакталышында. Реляциялык маалымат базалары ар бир table үчүн файл түзүп, бардык саптардын баалуулуктарын ырааттуулук менен сактайт. Мамычалуу маалымат базалары tableларыңыздагы ар бир тилке үчүн файл түзөт. Бул структура маалыматтарды топтоо жана белгилүү бир суроо-талаптарды натыйжалуу аткарууга мүмкүндүк берет, бирок сиз маалыматтар мындай маалымат базаларынын чектөөлөрүнө туура келишин камсыз кылышыңыз керек.

Кайсы маалымат базасын тандоо керек?

Маалыматтар базасын тандоо, адатта, кыжырдантуучу көйгөй болуп саналат, жана жеткorктүү көптөгөн мүмкүнчүлүктөр менен, ал өтө оор иш сыяктуу сезorши мүмкүн. Жакшы жаңылык – бирөөсүн тандоонун кереги жок. Бардык мүмкүнчүлүктөрдү ишке ашырган жана системанын бардык маалыматтарына кирүү мүмкүнчүлүгү бар бирдиктүү монолиттүү тиркемени түзүүнүн ордуна, сиз микросервис деп аталган дагы бир заманбап үлгүнү колдоно аласыз : тиркемени көз карандысыз кызматтардын топтомуна бөлүңүз. Ар бир кызмат өзүнүн тар маселесин чечет жана бул маселени чечүү үчүн эң ылайыктуу болгон өзүнүн гана маалымат базасын колдонот.

Мунун баарын кантип үйрөнүшүң керек?

Мынчалык көп маалымат базалары менен алардын баарын үйрөнүү мүмкүн эмес иш сыяктуу сезorши мүмкүн. Жакшы жаңылык: муну кылуунун кереги жок. NoSQL маалымат базаларынын бир нече гана негизги түрлөрү бар жана алардын кантип иштээрин түшүнсөңүз, башкаларын түшүнүү бир топ жеңил болот. Ошондой эле, кээ бир NoSQL маалымат базалары башкаларга караганда алда канча көп колдонулат, андыктан күчүңүздү эң популярдуу чечимдерге топтогонуңуз жакшы. Бул жерде эң көп колдонулган NoSQL маалымат базаларынын тизмеси, менимче, сиз карап чыгышыңыз керек:
  1. MongoDB . Балким, рынокто эң популярдуу NoSQL маалымат базасы. Эгерде компания реляциялык маалымат базасын өзүнүн негизги маалымат сактагычы катары колдонбосо, анда ал MongoDB колдонот. Бул шаймандардын жакшы топтому менен ийкемдүү document сактагыч. Карьерасынын башында MongoDB кээ бир учурларда маалыматтарды жоготуу үчүн жаман репутацияга ээ болгон , бирок андан бери анын туруктуулугу жана ишенимдүүлүгү абдан жакшырды. Көбүрөөк билгиңиз келсе, бул MongoDB курсун карап көрүңүз

  2. DynamoDB . Эгерде сиз Amazon Web Services (AWS) колдонсоңуз, DynamoDB жөнүндө көбүрөөк билсеңиз жакшы болот. Бул өтө ишенимдүү, масштабдалуучу, аз күтүү мөөнөтү жана көптөгөн башка AWS кызматтары менен интеграцияланган маалымат базасы. Эң жакшы жери, аны өзүңүз жайгаштыруунун кереги жок. Миңдеген суроо-талаптарды аткара ала турган масштабдуу DynamoDB кластерин орнотуу бир нече чыкылdateу. Эгер бул сизди кызыктырса, бул курсту карап чыксаңыз болот.

  3. Neo4j . Эң кеңири таралган графиктер базасы. Бул графикалык маалымат моделин колдонууну каалагандар үчүн ылайыктуу масштабдуу жана туруктуу чечим. Көбүрөөк билгиңиз келсе, ушул курстан баштаңыз .

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

2018-жылы NoSQL менен

NoSQL маалымат базалары - бул кең жана тез өсүп жаткан тармак. Алар сизге мурда элестете албаган көлөмдөгү маалыматтарды сактоого жана иштетүүгө мүмкүндүк берет, бирок ал кымбатка турат. Бул маалымат базаларында реляциялык маалымат базаларында сиз жакшы билген көптөгөн функциялар жок жана аларды колдонууга өзүңүздү орнотуу кыйын болушу мүмкүн. Бирок аларды үйрөнгөндөн кийин, масштабдуу, бөлүштүрүлгөн маалымат базаларын түзө аласыз, алар таң калыштуу көлөмдөгү окуу жана жазуу суроо-талаптарын аткара алат, алар чоңураак жана чоңураак көлөмдөгү маалыматтар түзүлөт. Түпнуска: https://simpleprogrammer.com/guide-nosql-software-developers/
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION