వ్యాసం యొక్క అనువాదం కోర్సు ప్రారంభం సందర్భంగా తయారు చేయబడింది
ముఖ్యాంశాలు:
- MongoDBలో ఐచ్ఛికం అయినప్పటికీ స్కీమాను అభివృద్ధి చేయడం చాలా ముఖ్యం.
- అలాగే, ఇండెక్స్లు తప్పనిసరిగా మీ స్కీమా మరియు యాక్సెస్ ప్యాటర్న్లకు సరిపోలాలి.
- పెద్ద వస్తువులు మరియు పెద్ద శ్రేణులను ఉపయోగించడం మానుకోండి.
- మొంగోడిబి సెట్టింగ్లతో జాగ్రత్తగా ఉండండి, ప్రత్యేకించి భద్రత మరియు విశ్వసనీయత విషయానికి వస్తే.
- MongoDBకి క్వెరీ ఆప్టిమైజర్ లేదు, కాబట్టి మీరు క్వెరీ ఆపరేషన్లు చేస్తున్నప్పుడు జాగ్రత్తగా ఉండాలి.
నేను చాలా కాలంగా డేటాబేస్లతో పని చేస్తున్నాను, కానీ ఇటీవలే MongoDBని కనుగొన్నాను. నేను దానితో పనిచేయడం ప్రారంభించే ముందు కొన్ని విషయాలు తెలుసుకోవాలనుకుంటున్నాను. ఒక వ్యక్తికి ఇప్పటికే ఒక నిర్దిష్ట రంగంలో అనుభవం ఉన్నప్పుడు, డేటాబేస్లు అంటే ఏమిటి మరియు వారు ఏమి చేస్తారు అనే దాని గురించి వారు ముందస్తు ఆలోచనలను కలిగి ఉంటారు. ఇతరులకు సులభంగా అర్థమయ్యేలా చేయాలనే ఆశతో, నేను సాధారణ తప్పుల జాబితాను అందిస్తున్నాను.
ప్రామాణీకరణ లేకుండా MongoDB సర్వర్ని సృష్టిస్తోంది
దురదృష్టవశాత్తూ, మొంగోడిబి డిఫాల్ట్గా ప్రామాణీకరణ లేకుండా ఇన్స్టాల్ చేయబడింది. స్థానికంగా యాక్సెస్ చేయబడిన వర్క్స్టేషన్ కోసం, ఈ అభ్యాసం సాధారణం. కానీ మొంగోడిబి అనేది పెద్ద మొత్తంలో మెమరీని ఉపయోగించడానికి ఇష్టపడే బహుళ-వినియోగదారు సిస్టమ్ కాబట్టి, మీరు దీన్ని డెవలప్మెంట్ కోసం మాత్రమే ఉపయోగించబోతున్నప్పటికీ, వీలైనంత ఎక్కువ RAM ఉన్న సర్వర్లో ఉంచడం మంచిది. డిఫాల్ట్ పోర్ట్ ద్వారా సర్వర్లో ఇన్స్టాల్ చేయడం సమస్యాత్మకంగా ఉంటుంది, ప్రత్యేకించి ఏదైనా జావాస్క్రిప్ట్ కోడ్ అభ్యర్థనలో అమలు చేయగలిగితే (ఉదాహరణకు, $where
కోసం ఒక ఆలోచనగా
అనేక ప్రామాణీకరణ పద్ధతులు ఉన్నాయి, కానీ వినియోగదారు ID/పాస్వర్డ్ను సెట్ చేయడం సులభమయినది. దీని ఆధారంగా ఫాన్సీ ప్రమాణీకరణ గురించి మీరు ఆలోచించేటప్పుడు ఈ ఆలోచనను ఉపయోగించండి
మీ దాడి ఉపరితలాన్ని MongoDBకి బంధించడం మర్చిపోవద్దు
,
లేదా
. డేటా ఫైల్లు ప్రామాణిక MongoDBలో గుప్తీకరించబడనందున, MongoDBని దీనితో అమలు చేయడం అర్ధమే.
సర్క్యూట్ను అభివృద్ధి చేస్తున్నప్పుడు లోపం
MongoDB స్కీమాను ఉపయోగించదు. కానీ పథకం అవసరం లేదని దీని అర్థం కాదు. మీరు ఏ విధమైన స్థిరమైన నమూనా లేకుండా పత్రాలను నిల్వ చేయాలనుకుంటే, వాటిని త్వరగా మరియు సులభంగా నిల్వ చేయవచ్చు, కానీ వాటిని తర్వాత తిరిగి పొందడం కష్టం.
క్లాసిక్ వ్యాసం "
క్రమబద్ధీకరణను మర్చిపోవద్దు
ఏ ఇతర తప్పు కాన్ఫిగరేషన్ కంటే క్రమబద్ధీకరణను మరచిపోవడం వలన ఎక్కువ నిరాశ మరియు ఎక్కువ సమయం వృధా అవుతుంది. డిఫాల్ట్గా MongoBD ఉపయోగిస్తుంది
పెద్ద పత్రాలతో సేకరణలను సృష్టించండి
MongoDB సేకరణలలో 16MB వరకు పెద్ద డాక్యుమెంట్లను హోస్ట్ చేయడం సంతోషంగా ఉంది మరియు
పెద్ద శ్రేణులతో పత్రాలను సృష్టిస్తోంది
పత్రాలు శ్రేణులను కలిగి ఉండవచ్చు. శ్రేణిలోని మూలకాల సంఖ్య నాలుగు అంకెల సంఖ్యకు దూరంగా ఉంటే ఉత్తమం. శ్రేణికి ఎలిమెంట్లు తరచుగా జోడించబడితే, అది దానిని కలిగి ఉన్న డాక్యుమెంట్ను అధిగమిస్తుంది మరియు అలా ఉండాలి
MongoDB అని పిలవబడేది ఉంది
మీరు అర్రే ఇండెక్సింగ్ లేకుండా చేయగలరని మీరు అనుకోవచ్చు. దురదృష్టవశాత్తూ, సూచికల కొరత మీకు ఇతర సమస్యలను కలిగిస్తుంది. పత్రాలు ప్రారంభం నుండి ముగింపు వరకు స్కాన్ చేయబడినందున, శ్రేణి చివరిలో మూలకాల కోసం శోధించడానికి ఎక్కువ సమయం పడుతుంది మరియు అటువంటి పత్రంతో అనుబంధించబడిన చాలా కార్యకలాపాలు
అగ్రిగేషన్లో దశల క్రమం ముఖ్యమైనదని మర్చిపోవద్దు
క్వెరీ ఆప్టిమైజర్తో కూడిన డేటాబేస్ సిస్టమ్లో, మీరు వ్రాసే ప్రశ్నలు మీరు ఏమి పొందాలనుకుంటున్నారో వివరణలు, వాటిని ఎలా పొందాలో కాదు. ఈ మెకానిజం రెస్టారెంట్లో ఆర్డరింగ్తో సారూప్యతతో పనిచేస్తుంది: సాధారణంగా మీరు కేవలం డిష్ను ఆర్డర్ చేస్తారు మరియు కుక్కు వివరణాత్మక సూచనలను ఇవ్వకండి.
మొంగోడిబిలో, మీరు కుక్ని నిర్దేశిస్తారు. ఉదాహరణకు, మీరు డేటా పాస్ అయినట్లు నిర్ధారించుకోవాలి reduce
ఉపయోగించి పైప్లైన్లో వీలైనంత త్వరగా $match
и $project
, మరియు సార్టింగ్ తర్వాత మాత్రమే జరుగుతుంది reduce
, మరియు శోధన సరిగ్గా మీకు కావలసిన క్రమంలో జరుగుతుంది. క్వెరీ ఆప్టిమైజర్ని కలిగి ఉండటం వలన అనవసరమైన పనిని తొలగించడం, దశలను ఉత్తమంగా క్రమం చేయడం మరియు జాయిన్ రకాలను ఎంచుకోవడం వంటివి మిమ్మల్ని పాడు చేస్తాయి. మొంగోడిబితో, మీకు సౌలభ్యం ఖర్చుతో మరింత నియంత్రణ ఉంటుంది.
వంటి సాధనాలు
త్వరిత రికార్డింగ్ని ఉపయోగించడం
మోంగోడిబి వ్రాత ఎంపికలను అధిక వేగంతో కానీ తక్కువ విశ్వసనీయతను కలిగి ఉండేలా ఎప్పుడూ సెట్ చేయవద్దు. ఈ మోడ్ "ఫైల్ మరియు మరచిపో" వ్రాత సంభవించే ముందు కమాండ్ తిరిగి వచ్చినందున వేగంగా అనిపిస్తుంది. డేటా డిస్క్కి వ్రాయబడటానికి ముందు సిస్టమ్ క్రాష్ అయినట్లయితే, అది పోతుంది మరియు అస్థిరమైన స్థితిలో ముగుస్తుంది. అదృష్టవశాత్తూ, 64-బిట్ MongoDB లాగింగ్ ప్రారంభించబడింది.
MMAPv1 మరియు WiredTiger స్టోరేజ్ ఇంజిన్లు దీన్ని నిరోధించడానికి లాగింగ్ని ఉపయోగిస్తాయి, అయినప్పటికీ WiredTiger చివరి స్థిరమైన స్థితికి తిరిగి రాగలదు.
జర్నలింగ్ డేటాబేస్ రికవరీ తర్వాత స్థిరమైన స్థితిలో ఉందని నిర్ధారిస్తుంది మరియు లాగ్కు వ్రాయబడే వరకు మొత్తం డేటాను అలాగే ఉంచుతుంది. రికార్డింగ్ల ఫ్రీక్వెన్సీ పరామితిని ఉపయోగించి కాన్ఫిగర్ చేయబడింది
.
ఎంట్రీల గురించి నిర్ధారించుకోవడానికి, కాన్ఫిగరేషన్ ఫైల్లో లాగింగ్ ప్రారంభించబడిందని నిర్ధారించుకోండి
, మరియు రికార్డింగ్ల ఫ్రీక్వెన్సీ మీరు కోల్పోయేంత సమాచారం యొక్క మొత్తానికి అనుగుణంగా ఉంటుంది.
సూచిక లేకుండా క్రమబద్ధీకరించడం
శోధిస్తున్నప్పుడు మరియు సమీకరించేటప్పుడు, తరచుగా డేటాను క్రమబద్ధీకరించడం అవసరం. క్రమబద్ధీకరించబడుతున్న డేటా మొత్తాన్ని తగ్గించడానికి ఫలితాన్ని ఫిల్టర్ చేసిన తర్వాత, ఇది చివరి దశల్లో ఒకదానిలో జరుగుతుందని ఆశిద్దాం. మరియు ఈ సందర్భంలో కూడా, సార్టింగ్ కోసం మీకు అవసరం
తగిన సూచిక లేకపోతే, MongoDB అది లేకుండా చేస్తుంది. అన్ని పత్రాల మొత్తం పరిమాణంపై 32 MB మెమరీ పరిమితి ఉంది
ఇండెక్స్ మద్దతు లేకుండా శోధించండి
శోధన ప్రశ్నలు SQLలో JOIN ఆపరేషన్ మాదిరిగానే ఒక ఫంక్షన్ను నిర్వహిస్తాయి. ఉత్తమంగా పని చేయడానికి, వారికి విదేశీ కీగా ఉపయోగించే కీ విలువ యొక్క సూచిక అవసరం. ఉపయోగం ప్రతిబింబించనందున ఇది స్పష్టంగా లేదు explain()
. అటువంటి సూచికలు వ్రాసిన సూచికకు అదనంగా ఉంటాయి explain()
, ఇది పైప్లైన్ ఆపరేటర్లచే ఉపయోగించబడుతుంది $match
и $sort
, వారు పైప్లైన్ ప్రారంభంలో కలిసినప్పుడు. సూచికలు ఇప్పుడు ఏ దశనైనా కవర్ చేయగలవు
బహుళ-నవీకరణలను ఉపయోగించడం నిలిపివేస్తోంది
పద్ధతి
మీరు పేర్కొన్న పరామితిని బట్టి, ఇప్పటికే ఉన్న పత్రంలో కొంత భాగాన్ని లేదా పూర్తి పత్రాన్ని పూర్తిగా భర్తీ చేసే వరకు మార్చడానికి ఉపయోగిస్తారు
. మీరు ఎంపికను సెట్ చేస్తే మినహా సేకరణలోని అన్ని పత్రాలను ఇది ప్రాసెస్ చేయదు అనేది అంత స్పష్టంగా లేదు
అభ్యర్థన ప్రమాణాలకు అనుగుణంగా ఉన్న అన్ని పత్రాలను నవీకరించడానికి.
హాష్ పట్టికలో కీల క్రమం యొక్క ప్రాముఖ్యతను మర్చిపోవద్దు
JSONలో, ఒక వస్తువు పరిమాణం సున్నా లేదా అంతకంటే ఎక్కువ పేరు/విలువ జతల యొక్క క్రమం లేని సేకరణను కలిగి ఉంటుంది, ఇక్కడ పేరు ఒక స్ట్రింగ్ మరియు విలువ అనేది స్ట్రింగ్, నంబర్, బూలియన్, శూన్య, ఆబ్జెక్ట్ లేదా అర్రే.
దురదృష్టవశాత్తూ, శోధిస్తున్నప్పుడు BSON ఆర్డర్పై ఎక్కువ ప్రాధాన్యతనిస్తుంది. మొంగోడిబిలో, అంతర్నిర్మిత వస్తువులలోని కీల క్రమం { firstname: "Phil", surname: "factor" }
- ఇది అదే కాదు { { surname: "factor", firstname: "Phil" }
. అంటే, మీరు వాటిని ఖచ్చితంగా కనుగొనాలనుకుంటే మీ పత్రాలలో పేరు/విలువ జతల క్రమాన్ని తప్పనిసరిగా నిల్వ చేయాలి.
తికమక పడకండి "శూన్య" и "నిర్వచించబడని"
విలువ "నిర్వచించబడని" ప్రకారం, JSONలో ఎప్పుడూ చెల్లుబాటు కాదు $null
, ఇది ఎల్లప్పుడూ మంచి పరిష్కారం కాదు.
ఉపయోగం $limit()
లేకుండా $sort()
చాలా తరచుగా మీరు MongoDBలో అభివృద్ధి చేస్తున్నప్పుడు, ప్రశ్న లేదా సముదాయం నుండి తిరిగి వచ్చే ఫలితం యొక్క నమూనాను చూడటం ఉపయోగకరంగా ఉంటుంది. ఈ పని కోసం మీరు అవసరం $limit()
, కానీ మీరు ఇంతకు ముందు ఉపయోగించకపోతే అది తుది కోడ్లో ఉండకూడదు $sort
. ఈ మెకానిక్ అవసరం ఎందుకంటే మీరు ఫలితం యొక్క క్రమానికి హామీ ఇవ్వలేరు మరియు మీరు డేటాను విశ్వసనీయంగా వీక్షించలేరు. ఫలితం ఎగువన మీరు సార్టింగ్ ఆధారంగా వేర్వేరు ఎంట్రీలను పొందుతారు. విశ్వసనీయంగా పని చేయడానికి, క్వెరీలు మరియు అగ్రిగేషన్లు తప్పనిసరిగా నిర్ణయాత్మకంగా ఉండాలి, అంటే అవి అమలు చేయబడిన ప్రతిసారీ అదే ఫలితాలను అందించాలి. కలిగి ఉన్న కోడ్ $limit()
, కానీ కాదు $sort
, ఇది నిర్ణయాత్మకమైనది కాదు మరియు తదనంతరం లోపాలను కలిగించవచ్చు, అది ట్రాక్ చేయడం కష్టమవుతుంది.
తీర్మానం
MongoDBతో నిరాశ చెందడానికి ఏకైక మార్గం ఏమిటంటే, దానిని DBMS వంటి మరొక రకమైన డేటాబేస్తో నేరుగా పోల్చడం లేదా నిర్దిష్ట అంచనాల ఆధారంగా దానిని ఉపయోగించడం. ఇది నారింజను ఫోర్క్తో పోల్చడం లాంటిది. డేటాబేస్ వ్యవస్థలు నిర్దిష్ట ప్రయోజనాలను అందిస్తాయి. మీ కోసం ఈ తేడాలను అర్థం చేసుకోవడం మరియు అభినందించడం ఉత్తమం. మొంగోడిబి డెవలపర్లను డిబిఎంఎస్ మార్గంలోకి నెట్టివేసే మార్గంపై ఒత్తిడి చేయడం సిగ్గుచేటు. డేటా సమగ్రతను నిర్ధారించడం మరియు వైఫల్యం మరియు హానికరమైన దాడులను తట్టుకునే డేటా సిస్టమ్లను సృష్టించడం వంటి పాత సమస్యలను పరిష్కరించడానికి నేను కొత్త మరియు ఆసక్తికరమైన మార్గాలను చూడాలనుకుంటున్నాను.
సంస్కరణ 4.0లో MongoDB యొక్క ACID లావాదేవీల పరిచయం వినూత్న మార్గంలో ముఖ్యమైన మెరుగుదలలను పరిచయం చేయడానికి మంచి ఉదాహరణ. బహుళ-పత్రాలు మరియు బహుళ-స్టేట్మెంట్ లావాదేవీలు ఇప్పుడు పరమాణువు. లాక్లను పొందేందుకు మరియు నిలిచిపోయిన లావాదేవీలను ముగించడానికి, అలాగే ఐసోలేషన్ స్థాయిని మార్చడానికి అవసరమైన సమయాన్ని సర్దుబాటు చేయడం కూడా సాధ్యమే.
ఇంకా చదవండి:
మూలం: www.habr.com