MongoDB కూడా సరైన ఎంపిక కాదా?

అది నాకు ఇటీవలే తెలిసింది Red Hat శాటిలైట్ నుండి MongoDB మద్దతును తొలగిస్తుంది (లైసెన్స్ మార్పుల కారణంగా వారు అంటున్నారు). ఇది నన్ను ఆలోచింపజేసింది ఎందుకంటే గత కొన్ని సంవత్సరాలలో నేను MongoDB ఎంత భయంకరమైనది మరియు ఎవరూ దానిని ఎలా ఉపయోగించకూడదు అనే దాని గురించి టన్నుల కొద్దీ కథనాలను చూశాను. కానీ ఈ సమయంలో, MongoDB మరింత పరిణతి చెందిన ఉత్పత్తిగా మారింది. ఏం జరిగింది? కొత్త DBMS యొక్క ప్రారంభ మార్కెటింగ్‌లో జరిగిన పొరపాట్ల వల్ల నిజంగా ద్వేషం ఏర్పడిందా? లేదా ప్రజలు మొంగోడిబిని తప్పు ప్రదేశాల్లో ఉపయోగిస్తున్నారా?

నేను MongoDBని సమర్థిస్తున్నట్లు మీకు అనిపిస్తే, దయచేసి చదవండి నిరాకరణ వ్యాసం చివరలో.

కొత్త ట్రెండ్

నేను చెప్పగలిగిన దానికంటే ఎక్కువ సంవత్సరాలుగా సాఫ్ట్‌వేర్ పరిశ్రమలో పని చేస్తున్నాను, కానీ నేను ఇప్పటికీ మన పరిశ్రమను తాకిన ట్రెండ్‌లలో కొంత భాగాన్ని మాత్రమే బహిర్గతం చేస్తున్నాను. నేను 4GL, AOP, Agile, SOA, Web 2.0, AJAX, Blockchain ల పెరుగుదలను చూశాను... జాబితా అంతులేనిది. ప్రతి సంవత్సరం కొత్త పోకడలు కనిపిస్తాయి. కొన్ని త్వరగా మసకబారతాయి, మరికొన్ని ప్రాథమికంగా సాఫ్ట్‌వేర్ అభివృద్ధి మార్గాన్ని మారుస్తాయి.

ప్రతి కొత్త ట్రెండ్ ఒక సాధారణ ఉత్సాహాన్ని సృష్టిస్తుంది: వ్యక్తులు పైకి దూకుతారు లేదా ఇతరులు సృష్టించే శబ్దాన్ని చూసి గుంపును అనుసరించండి. ఈ ప్రక్రియ గార్ట్‌నర్ ద్వారా క్రోడీకరించబడింది హైప్ చక్రం. వివాదాస్పదమైనప్పటికీ, ఈ టైమ్‌లైన్ సాంకేతికతలు చివరికి ఉపయోగకరంగా మారడానికి ముందు వాటికి ఏమి జరుగుతుందో వివరిస్తుంది.

కానీ కాలానుగుణంగా ఒక నిర్దిష్ట అమలు ద్వారా మాత్రమే నడపబడే కొత్త ఆవిష్కరణ కనిపిస్తుంది (లేదా ఈ సందర్భంలో రెండవ రాకడ ఉంది). NoSQL విషయంలో, మొంగోడిబి యొక్క ఆవిర్భావం మరియు ఉల్క పెరుగుదల ద్వారా హైప్ భారీగా నడపబడింది. MongoDB ఈ ధోరణిని ప్రారంభించలేదు: వాస్తవానికి, పెద్ద ఇంటర్నెట్ కంపెనీలు పెద్ద మొత్తంలో డేటాను ప్రాసెస్ చేయడంలో సమస్యలను కలిగి ఉన్నాయి, ఇది నాన్-రిలేషనల్ డేటాబేస్‌ల తిరిగి రావడానికి దారితీసింది. మొత్తం ఉద్యమం Google యొక్క Bigtable మరియు Facebook యొక్క Cassandra వంటి ప్రాజెక్ట్‌లతో ప్రారంభమైంది, అయితే ఇది చాలా మంది డెవలపర్‌లకు యాక్సెస్‌ను కలిగి ఉన్న అత్యంత ప్రసిద్ధ మరియు ప్రాప్యత చేయగల NoSQL డేటాబేస్ అమలుగా మారింది MongoDB.

