Мақаланың аудармасы курстың басталу қарсаңында дайындалды
Негізгі оқиғалар:
- MongoDB-де міндетті емес болса да, схеманы әзірлеу өте маңызды.
- Сол сияқты, индекстер схемаға және қатынас үлгілеріңізге сәйкес келуі керек.
- Үлкен нысандар мен үлкен массивтерді пайдаланбаңыз.
- MongoDB параметрлерімен абай болыңыз, әсіресе қауіпсіздік пен сенімділікке қатысты.
- MongoDB-де сұрауды оңтайландырушы жоқ, сондықтан сұрау әрекеттерін орындау кезінде абай болу керек.
Мен дерекқорлармен өте ұзақ уақыт жұмыс істеп келемін, бірақ MongoDB жақында ғана ашылды. Мен онымен жұмыс жасамас бұрын білгім келетін бірнеше нәрсе бар. Адамның белгілі бір салада тәжірибесі болған кезде, оларда деректер базасы деген не және олар не істейтіні туралы алдын ала түсініктер болады. Басқаларға түсінуді жеңілдету үшін мен жиі кездесетін қателердің тізімін ұсынамын.
MongoDB серверін аутентификациясыз жасау
Өкінішке орай, MongoDB әдепкі бойынша аутентификациясыз орнатылады. Жергілікті қолжетімді жұмыс станциясы үшін бұл тәжірибе қалыпты. Бірақ MongoDB жадтың үлкен көлемін пайдалануды ұнататын көп пайдаланушылық жүйе болғандықтан, оны тек әзірлеу үшін пайдаланғыңыз келсе де, мүмкіндігінше жедел жады бар серверге қойғаныңыз жақсы болады. Әдепкі порт арқылы серверге орнату қиын болуы мүмкін, әсіресе сұрауда кез келген JavaScript кодын орындауға болатын болса (мысалы, $where
үшін идея ретінде
Аутентификацияның бірнеше әдістері бар, бірақ ең оңайы - пайдаланушы идентификаторын/құпия сөзді орнату. Осы идеяға негізделген сәнді аутентификация туралы ойлаған кезде пайдаланыңыз
Шабуыл бетін MongoDB-ге байланыстыруды ұмытпаңыз
,
немесе
. Деректер файлдары стандартты MongoDB жүйесінде шифрланбағандықтан, MongoDB көмегімен іске қосу мағынасы бар
Схеманы әзірлеу кезіндегі қате
MongoDB схеманы пайдаланбайды. Бірақ бұл схема қажет емес дегенді білдірмейді. Құжаттарды дәйекті үлгісіз сақтағыңыз келсе, оларды сақтау жылдам әрі оңай болуы мүмкін, бірақ оларды кейінірек шығарып алу қиын болуы мүмкін.
Классикалық мақала »
Сұрыптау тәртібін ұмытпаңыз
Сұрыптау ретін ұмыту кез келген басқа дұрыс емес конфигурацияға қарағанда көбірек көңілсіздік пен уақытты жоғалтуы мүмкін. Әдепкі бойынша MongoBD пайдаланады
Үлкен құжаттармен жинақтар жасаңыз
MongoDB коллекцияларда 16 МБ дейінгі үлкен құжаттарды орналастыруға қуанышты және
Үлкен массивтері бар құжаттарды құру
Құжаттарда массивтер болуы мүмкін. Жиымдағы элементтер саны төрт таңбалы саннан алыс болса жақсы. Егер массивке элементтер жиі қосылса, ол оны қамтитын құжаттан асып түседі және келесідей болуы керек.
MongoDB деп аталатын нәрсе бар
Сіз массивтерді индекстеусіз жасай аласыз деп ойлауыңыз мүмкін. Өкінішке орай, индекстердің болмауы басқа мәселелерге әкелуі мүмкін. Құжаттар басынан аяғына дейін сканерленетіндіктен, массивтің соңындағы элементтерді іздеу ұзағырақ уақыт алады және мұндай құжатпен байланысты операциялардың көпшілігі
Агрегациядағы кезеңдердің реті маңызды екенін ұмытпаңыз
Сұрауларды оңтайландырғышы бар дерекқор жүйесінде сіз жазған сұраулар оны қалай алуға болатынын емес, алғыңыз келетін нәрсені түсіндіреді. Бұл механизм мейрамханада тапсырыс беруге ұқсас жұмыс істейді: әдетте сіз жай ғана тағамға тапсырыс бересіз және аспазға егжей-тегжейлі нұсқаулар бермейсіз.
MongoDB-де сіз аспазға нұсқау бересіз. Мысалы, деректердің өтетініне көз жеткізу керек reduce
пайдалану құбырында мүмкіндігінше ертерек $match
и $project
, және сұрыптау кейін ғана орын алады reduce
, және іздеу дәл сіз қалаған ретпен орындалады. Қажетсіз жұмыстарды болдырмайтын, қадамдарды оңтайлы ретке келтіретін және біріктіру түрлерін таңдайтын сұрауды оңтайландырғыштың болуы сізді бұзуы мүмкін. MongoDB көмегімен сіз ыңғайлылық құнына көбірек бақылауға ие боласыз.
сияқты құралдар
Жылдам жазуды пайдалану
Ешқашан MongoDB жазу опцияларын жылдамдығы жоғары, бірақ сенімділігі төмен етіп орнатпаңыз. Бұл режим «файл және ұмыту» пәрмен жазу орындалмай тұрып қайтарылғандықтан жылдам болып көрінеді. Деректер дискіге жазылмай тұрып жүйе бұзылса, ол жоғалады және сәйкес келмейтін күйге түседі. Бақытымызға орай, 64-биттік MongoDB жүйесінде журнал жүргізу қосылған.
MMAPv1 және WiredTiger сақтау механизмдері бұның алдын алу үшін журналды пайдаланады, дегенмен WiredTiger соңғы тұрақтыға дейін қалпына келтіре алады.
Журнал жүргізу қалпына келтірілгеннен кейін дерекқордың дәйекті күйде болуын қамтамасыз етеді және журналға жазылғанша барлық деректерді сақтайды. Жазбалардың жиілігі параметр арқылы конфигурацияланады
.
Жазбаларға сенімді болу үшін конфигурация файлында журнал жүргізу қосылғанын тексеріңіз
, ал жазбалар жиілігі жоғалтуға болатын ақпарат көлеміне сәйкес келеді.
Индекссіз сұрыптау
Іздеу және жинақтау кезінде деректерді сұрыптау қажеттілігі жиі туындайды. Бұл сұрыпталатын деректер көлемін азайту үшін нәтижені сүзгілеуден кейін соңғы кезеңдердің бірінде орындалады деп үміттенейік. Және бұл жағдайда да сұрыптау үшін сізге қажет болады
Сәйкес индекс болмаса, MongoDB онсыз жасайды. Барлық құжаттардың жалпы өлшеміне 32 Мбайт жад шегі бар
Индекс қолдауынсыз іздеу
Іздеу сұраулары SQL тіліндегі JOIN операциясына ұқсас функцияны орындайды. Жақсы жұмыс істеу үшін оларға сыртқы кілт ретінде пайдаланылатын кілт мәнінің индексі қажет. Бұл анық емес, өйткені пайдалану көрсетілмейді explain()
. Мұндай индекстер жазылған индекске қосымша болып табылады explain()
, оны өз кезегінде құбыр операторлары пайдаланады $match
и $sort
, олар құбырдың басында кездескен кезде. Енді индекстер кез келген кезеңді қамтуы мүмкін
Көп жаңартуларды пайдаланудан бас тарту
Әдіс
бар құжаттың бір бөлігін немесе сіз көрсеткен параметрге байланысты толық ауыстыруға дейін бүкіл құжатты өзгерту үшін пайдаланылады.
. Опцияны орнатпасаңыз, ол жинақтағы барлық құжаттарды өңдемейтіні соншалықты анық емес
сұрау критерийлеріне сәйкес келетін барлық құжаттарды жаңарту.
Хэш кестесіндегі кілттер ретінің маңыздылығын ұмытпаңыз
JSON жүйесінде нысан нөл өлшемді немесе одан да көп атау/мән жұптарының ретсіз жиынынан тұрады, мұнда атау - жол және мән - жол, сан, логикалық, нөлдік, нысан немесе массив.
Өкінішке орай, BSON іздеу кезінде тапсырысқа көп көңіл бөледі. MongoDB ішінде кірістірілген нысандардағы кілттердің реті { firstname: "Phil", surname: "factor" }
- бұл бірдей емес { { surname: "factor", firstname: "Phil" }
. Яғни, сіз олардың табылғаныңызға сенімді болғыңыз келсе, құжаттарыңызда атау/мән жұптарының ретін сақтауыңыз керек.
Шатаспаңыз "нөл" и «белгісіз»
құн «белгісіз» сәйкес JSON-де ешқашан жарамсыз болды $null
, бұл әрқашан жақсы шешім емес.
Пайдаланыңыз $limit()
жоқ $sort()
Сіз MongoDB-де дамып жатқанда жиі сұраудан немесе жинақтаудан қайтарылатын нәтиже үлгісін көру пайдалы. Бұл тапсырма үшін сізге қажет $limit()
, бірақ бұрын пайдаланбасаңыз, ол ешқашан соңғы кодта болмауы керек $sort
. Бұл механик қажет, өйткені әйтпесе нәтиже ретіне кепілдік бере алмайсыз және деректерді сенімді түрде көре алмайсыз. Нәтиженің жоғарғы жағында сұрыптауға байланысты әртүрлі жазбалар аласыз. Сенімді жұмыс істеу үшін сұраулар мен біріктірулер детерминирленген болуы керек, яғни олар орындалған сайын бірдей нәтижелер береді. Құрамында код $limit()
, бірақ жоқ $sort
, детерминирленген болмайды және кейіннен қадағалау қиын болатын қателерді тудыруы мүмкін.
қорытынды
MongoDB-тен көңілін қалдырудың жалғыз жолы - оны ДҚБЖ сияқты дерекқордың басқа түрімен тікелей салыстыру немесе белгілі бір күтулерге негізделген оны пайдалануға келу. Бұл апельсинді шанышқымен салыстыру сияқты. Мәліметтер базасы жүйелері белгілі бір мақсаттарға қызмет етеді. Бұл айырмашылықтарды өзіңіз түсініп, бағалағаныңыз дұрыс. MongoDB әзірлеушілеріне оларды ДҚБЖ жолынан төмен түсіретін жолға қысым жасау ұят болар еді. Деректер тұтастығын қамтамасыз ету және сәтсіздікке және зиянды шабуылдарға төзімді деректер жүйелерін құру сияқты ескі мәселелерді шешудің жаңа және қызықты жолдарын көргім келеді.
MongoDB ACID транзакциялық мүмкіндігін 4.0 нұсқасында енгізуі инновациялық жолмен маңызды жақсартуларды енгізудің жақсы мысалы болып табылады. Көп құжатты және көп мәлімдемелі транзакциялар енді атомдық болып табылады. Сондай-ақ құлыптарды алу және тұрып қалған транзакцияларды тоқтату үшін қажетті уақытты реттеуге, сондай-ақ оқшаулау деңгейін өзгертуге болады.
Ары қарай оқу:
Ақпарат көзі: www.habr.com