ప్రోహోస్టర్ > బ్లాగ్ > పరిపాలన > హైడ్రా కాన్ఫరెన్స్ నుండి టాస్క్ల విశ్లేషణ - లోడ్ బ్యాలెన్సింగ్ మరియు ఇన్-మెమరీ స్టోరేజ్
హైడ్రా కాన్ఫరెన్స్ నుండి టాస్క్ల విశ్లేషణ - లోడ్ బ్యాలెన్సింగ్ మరియు ఇన్-మెమరీ స్టోరేజ్
కొన్ని రోజుల క్రితం జరిగింది హైడ్రా కాన్ఫరెన్స్. JUG.ru గ్రూప్లోని కుర్రాళ్ళు డ్రీమ్ స్పీకర్లను ఆహ్వానించారు (లెస్లీ లాంపోర్ట్! క్లిఫ్ క్లిక్! మార్టిన్ క్లెప్మాన్!) మరియు పంపిణీ చేయబడిన సిస్టమ్లు మరియు కంప్యూటింగ్కు రెండు రోజులు కేటాయించారు. సదస్సులో ముగ్గురు భాగస్వాముల్లో కొంటూరు ఒకరు. మేము బూత్ వద్ద మాట్లాడాము, మా పంపిణీ చేసిన నిల్వల గురించి మాట్లాడాము, బింగో ఆడాము మరియు పజిల్స్ పరిష్కరించాము.
ఇది కొంటూర్ స్టాండ్లోని టాస్క్ల విశ్లేషణతో వారి వచన రచయిత నుండి పోస్ట్. హైడ్రాలో ఎవరు ఉన్నారు - ఆహ్లాదకరమైన అనుభవాన్ని గుర్తుంచుకోవడానికి ఇది మీ కారణం, ఎవరు కాదు - మీ మెదడును విస్తరించే అవకాశం పెద్ద ఓ- సంజ్ఞామానం.
తమ నిర్ణయాన్ని వ్రాయడానికి ఫ్లిప్చార్ట్ను స్లయిడ్లుగా విడదీసిన పాల్గొనేవారు కూడా ఉన్నారు. నేను జోక్ చేయడం లేదు - వారు ధృవీకరణ కోసం ఈ కాగితపు స్టాక్ను అందజేశారు:
మొత్తం మూడు పనులు ఉన్నాయి:
లోడ్ బ్యాలెన్సింగ్ కోసం బరువుల ద్వారా ప్రతిరూపాలను ఎంచుకోవడం గురించి
ఇన్-మెమరీ డేటాబేస్కు వ్యతిరేకంగా ప్రశ్న ఫలితాలను క్రమబద్ధీకరించడం గురించి
రింగ్ టోపోలాజీతో పంపిణీ చేయబడిన వ్యవస్థలో రాష్ట్ర బదిలీపై
టాస్క్ 1. క్లస్టర్ క్లయింట్
పంపిణీ చేయబడిన వ్యవస్థ యొక్క N బరువున్న ప్రతిరూపాల నుండి K యొక్క సమర్థవంతమైన ఎంపిక కోసం ఒక అల్గారిథమ్ను ప్రతిపాదించడం అవసరం:
N నోడ్ల యొక్క భారీగా పంపిణీ చేయబడిన క్లస్టర్ కోసం క్లయింట్ లైబ్రరీని అభివృద్ధి చేయడం మీ బృందం బాధ్యత. లైబ్రరీ నోడ్లతో అనుబంధించబడిన వివిధ మెటాడేటాను ట్రాక్ చేస్తుంది (ఉదా, వాటి లేటెన్సీలు, 4xx/5xx ప్రతిస్పందన రేట్లు మొదలైనవి) మరియు వాటికి ఫ్లోటింగ్ పాయింట్ వెయిట్లు W1..WNని కేటాయిస్తుంది. కాకరెంట్ ఎగ్జిక్యూషన్ స్ట్రాటజీకి మద్దతివ్వడానికి, లైబ్రరీ యాదృచ్ఛికంగా N నోడ్ల Kని ఎంచుకోగలగాలి-ఎంచుకునే అవకాశం నోడ్ బరువుకు అనులోమానుపాతంలో ఉండాలి.
నోడ్లను సమర్థవంతంగా ఎంచుకోవడానికి ఒక అల్గారిథమ్ను ప్రతిపాదించండి. పెద్ద O సంజ్ఞామానాన్ని ఉపయోగించి దాని గణన సంక్లిష్టతను అంచనా వేయండి.
ప్రతిదీ ఆంగ్లంలో ఎందుకు ఉంది?
ఎందుకంటే ఈ రూపంలో సమావేశంలో పాల్గొనేవారు వారితో పోరాడారు మరియు ఆంగ్లం హైడ్రా యొక్క అధికారిక భాష కాబట్టి. పనులు ఇలా కనిపించాయి:
కాగితం మరియు పెన్సిల్ తీసుకోండి, ఆలోచించండి, వెంటనే స్పాయిలర్లను తెరవడానికి తొందరపడకండి 🙂
పరిష్కారం యొక్క విశ్లేషణ (వీడియో)
5:53కి ప్రారంభమవుతుంది, కేవలం 4 నిమిషాలు:
మరియు ఫ్లిప్చార్ట్తో ఉన్న అబ్బాయిలు వారి పరిష్కారాన్ని ఎలా రూపొందించారో ఇక్కడ ఉంది:
పరిష్కారం యొక్క విశ్లేషణ (టెక్స్ట్)
కింది పరిష్కారం ఉపరితలంపై ఉంటుంది: అన్ని ప్రతిరూపాల బరువులను మొత్తం, 0 నుండి అన్ని బరువుల మొత్తానికి యాదృచ్ఛిక సంఖ్యను రూపొందించండి, ఆపై 0 నుండి (i-1)వ వరకు ఉన్న ప్రతిరూప బరువుల మొత్తం ఐ-ప్రతిరూపాన్ని ఎంచుకోండి యాదృచ్ఛిక సంఖ్య కంటే తక్కువగా ఉంటుంది మరియు 0 నుండి i-th వరకు ఉన్న ప్రతిరూప బరువుల మొత్తం - దాని కంటే ఎక్కువ. కాబట్టి ఒక ప్రతిరూపాన్ని ఎంచుకోవడం సాధ్యమవుతుంది మరియు తదుపరిదాన్ని ఎంచుకోవడానికి, మీరు ఎంచుకున్న ప్రతిరూపాన్ని పరిగణనలోకి తీసుకోకుండా మొత్తం విధానాన్ని పునరావృతం చేయాలి. అటువంటి అల్గారిథమ్తో, ఒక ప్రతిరూపాన్ని ఎంచుకోవడంలో సంక్లిష్టత O(N), K ప్రతిరూపాలను ఎంచుకోవడంలో సంక్లిష్టత O(N K) ~ O(N2).
చతుర్భుజ సంక్లిష్టత చెడ్డది, కానీ దానిని మెరుగుపరచవచ్చు. దీన్ని చేయడానికి, మేము నిర్మిస్తాము సెగ్మెంట్ చెట్టు బరువుల మొత్తాలకు. లోతు lg N యొక్క చెట్టు పొందబడుతుంది, దాని ఆకులలో ప్రతిరూప బరువులు ఉంటాయి మరియు మిగిలిన నోడ్లలో - పాక్షిక మొత్తాలు, చెట్టు యొక్క మూలంలో ఉన్న అన్ని బరువుల మొత్తం వరకు. తరువాత, మేము 0 నుండి అన్ని బరువుల మొత్తానికి యాదృచ్ఛిక సంఖ్యను రూపొందిస్తాము, i-th ప్రతిరూపాన్ని కనుగొని, దానిని చెట్టు నుండి తీసివేసి, మిగిలిన ప్రతిరూపాలను కనుగొనడానికి విధానాన్ని పునరావృతం చేస్తాము. ఈ అల్గారిథమ్తో, చెట్టును నిర్మించడంలో సంక్లిష్టత O(N), i-th ప్రతిరూపాన్ని కనుగొనడం మరియు చెట్టు నుండి దానిని తీసివేయడం యొక్క సంక్లిష్టత O(lg N), K ప్రతిరూపాలను ఎంచుకోవడంలో సంక్లిష్టత O(N + K lg N) ~ O(N lg N) .
లీనియర్-లాగ్ కాంప్లెక్సిటీ క్వాడ్రాటిక్ కాంప్లెక్సిటీ కంటే చక్కగా ఉంటుంది, ముఖ్యంగా పెద్ద K కోసం.
ఇది ఈ అల్గోరిథం కోడ్లో అమలు చేయబడింది ప్రాజెక్ట్ నుండి క్లస్టర్ క్లయింట్ లైబ్రరీలు "తూర్పు". (అక్కడ, చెట్టు O(N lg N)లో నిర్మించబడింది, అయితే ఇది అల్గోరిథం యొక్క చివరి సంక్లిష్టతను ప్రభావితం చేయదు.)
టాస్క్ 2. జీబ్రా
ఏకపక్ష నాన్-ఇండెక్స్డ్ ఫీల్డ్ ద్వారా మెమరీలో పత్రాలను సమర్థవంతంగా క్రమబద్ధీకరించడానికి అల్గారిథమ్ను ప్రతిపాదించడం అవసరం:
మీ టీమ్కి షార్డ్ ఇన్-మెమరీ డాక్యుమెంట్ డేటాబేస్ని డెవలప్ చేసే బాధ్యత ఉంది. పరిమాణం M (సాధారణంగా N <100 << M) సేకరణ నుండి ఏకపక్ష (నాన్-ఇండెక్స్డ్) సంఖ్యా ఫీల్డ్ ద్వారా క్రమబద్ధీకరించబడిన అగ్ర N పత్రాలను ఎంచుకోవడం సాధారణ పనిభారం. టాప్ S డాక్యుమెంట్లను (S ~ N) దాటేసిన తర్వాత టాప్ Nని ఎంచుకోవడం కొంచెం తక్కువ సాధారణ పనిభారం.
అటువంటి ప్రశ్నలను సమర్ధవంతంగా అమలు చేయడానికి ఒక అల్గారిథమ్ను ప్రతిపాదించండి. సగటు సందర్భంలో మరియు చెత్త సందర్భాలలో పెద్ద O సంజ్ఞామానాన్ని ఉపయోగించి దాని గణన సంక్లిష్టతను అంచనా వేయండి.
పరిష్కారం యొక్క విశ్లేషణ (వీడియో)
34:50కి ప్రారంభమవుతుంది, కేవలం 6 నిమిషాలు:
పరిష్కారం యొక్క విశ్లేషణ (టెక్స్ట్)
ఉపరితల పరిష్కారం: అన్ని పత్రాలను క్రమబద్ధీకరించండి (ఉదాహరణకు శీఘ్ర), ఆపై N+S పత్రాలను తీసుకోండి. ఈ సందర్భంలో, క్రమబద్ధీకరణ యొక్క సంక్లిష్టత సగటు O(M lg M), చెత్త O(M2)లో ఉంటుంది.
అన్ని M పత్రాలను క్రమబద్ధీకరించడం మరియు వాటిలో కొంత భాగాన్ని మాత్రమే తీసుకోవడం అసమర్థమైనది అని స్పష్టంగా తెలుస్తుంది. అన్ని పత్రాలను క్రమబద్ధీకరించకుండా ఉండటానికి, ఒక అల్గోరిథం అనుకూలంగా ఉంటుంది త్వరిత ఎంపిక, ఇది కావలసిన డాక్యుమెంట్లలో N + Sని ఎంచుకుంటుంది (వాటిని ఏదైనా అల్గారిథమ్ ద్వారా క్రమబద్ధీకరించవచ్చు). ఈ సందర్భంలో, సంక్లిష్టత సగటున O(M)కి తగ్గుతుంది, అయితే చెత్త కేసు అలాగే ఉంటుంది.
అయితే, మీరు దీన్ని మరింత సమర్థవంతంగా చేయవచ్చు - అల్గోరిథం ఉపయోగించండి బైనరీ హీప్ స్ట్రీమింగ్. ఈ సందర్భంలో, మొదటి N+S డాక్యుమెంట్లు కనిష్ట లేదా గరిష్ట కుప్పకు (క్రమబద్ధీకరణ దిశను బట్టి) జోడించబడతాయి, ఆపై ప్రతి తదుపరి పత్రం ప్రస్తుత కనీస లేదా గరిష్ట పత్రాన్ని కలిగి ఉన్న చెట్టు యొక్క మూలంతో పోల్చబడుతుంది, మరియు అవసరమైతే చెట్టుకు జోడించబడుతుంది. . ఈ సందర్భంలో, చెత్త సందర్భంలో సంక్లిష్టత, మీరు నిరంతరం చెట్టును పునర్నిర్మించవలసి వచ్చినప్పుడు, O(M lg M), శీఘ్ర ఎంపిక వలె సగటున సంక్లిష్టత O(M).
ఏది ఏమైనప్పటికీ, హీప్ స్ట్రీమింగ్ ఆచరణలో దాని మూల మూలకంతో ఒక్క పోలిక తర్వాత కుప్పను పునర్నిర్మించకుండానే చాలా పత్రాలను విస్మరించవచ్చు అనే వాస్తవం కారణంగా మరింత సమర్థవంతంగా మారుతుంది. కొంటూర్లో అభివృద్ధి చేయబడిన మరియు ఉపయోగించిన జీబ్రా ఇన్-మెమరీ డాక్యుమెంట్ డేటాబేస్లో ఇటువంటి సార్టింగ్ అమలు చేయబడింది.
టాస్క్ 3. రాష్ట్ర మార్పిడి
రాష్ట్రాలను మార్చడానికి అత్యంత సమర్థవంతమైన అల్గోరిథంను ప్రతిపాదించడం అవసరం:
పంపిణీ చేయబడిన N నోడ్ల క్లస్టర్ కోసం ఫ్యాన్సీ స్టేట్ ఎక్స్ఛేంజ్ మెకానిజంను అభివృద్ధి చేయడం మీ బృందం బాధ్యత. i-th నోడ్ యొక్క స్థితి (i+1)-th nodeకి బదిలీ చేయబడాలి, N-th నోడ్ యొక్క స్థితి మొదటి నోడ్కి బదిలీ చేయబడాలి. రెండు నోడ్లు తమ స్థితులను పరమాణుపరంగా మార్చుకున్నప్పుడు మాత్రమే మద్దతు ఉన్న ఆపరేషన్ స్టేట్ స్వాప్. స్టేట్ స్వాప్ M మిల్లీసెకన్లు తీసుకుంటుందని తెలుసు. ప్రతి నోడ్ ఏ క్షణంలోనైనా ఒకే స్టేట్ స్వాప్లో పాల్గొనగలదు.
క్లస్టర్లోని అన్ని నోడ్ల స్థితులను బదిలీ చేయడానికి ఎంత సమయం పడుతుంది?
పరిష్కారం యొక్క విశ్లేషణ (టెక్స్ట్)
ఉపరితల పరిష్కారం: మొదటి మరియు రెండవ మూలకం యొక్క స్థితులను మార్పిడి చేయండి, తర్వాత మొదటి మరియు మూడవ, తర్వాత మొదటి మరియు నాల్గవ, మరియు మొదలైనవి. ప్రతి మార్పిడి తర్వాత, ఒక మూలకం యొక్క స్థితి కావలసిన స్థానంలో ఉంటుంది. మీరు O(N) ప్రస్తారణలు చేయాలి మరియు O(N M) సమయాన్ని వెచ్చించాలి.
లీనియర్ సమయం చాలా పొడవుగా ఉంది, కాబట్టి మీరు మూలకాల స్థితులను జతలలో మార్పిడి చేసుకోవచ్చు: మొదటిది రెండవది, మూడవది నాల్గవది మరియు మొదలైనవి. ప్రతి రాష్ట్ర మార్పిడి తర్వాత, ప్రతి రెండవ మూలకం సరైన స్థానంలో ఉంటుంది. మీరు O(lg N) ప్రస్తారణలు చేయాలి మరియు O(M lg N) సమయాన్ని వెచ్చించాలి.
అయితే, షిఫ్ట్ని మరింత సమర్థవంతంగా చేయడం సాధ్యపడుతుంది - లీనియర్లో కాదు, స్థిరమైన సమయంలో. దీన్ని చేయడానికి, మొదటి దశలో, మీరు మొదటి మూలకం యొక్క స్థితిని చివరిదానితో, రెండవది చివరిదానితో మరియు మొదలైన వాటితో మార్పిడి చేయాలి. చివరి మూలకం యొక్క స్థితి సరైన స్థానంలో ఉంటుంది. మరియు ఇప్పుడు మనం రెండవ మూలకం యొక్క స్థితిని చివరిదానితో, మూడవది చివరిదానితో మరియు మొదలైన వాటితో మార్పిడి చేయాలి. ఈ రౌండ్ మార్పిడి తర్వాత, అన్ని మూలకాల స్థితులు సరైన స్థితిలో ఉంటాయి. మొత్తంగా O(2M) ~ O(1) ప్రస్తారణలు ఉంటాయి.
భ్రమణం అనేది రెండు అక్షసంబంధ సమరూపతల కూర్పు అని ఇప్పటికీ గుర్తుంచుకునే గణిత శాస్త్రజ్ఞుడిని అలాంటి పరిష్కారం ఆశ్చర్యపరచదు. మార్గం ద్వారా, ఇది ఒక షిఫ్ట్ కోసం సాధారణీకరించబడింది, కానీ K <N స్థానాల ద్వారా. (ఎలా ఖచ్చితంగా అని వ్యాఖ్యలలో వ్రాయండి.)
మీకు పజిల్స్ నచ్చిందా? మీకు ఇతర పరిష్కారాలు తెలుసా? వ్యాఖ్యలలో భాగస్వామ్యం చేయండి.