గమనిక: నేను డాక్యుమెంట్ డేటాబేస్‌లను స్తంభాల డేటాబేస్‌లు, కీ/వాల్యూ స్టోర్‌లు లేదా సాధారణ NoSQL నిర్వచనం కిందకు వచ్చే అనేక ఇతర రకాల డేటా స్టోర్‌లతో గందరగోళానికి గురిచేస్తున్నానని మీరు అనుకోవచ్చు. మరియు మీరు చెప్పింది నిజమే. అయితే ఆ సమయంలో గందరగోళం నెలకొంది. ప్రతి ఒక్కరూ NoSQL పట్ల నిమగ్నమై ఉన్నారు, ఇది ప్రతిఒక్కరూ మారింది ఖచ్చితంగా చాలా మంది వివిధ సాంకేతికతలలో తేడాలను చూడనప్పటికీ అవసరం. చాలా మందికి, MongoDB మారింది పర్యాయపదంగా NoSQL.

మరియు డెవలపర్లు దానిపైకి దూసుకెళ్లారు. ఏదైనా సమస్యను పరిష్కరించడానికి అద్భుతంగా స్కేల్ చేసే స్కీమాలెస్ డేటాబేస్ యొక్క ఆలోచన చాలా ఉత్సాహంగా ఉంది. 2014 నాటికి, ఒక సంవత్సరం క్రితం MySQL, Postgres లేదా SQL సర్వర్ వంటి రిలేషనల్ డేటాబేస్ ఉపయోగించిన ప్రతిచోటా MongoDB డేటాబేస్‌లను అమలు చేయడం ప్రారంభించినట్లు అనిపించింది. ఎందుకు అని అడిగినప్పుడు, మీరు సామాన్యమైన “ఇది వెబ్ స్కేల్” నుండి మరింత ఆలోచనాత్మకమైన “నా డేటా చాలా వదులుగా నిర్మాణాత్మకంగా ఉంది మరియు స్కీమా లేని డేటాబేస్‌కి బాగా సరిపోతుంది” అనే సమాధానాన్ని పొందవచ్చు.

మొంగోడిబి మరియు సాధారణంగా డాక్యుమెంట్ డేటాబేస్‌లు సాంప్రదాయ రిలేషనల్ డేటాబేస్‌లతో అనేక సమస్యలను పరిష్కరిస్తాయని గుర్తుంచుకోవడం ముఖ్యం:

  • కఠినమైన పథకం: రిలేషనల్ డేటాబేస్‌తో, మీరు డైనమిక్‌గా డేటాను రూపొందించినట్లయితే, మీరు డేటా యొక్క యాదృచ్ఛిక "ఇతర" కాలమ్‌ల సమూహాన్ని సృష్టించవలసి ఉంటుంది, డేటా యొక్క బ్లాబ్‌లను అక్కడకు నెట్టండి లేదా కాన్ఫిగరేషన్‌ని ఉపయోగించండి EAV...ఇవన్నీ ముఖ్యమైన లోపాలను కలిగి ఉన్నాయి.
  • స్కేలింగ్ కష్టం: ఒక సర్వర్‌లో సరిపోని చాలా డేటా ఉన్నట్లయితే, MongoDB దానిని బహుళ మెషీన్‌లలో స్కేల్ చేయడానికి అనుమతించే మెకానిజమ్‌లను అందించింది.
  • కాంప్లెక్స్ సర్క్యూట్ మార్పులు: వలసలు లేవు! రిలేషనల్ డేటాబేస్లో, డేటాబేస్ నిర్మాణాన్ని మార్చడం చాలా పెద్ద సమస్యగా ఉంటుంది (ముఖ్యంగా చాలా డేటా ఉన్నప్పుడు). MongoDB ప్రక్రియను చాలా సులభతరం చేయగలిగింది. మరియు ఇది చాలా సులభతరం చేసింది, మీరు వెళ్లేటప్పుడు మీరు సర్క్యూట్‌ను నవీకరించవచ్చు మరియు చాలా త్వరగా ముందుకు సాగవచ్చు.
  • రికార్డింగ్ పనితీరు: మొంగోడిబి పనితీరు బాగుంది, ప్రత్యేకించి సరిగ్గా కాన్ఫిగర్ చేసినప్పుడు. MongoDB యొక్క అవుట్-ఆఫ్-ది-బాక్స్ కాన్ఫిగరేషన్ కూడా, ఇది తరచుగా విమర్శించబడేది, కొన్ని అద్భుతమైన పనితీరు సంఖ్యలను చూపింది.

అన్ని ప్రమాదాలు మీపై ఉన్నాయి

MongoDB యొక్క సంభావ్య ప్రయోజనాలు అపారమైనవి, ప్రత్యేకించి కొన్ని తరగతుల సమస్యలకు. మీరు సందర్భాన్ని అర్థం చేసుకోకుండా మరియు అనుభవం లేకుండా పై జాబితాను చదివితే, MongoDB నిజంగా విప్లవాత్మక DBMS అనే అభిప్రాయాన్ని మీరు పొందవచ్చు. ఒకే సమస్య ఏమిటంటే, పైన జాబితా చేయబడిన ప్రయోజనాలు అనేక హెచ్చరికలతో వచ్చాయి, వాటిలో కొన్ని క్రింద జాబితా చేయబడ్డాయి.

నిజం చెప్పాలంటే, 10gen/MongoDB Incలో ఎవరూ లేరు. కిందివి నిజం కాదని చెప్పను, ఇవి కేవలం రాజీలు మాత్రమే.

  • కోల్పోయిన లావాదేవీలు: లావాదేవీలు అనేక రిలేషనల్ డేటాబేస్‌ల యొక్క ప్రధాన లక్షణం (అన్నీ కాదు, చాలా వరకు). లావాదేవీ అంటే మీరు పరమాణుపరంగా బహుళ కార్యకలాపాలను నిర్వహించగలరు మరియు డేటా స్థిరంగా ఉండేలా చూసుకోవచ్చు. వాస్తవానికి, NoSQL డేటాబేస్‌తో, లావాదేవీలు ఒకే డాక్యుమెంట్‌లో ఉండవచ్చు లేదా లావాదేవీ అర్థాలను పొందడానికి మీరు రెండు-దశల కమిట్‌లను ఉపయోగించవచ్చు. కానీ మీరు ఈ కార్యాచరణను మీరే అమలు చేయాలి... ఇది చాలా కష్టమైన మరియు సమయం తీసుకునే పని. డేటాబేస్‌లోని డేటా చెల్లుబాటు కాని స్థితిలో ఉన్నట్లు మీరు చూసే వరకు సమస్య ఉందని తరచుగా మీరు గ్రహించలేరు ఎందుకంటే ఆపరేషన్‌ల పరమాణువు హామీ ఇవ్వబడదు. గమనిక: మొంగోడిబి 4.0 గత సంవత్సరం లావాదేవీలను ప్రవేశపెట్టిందని చాలా మంది నాకు చెప్పారు, కానీ కొన్ని పరిమితులతో. కథనం నుండి టేక్‌అవే అలాగే ఉంది: సాంకేతికత మీ అవసరాలను ఎంతవరకు తీరుస్తుందో అంచనా వేయండి.
  • రిలేషనల్ ఇంటెగ్రిటీ కోల్పోవడం (విదేశీ కీలు): మీ డేటాకు సంబంధాలు ఉన్నట్లయితే, మీరు వాటిని అప్లికేషన్‌లో వర్తింపజేయాలి. ఈ సంబంధాలను గౌరవించే డేటాబేస్ కలిగి ఉండటం వలన అప్లికేషన్ మరియు మీ ప్రోగ్రామర్లు చాలా పనిని కోల్పోతారు.
  • డేటా నిర్మాణాన్ని వర్తించే సామర్థ్యం లేకపోవడం: కఠినమైన స్కీమాలు కొన్నిసార్లు పెద్ద సమస్య కావచ్చు, కానీ అవి తెలివిగా ఉపయోగించినట్లయితే మంచి డేటా స్ట్రక్చరింగ్‌కు శక్తివంతమైన మెకానిజం కూడా. MongoDB వంటి డాక్యుమెంట్ డేటాబేస్‌లు అపురూపమైన స్కీమా సౌలభ్యాన్ని అందిస్తాయి, అయితే ఈ సౌలభ్యం డేటాను శుభ్రంగా ఉంచే బాధ్యతను తొలగిస్తుంది. మీరు వాటిని జాగ్రత్తగా చూసుకోకపోతే, మీరు ఆశించిన ఫారమ్‌లో నిల్వ చేయని డేటా కోసం మీ అప్లికేషన్‌లో చాలా కోడ్‌లను వ్రాయడం ముగుస్తుంది. మేము మా కంపెనీ సింపుల్ థ్రెడ్‌లో తరచుగా చెప్పినట్లు... అప్లికేషన్ ఏదో ఒక రోజు తిరిగి వ్రాయబడుతుంది, కానీ డేటా శాశ్వతంగా ఉంటుంది. గమనిక: MongoDB స్కీమా తనిఖీకి మద్దతు ఇస్తుంది: ఇది ఉపయోగకరంగా ఉంటుంది, కానీ రిలేషనల్ డేటాబేస్‌లో ఉన్న హామీలను అందించదు. అన్నింటిలో మొదటిది, స్కీమా తనిఖీని జోడించడం లేదా మార్చడం సేకరణలో ఇప్పటికే ఉన్న డేటాను ప్రభావితం చేయదు. కొత్త స్కీమా ప్రకారం మీరు డేటాను అప్‌డేట్ చేస్తారని నిర్ధారించుకోవడం మీ ఇష్టం. ఇది మీ అవసరాలకు సరిపోతుందా అని మీరే నిర్ణయించుకోండి.
  • స్థానిక ప్రశ్న భాష / సాధన పర్యావరణ వ్యవస్థ నష్టం: SQL యొక్క ఆగమనం ఒక సంపూర్ణ విప్లవం మరియు అప్పటి నుండి ఏమీ మారలేదు. ఇది చాలా శక్తివంతమైన భాష, కానీ చాలా క్లిష్టమైనది. JSON శకలాలు కలిగి ఉన్న కొత్త భాషలో డేటాబేస్ ప్రశ్నలను నిర్మించాల్సిన అవసరాన్ని SQLతో పనిచేసిన అనుభవం ఉన్న వ్యక్తులు వెనుకకు పెద్ద అడుగుగా పరిగణిస్తారు. IDEల నుండి రిపోర్టింగ్ సాధనాల వరకు SQL డేటాబేస్‌లతో పరస్పర చర్య చేసే సాధనాల యొక్క మొత్తం విశ్వం ఉంది. SQLకి మద్దతివ్వని డేటాబేస్‌కు వెళ్లడం అంటే మీరు ఈ సాధనాలను చాలా వరకు ఉపయోగించలేరు లేదా వాటిని ఉపయోగించడానికి మీరు డేటాను SQLలోకి అనువదించవలసి ఉంటుంది, ఇది మీరు అనుకున్నదానికంటే చాలా కష్టంగా ఉంటుంది.

మొంగోడిబిని ఆశ్రయించిన చాలా మంది డెవలపర్‌లు ట్రేడ్-ఆఫ్‌లను నిజంగా అర్థం చేసుకోలేదు మరియు తమ ప్రాథమిక డేటా స్టోర్‌గా దీన్ని ఇన్‌స్టాల్ చేయడంలో తరచుగా తలమునకలై ఉన్నారు. దీని తర్వాత తిరిగి రావడం చాలా కష్టంగా ఉండేది.

భిన్నంగా ఏమి చేయగలిగింది?

అందరూ తల దూకి కిందికి కొట్టలేదు. కానీ చాలా ప్రాజెక్ట్‌లు మొంగోడిబిని సరిపోని ప్రదేశాలలో ఇన్‌స్టాల్ చేశాయి - మరియు వారు చాలా సంవత్సరాలు దానితో జీవించవలసి ఉంటుంది. ఈ సంస్థలు కొంత సమయం వెచ్చించి, తమ సాంకేతికత ఎంపికల ద్వారా పద్దతిగా ఆలోచించి ఉంటే, చాలా మంది వేర్వేరు ఎంపికలు చేసి ఉండేవారు.

సరైన సాంకేతికతను ఎలా ఎంచుకోవాలి? సాంకేతిక అంచనా కోసం ఒక క్రమబద్ధమైన ఫ్రేమ్‌వర్క్‌ను రూపొందించడానికి అనేక ప్రయత్నాలు జరిగాయి "సాఫ్ట్‌వేర్ సంస్థలలో సాంకేతికతలను ప్రవేశపెట్టడానికి ఫ్రేమ్‌వర్క్" и "సాఫ్ట్‌వేర్ టెక్నాలజీలను అంచనా వేయడానికి ఫ్రేమ్‌వర్క్", కానీ ఇది అనవసరమైన సంక్లిష్టత అని నాకు అనిపిస్తోంది.

కేవలం రెండు ప్రాథమిక ప్రశ్నలను అడగడం ద్వారా అనేక సాంకేతికతలను తెలివిగా అంచనా వేయవచ్చు. సమస్య ఏమిటంటే వారికి బాధ్యతాయుతంగా సమాధానం ఇవ్వగల వ్యక్తులను కనుగొనడం, సమాధానాలను కనుగొనడానికి మరియు పక్షపాతం లేకుండా సమయాన్ని వెచ్చించడం.

మీరు ఏ సమస్యను ఎదుర్కోకపోతే, మీకు కొత్త సాధనం అవసరం లేదు. చుక్క.

ప్రశ్న 1: నేను ఏ సమస్యలను పరిష్కరించడానికి ప్రయత్నిస్తున్నాను?

మీరు ఏ సమస్యను ఎదుర్కోకపోతే, మీకు కొత్త సాధనం అవసరం లేదు. చుక్క. పరిష్కారం కోసం వెతకాల్సిన అవసరం లేదు, ఆపై సమస్యను కనుగొనడం అవసరం. మీ ప్రస్తుత సాంకేతికత కంటే కొత్త సాంకేతికత మెరుగ్గా పరిష్కరిస్తున్న సమస్యను మీరు ఎదుర్కొంటే తప్ప, ఇక్కడ చర్చించడానికి ఏమీ లేదు. మీరు ఈ సాంకేతికతను ఉపయోగించడం గురించి ఆలోచిస్తున్నట్లయితే, ఇతరులు దీనిని ఉపయోగించడాన్ని మీరు చూసినందున, వారు ఎలాంటి సమస్యలను ఎదుర్కొంటున్నారో ఆలోచించండి మరియు మీకు ఆ సమస్యలు ఉన్నాయా అని అడగండి. సాంకేతికతను ఇతరులు ఉపయోగిస్తున్నందున అంగీకరించడం సులభం, మీరు అదే సమస్యలను ఎదుర్కొంటున్నారో లేదో అర్థం చేసుకోవడం సవాలు.

ప్రశ్న 2: నేను ఏమి కోల్పోయాను?

ఇది ఖచ్చితంగా చాలా కష్టమైన ప్రశ్న, ఎందుకంటే మీరు పాత మరియు కొత్త సాంకేతికత రెండింటినీ త్రవ్వాలి మరియు మంచి అవగాహన కలిగి ఉండాలి. మీరు దానితో ఏదైనా నిర్మించే వరకు లేదా ఆ అనుభవం ఉన్న వారిని కలిగి ఉండే వరకు కొన్నిసార్లు మీరు నిజంగా కొత్తదాన్ని అర్థం చేసుకోలేరు.

మీకు ఏదీ లేకుంటే, ఈ పరికరం యొక్క విలువను నిర్ణయించడానికి సాధ్యమయ్యే కనీస పెట్టుబడి గురించి ఆలోచించడం అర్ధమే. మరియు ఒకసారి మీరు పెట్టుబడి పెడితే, నిర్ణయాన్ని వెనక్కి తీసుకోవడం ఎంత కష్టం?

ప్రజలు ఎల్లప్పుడూ ప్రతిదీ నాశనం చేస్తారు

మీరు ఈ ప్రశ్నలకు వీలైనంత నిష్పక్షపాతంగా సమాధానం ఇవ్వడానికి ప్రయత్నిస్తున్నప్పుడు, ఒక విషయం గుర్తుంచుకోండి: మీరు మానవ స్వభావంతో పోరాడవలసి ఉంటుంది. సాంకేతికతను సమర్థవంతంగా అంచనా వేయడానికి అనేక అభిజ్ఞా పక్షపాతాలను అధిగమించాలి. ఇక్కడ కొన్ని మాత్రమే ఉన్నాయి:

  • మెజారిటీ చేరిన ప్రభావం - అతని గురించి అందరికీ తెలుసు, కానీ అతనితో పోరాడటం ఇంకా కష్టం. సాంకేతికత వాస్తవానికి మీ వాస్తవ అవసరాలకు సరిపోతుందని నిర్ధారించుకోండి.
  • కొత్తదనం ప్రభావం — చాలా మంది డెవలపర్‌లు తాము చాలా కాలం పాటు పనిచేసిన సాంకేతికతలను తక్కువగా అంచనా వేస్తారు మరియు కొత్త సాంకేతికత ప్రయోజనాలను ఎక్కువగా అంచనా వేస్తారు. ఇది ప్రోగ్రామర్లు మాత్రమే కాదు, ప్రతి ఒక్కరూ ఈ అభిజ్ఞా పక్షపాతానికి లోనవుతారు.
  • సానుకూల లక్షణాల ప్రభావం - మనం అక్కడ ఉన్నవాటిని చూడడానికి మొగ్గు చూపుతాము మరియు తప్పిపోయిన వాటి గురించి దృష్టిని కోల్పోతాము. మీరు కొత్త టెక్నాలజీని అంతర్లీనంగా ఎక్కువగా అంచనా వేయడమే కాకుండా, దాని లోపాలను కూడా విస్మరించడం వలన ఇది కొత్తదనం ప్రభావంతో కలిపి ఉన్నప్పుడు గందరగోళానికి దారి తీస్తుంది..

ఆబ్జెక్టివ్ అంచనా వేయడం సులభం కాదు, కానీ అంతర్లీనంగా ఉన్న అభిజ్ఞా పక్షపాతాలను అర్థం చేసుకోవడం మరింత హేతుబద్ధమైన నిర్ణయాలు తీసుకోవడంలో మీకు సహాయపడుతుంది.

సారాంశం

ఒక ఆవిష్కరణ కనిపించినప్పుడల్లా, రెండు ప్రశ్నలకు చాలా జాగ్రత్తగా సమాధానం ఇవ్వాలి:

  • ఈ సాధనం నిజమైన సమస్యను పరిష్కరిస్తుందా?
  • మేము ట్రేడ్-ఆఫ్‌లను బాగా అర్థం చేసుకున్నామా?

మీరు ఈ రెండు ప్రశ్నలకు నమ్మకంగా సమాధానం చెప్పలేకపోతే, కొన్ని అడుగులు వెనక్కి తీసుకొని ఆలోచించండి.

కాబట్టి MongoDB సరైన ఎంపిక కాదా? వాస్తవానికి అవును; చాలా ఇంజనీరింగ్ టెక్నాలజీల మాదిరిగా, ఇది అనేక అంశాలపై ఆధారపడి ఉంటుంది. ఈ రెండు ప్రశ్నలకు సమాధానమిచ్చిన వారిలో, చాలామంది మొంగోడిబి నుండి ప్రయోజనం పొందారు మరియు దానిని కొనసాగిస్తున్నారు. అలా చేయని వారి కోసం, మీరు హైప్ సైకిల్ ద్వారా వెళ్లడం గురించి విలువైన మరియు చాలా బాధాకరమైన పాఠాన్ని నేర్చుకున్నారని నేను ఆశిస్తున్నాను.

నిరాకరణ

MongoDBతో నాకు ప్రేమ లేదా ద్వేషపూరిత సంబంధం లేదని నేను స్పష్టం చేయాలనుకుంటున్నాను. MongoDB పరిష్కరించడానికి ఉత్తమంగా సరిపోయే రకమైన సమస్యలు మాకు లేవు. 10gen/MongoDB Inc అని నాకు తెలుసు. మొదట చాలా ధైర్యంగా ఉంది, అసురక్షిత డిఫాల్ట్‌లను సెట్ చేయడం మరియు ఏదైనా డేటాతో పని చేయడానికి సార్వత్రిక పరిష్కారంగా ప్రతిచోటా (ముఖ్యంగా హ్యాకథాన్‌లలో) MongoDBని ప్రచారం చేయడం. ఇది బహుశా చెడ్డ నిర్ణయం. కానీ ఇక్కడ వివరించిన విధానాన్ని ఇది నిర్ధారిస్తుంది: సాంకేతికత యొక్క ఉపరితల అంచనాతో కూడా ఈ సమస్యలను చాలా త్వరగా గుర్తించవచ్చు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి