డేటాను నిల్వ చేయడానికి గ్లోబల్స్ నిధి-కత్తులు. చిన్న శ్రేణులు. పార్ట్ 3

డేటాను నిల్వ చేయడానికి గ్లోబల్స్ నిధి-కత్తులు. చిన్న శ్రేణులు. పార్ట్ 3మునుపటి భాగాలలో (1, 2) మేము గ్లోబల్‌లను ట్రీలుగా మాట్లాడాము, ఇందులో మనం గ్లోబల్‌లను చిన్న శ్రేణులుగా చూస్తాము.

అరుదైన అర్రే చాలా విలువలు ఒకే విలువను తీసుకునే ఒక రకమైన శ్రేణి.

ఆచరణలో, చిన్న శ్రేణులు తరచుగా చాలా పెద్దవిగా ఉంటాయి, ఒకేలాంటి అంశాలతో మెమరీని ఆక్రమించడంలో అర్థం లేదు. అందువల్ల, ఒకే విధమైన విలువలను నిల్వ చేయడంలో మెమరీ వృధా కాకుండా ఉండే విధంగా స్పేర్స్ శ్రేణులను అమలు చేయడం అర్ధమే.
కొన్ని ప్రోగ్రామింగ్ భాషలలో, చిన్న శ్రేణులు భాషలోనే చేర్చబడ్డాయి, ఉదాహరణకు J లో, MATLAB. ఇతర ప్రోగ్రామింగ్ భాషలకు ప్రత్యేక లైబ్రరీలు ఉన్నాయి, అవి వాటిని అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తాయి. C++ కోసం - ఈజెన్ మరియు ఇతరులు.

చిన్న శ్రేణులను అమలు చేయడానికి గ్లోబల్స్ మంచి అభ్యర్థులు ఎందుకంటే:

  1. అవి నిర్దిష్ట నోడ్‌ల విలువలను మాత్రమే నిల్వ చేస్తాయి మరియు నిర్వచించబడని వాటి విలువలను నిల్వ చేయవు;
  2. నోడ్ యొక్క విలువను యాక్సెస్ చేసే ఇంటర్‌ఫేస్, మల్టీడైమెన్షనల్ అర్రే ఎలిమెంట్‌కు ఎన్ని ప్రోగ్రామింగ్ లాంగ్వేజెస్ యాక్సెస్‌ను అమలు చేస్తాయో చాలా పోలి ఉంటుంది.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. గ్లోబల్ అనేది డేటాను నిల్వ చేయడానికి చాలా తక్కువ-స్థాయి నిర్మాణం, కాబట్టి ఇది అత్యుత్తమ వేగ లక్షణాలను కలిగి ఉంది (హార్డ్‌వేర్ ఆధారంగా సెకనుకు వందల వేల నుండి పదిలక్షల లావాదేవీలు, క్రింద చూడండి). 1)

గ్లోబల్ అనేది నిరంతర నిర్మాణం కాబట్టి, RAM మొత్తం సరిపోదని ముందుగానే తెలిసినప్పుడు వాటిపై చిన్న శ్రేణులను సృష్టించడం అర్ధమే.

నిర్వచించబడని సెల్‌కి యాక్సెస్ చేయబడితే కొంత డిఫాల్ట్ విలువను అందించడం అనేది స్పేర్స్ శ్రేణి అమలుల లక్షణాలలో ఒకటి.

ఇది ఫంక్షన్ ఉపయోగించి అమలు చేయవచ్చు $GET COS లో. ఈ ఉదాహరణ 3-డైమెన్షనల్ శ్రేణిని పరిగణిస్తుంది.

SET a = $GET(^a(x,y,z), defValue)

ఏ టాస్క్‌లకు చిన్న శ్రేణులు అవసరం మరియు గ్లోబల్‌లు ఎలా సహాయపడతాయి?

ప్రక్కనే (కనెక్టివిటీ) మాతృక

ఇటువంటి మాత్రికలు గ్రాఫ్‌లను సూచించడానికి ఉపయోగిస్తారు:

డేటాను నిల్వ చేయడానికి గ్లోబల్స్ నిధి-కత్తులు. చిన్న శ్రేణులు. పార్ట్ 3

సహజంగానే, గ్రాఫ్ పెద్దగా ఉంటే, మాతృకలో ఎక్కువ సున్నాలు ఉంటాయి. ఉదాహరణకు, మేము ఒక సోషల్ నెట్‌వర్క్ గ్రాఫ్‌ని తీసుకొని దానిని సారూప్య మాతృక రూపంలో ప్రదర్శిస్తే, అది దాదాపు పూర్తిగా సున్నాలను కలిగి ఉంటుంది, అనగా. ఒక చిన్న శ్రేణి ఉంటుంది.

Set ^m(id1, id2) = 1 
Set ^m(id1, id3) = 1 
Set ^m(id1, id4) = 1 
Set ^m(id1) = 3 
Set ^m(id2, id4) = 1 
Set ^m(id2, id5) = 1 
Set ^m(id2) = 2
....

ఈ ఉదాహరణలో, మేము ప్రపంచవ్యాప్తంగా సేవ్ చేస్తాము ^m కనెక్టివిటీ మ్యాట్రిక్స్, అలాగే ప్రతి నోడ్ వద్ద అంచుల సంఖ్య (ఎవరు ఎవరితో స్నేహితులు మరియు స్నేహితుల సంఖ్య).

గ్రాఫ్‌లోని మూలకాల సంఖ్య 29 మిలియన్ల కంటే ఎక్కువ లేకపోతే (ఈ సంఖ్య 8 * యొక్క ఉత్పత్తిగా తీసుకోబడుతుంది గరిష్ట పంక్తి పరిమాణం), అంటే, అటువంటి మాత్రికలను నిల్వ చేయడానికి మరింత ఆర్థిక మార్గం బిట్ స్ట్రింగ్‌లు, ఎందుకంటే వాటి అమలు పెద్ద అంతరాలను ప్రత్యేక మార్గంలో ఆప్టిమైజ్ చేస్తుంది.

బిట్ స్ట్రింగ్‌లతో మానిప్యులేషన్‌లు ఫంక్షన్ ద్వారా నిర్వహించబడతాయి $బిట్.

; установка бита
SET $BIT(rowID, positionID) = 1
; получение бита
Write $BIT(rowID, positionID)

రాష్ట్ర యంత్ర పరివర్తన పట్టిక

పరిమిత ఆటోమేటన్ యొక్క పరివర్తన గ్రాఫ్ సాధారణ గ్రాఫ్ కాబట్టి, పరిమిత ఆటోమేటన్ యొక్క పరివర్తన పట్టిక పైన చర్చించిన అదే ప్రక్కనే ఉన్న మాతృక.

సెల్యులార్ ఆటోమేటా

డేటాను నిల్వ చేయడానికి గ్లోబల్స్ నిధి-కత్తులు. చిన్న శ్రేణులు. పార్ట్ 3

అత్యంత ప్రసిద్ధ సెల్యులార్ ఆటోమేటన్ ఆట "జీవితం", ఇది, దాని నియమాల కారణంగా (ఒక సెల్ చాలా మంది పొరుగువారిని కలిగి ఉన్నప్పుడు, అది చనిపోతుంది) ఒక చిన్న శ్రేణి.

సెల్యులార్ ఆటోమేటా అని స్టీఫెన్ వోల్ఫ్రామ్ అభిప్రాయపడ్డారు సైన్స్ యొక్క కొత్త రంగం. 2002లో, అతను ఎ న్యూ కైండ్ ఆఫ్ సైన్స్ అనే 1280-పేజీల పుస్తకాన్ని ప్రచురించాడు, దీనిలో సెల్యులార్ ఆటోమేటాలో పురోగతులు వివిక్తమైనవి కావు, కానీ అవి శాశ్వతమైనవి మరియు సైన్స్‌లోని అన్ని రంగాలపై గొప్ప ప్రభావాలను కలిగి ఉన్నాయని విస్తృతంగా వాదించాడు.

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

మనకు భారీ ఫీల్డ్ ఉంటే మరియు సెల్యులార్ ఆటోమేటన్ యొక్క అన్ని ఇంటర్మీడియట్ స్టేట్‌లను రికార్డ్ చేయాల్సిన అవసరం ఉంటే, అప్పుడు గ్లోబల్‌లను ఉపయోగించడం అర్ధమే.

కార్టోగ్రఫీ

చిన్న శ్రేణులను ఉపయోగించేటప్పుడు నా మనసులోకి వచ్చే మొదటి విషయం మ్యాపింగ్ టాస్క్‌లు.

నియమం ప్రకారం, మ్యాప్‌లలో చాలా ఖాళీ స్థలం ఉంది. మ్యాప్‌ను పెద్ద పిక్సెల్‌లుగా సూచించినట్లయితే, భూమి యొక్క 71% పిక్సెల్‌లు సముద్రంచే ఆక్రమించబడతాయి. చిన్న శ్రేణి. మరియు మీరు మానవ చేతుల పనిని మాత్రమే వర్తింపజేస్తే, ఖాళీ స్థలం 95% కంటే ఎక్కువగా ఉంటుంది.

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

మన గెలాక్సీని మ్యాప్ చేయడానికి గియా టెలిస్కోప్ మిషన్ అత్యంత ప్రతిష్టాత్మకమైన మ్యాపింగ్ మిషన్లలో ఒకటి. అలంకారికంగా చెప్పాలంటే, మన గెలాక్సీ, మొత్తం విశ్వం వలె, నిరంతర చిన్న శ్రేణి: అరుదైన చిన్న పాయింట్లు - నక్షత్రాలు ఉన్న భారీ శూన్యత ఖాళీలు. ఖాళీ స్థలం 99,999999.......%. మా గెలాక్సీ యొక్క మ్యాప్‌ను నిల్వ చేయడానికి, గ్లోబల్ డేటాబేస్ ఎంచుకోబడింది - కాష్.

ఈ ప్రాజెక్ట్‌లోని గ్లోబల్‌ల యొక్క ఖచ్చితమైన నిర్మాణం నాకు తెలియదు, ఇది ఇలాంటిదేనని నేను ఊహించగలను:

Set ^galaxy(b, l, d) = 1; Номер звезды по каталогу, если есть
Set ^galaxy(b, l, d, "name") = "Sun"
Set ^galaxy(b, l, d, "type") = "normal" ; варианты blackhole, quazar, red_dwarf и т.д.
Set ^galaxy(b, l, d, "weight") = 14E50
Set ^galaxy(b, l, d, "planetes") = 7
Set ^galaxy(b, l, d, "planetes", 1) = "Mercury"
Set ^galaxy(b, l, d, "planetes", 1, weight) = 1E20
...

బి, ఎల్, డి ఎక్కడ ఉన్నాయి గెలాక్సీ అక్షాంశాలు, రేఖాంశం మరియు సూర్యునికి దూరం.

గ్లోబల్స్ యొక్క సౌకర్యవంతమైన నిర్మాణం నక్షత్రాలు మరియు గ్రహాల యొక్క ఏవైనా అవసరమైన లక్షణాలను సేవ్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, ఎందుకంటే గ్లోబల్స్‌పై బేస్‌లు స్కీమ్-తక్కువగా ఉంటాయి.

మన విశ్వం యొక్క మ్యాప్‌ను నిల్వ చేయడానికి, కాష్ దాని సౌలభ్యం కోసం మాత్రమే కాకుండా, వేగంగా శోధనల కోసం ఏకకాలంలో ఇండెక్స్ గ్లోబల్‌లను సృష్టించేటప్పుడు, డేటా స్ట్రీమ్‌ను చాలా త్వరగా నిల్వ చేయగల సామర్థ్యం కోసం కూడా ఎంపిక చేయబడింది.

మేము భూమికి తిరిగి వస్తే, గ్లోబల్స్‌లో కార్టోగ్రాఫిక్ ప్రాజెక్టులు సృష్టించబడతాయి OpenStreetMap XAPI మరియు OpenStreetMap యొక్క ఫోర్క్ - FOSM.

ఇటీవల న హ్యాకథాన్ కాష్ భౌగోళిక సూచికలు అమలు చేయబడ్డాయి జియోస్పేషియల్. మేము అమలు వివరాలతో రచయితల నుండి కథనం కోసం ఎదురు చూస్తున్నాము.

OpenStreetMap XAPIలో గ్లోబల్‌లో స్పేషియల్ ఇండెక్స్‌ల అమలు

నుండి తీసిన చిత్రాలు ఈ ప్రదర్శన.

మొత్తం భూగోళం చతురస్రాలుగా విభజించబడింది, తరువాత ఉప-చతురస్రాలు మరియు ఉప-చతురస్రాలు ఉప-ఉప-చతురస్రాలుగా విభజించబడ్డాయి. సాధారణంగా, ఏ గ్లోబల్‌లు సృష్టించబడతాయో నిల్వ చేయడానికి మేము క్రమానుగత నిర్మాణాన్ని పొందుతాము.

డేటాను నిల్వ చేయడానికి గ్లోబల్స్ నిధి-కత్తులు. చిన్న శ్రేణులు. పార్ట్ 3

ఏ క్షణంలోనైనా, మేము కోరుకున్న స్క్వేర్‌ను దాదాపు తక్షణమే అభ్యర్థించవచ్చు లేదా దాన్ని క్లియర్ చేయవచ్చు మరియు అన్ని ఉప-స్క్వేర్‌లు కూడా తిరిగి ఇవ్వబడతాయి లేదా క్లియర్ చేయబడతాయి.

గ్లోబల్స్‌పై ఇదే విధమైన పథకాన్ని అనేక విధాలుగా అమలు చేయవచ్చు.

ఎంపిక 1:

Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 1) = idПервойТочки
Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idВторойТочки
...

ఎంపిక 2:

Set ^m('abacdabcdabacdabcda', 1) = idПервойТочки
Set ^m('abacdabcdabacdabcda', 2) = idВторойТочки
...

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

దిగువ స్థాయి చతురస్రాల్లో ఒకదానికి ఉదాహరణ:

డేటాను నిల్వ చేయడానికి గ్లోబల్స్ నిధి-కత్తులు. చిన్న శ్రేణులు. పార్ట్ 3

మరియు ఇక్కడ XAPI ప్రాజెక్ట్ నుండి కొన్ని గ్లోబల్‌లు ఉన్నాయి: గ్లోబల్స్‌లో ఇండెక్స్ యొక్క ప్రాతినిధ్యం:

డేటాను నిల్వ చేయడానికి గ్లోబల్స్ నిధి-కత్తులు. చిన్న శ్రేణులు. పార్ట్ 3

ప్రపంచ ^మార్గం పాయింట్లను నిల్వ చేయడానికి ఉపయోగిస్తారు పాలీలైన్లు (రోడ్లు, చిన్న నదులు మొదలైనవి) మరియు బహుభుజాలు (మూసివేయబడిన ప్రాంతాలు: భవనాలు, అడవులు మొదలైనవి).

గ్లోబల్స్‌లో చిన్న శ్రేణుల ఉపయోగం యొక్క కఠినమైన వర్గీకరణ.

  1. మేము కొన్ని వస్తువులు మరియు వాటి స్థితుల (మ్యాపింగ్, సెల్యులార్ ఆటోమేటా) కోఆర్డినేట్‌లను నిల్వ చేస్తాము.
  2. మేము చిన్న మాత్రికలను నిల్వ చేస్తాము.

కేసు 2 కోసం) మూలకం విలువను కేటాయించని నిర్దిష్ట కోఆర్డినేట్‌ను అభ్యర్థిస్తున్నప్పుడు, మేము తప్పనిసరిగా డిఫాల్ట్ స్పేర్స్ అర్రే ఎలిమెంట్ యొక్క విలువను పొందాలి.

గ్లోబల్స్‌లో బహుమితీయ మాత్రికలను నిల్వ చేసినప్పుడు మేము పొందే బోనస్‌లు

అడ్డు వరుసలు, ప్లేన్‌లు, క్యూబ్‌లు మొదలైన వాటి గుణిజాలను త్వరగా తీసివేయండి మరియు/లేదా ఎంచుకోండి. పూర్ణాంకాల సూచికలు ఉపయోగించబడే సందర్భాలలో, అడ్డు వరుసలు, విమానాలు, ఘనాల మొదలైన వాటి గుణిజాలను త్వరగా తీసివేయడం మరియు/లేదా పొందడం వంటి సామర్థ్యం ఉపయోగకరంగా ఉండవచ్చు.

జట్టు కిల్ మేము ఒకే మూలకం లేదా అడ్డు వరుస లేదా మొత్తం విమానాన్ని కూడా తొలగించవచ్చు. గ్లోబల్స్ యొక్క లక్షణాలకు ధన్యవాదాలు, ఇది చాలా త్వరగా జరుగుతుంది - మూలకం-ద్వారా-మూలకం తొలగింపు కంటే వేల రెట్లు వేగంగా.

ఫిగర్ గ్లోబల్‌లో త్రిమితీయ శ్రేణిని చూపుతుంది ^a మరియు వివిధ రకాల తొలగింపులు.

డేటాను నిల్వ చేయడానికి గ్లోబల్స్ నిధి-కత్తులు. చిన్న శ్రేణులు. పార్ట్ 3

తెలిసిన సూచికలను ఉపయోగించి ఖాళీ ముక్కలను ఎంచుకోవడానికి, మీరు ఆదేశాన్ని ఉపయోగించవచ్చు కలుపు.

కాలమ్ వేరియబుల్‌లో మ్యాట్రిక్స్ నిలువు వరుసను ఎంచుకోవడం:

; Зададим трёхмерный разреженный массив 3x3x3
Set ^a(0,0,0)=1,^a(2,2,0)=1,^a(2,0,1)=1,^a(0,2,1)=1,^a(2,2,2)=1,^a(2,1,2)=1
Merge Column = ^a(2,2)
; Выведем переменную Column
Zwrite Column

తీర్మానం:

Column(0)=1
Column(2)=1

కాలమ్ వేరియబుల్ గురించి ఆసక్తికరమైన విషయం ఏమిటంటే, మనకు ఒక చిన్న శ్రేణి కూడా ఉంది, దాని ద్వారా కూడా యాక్సెస్ చేయాలి $GET, డిఫాల్ట్ విలువలు దానిలో నిల్వ చేయబడవు కాబట్టి.

ఫంక్షన్‌ని ఉపయోగించి చిన్న ప్రోగ్రామ్ ద్వారా ఖాళీ ముక్కలను ఎంచుకోవడం కూడా చేయవచ్చు $ఆర్డర్. సూచికలు పరిమాణీకరించబడని (కార్టోగ్రఫీ) ఖాళీలపై ఇది ప్రత్యేకంగా సౌకర్యవంతంగా ఉంటుంది.

తీర్మానం

ప్రస్తుత కాలం కొత్త ప్రతిష్టాత్మకమైన పనులను కలిగి ఉంది. గ్రాఫ్‌లు బిలియన్ల కొద్దీ శీర్షాలతో రూపొందించబడతాయి, బిలియన్ల పాయింట్‌లతో రూపొందించబడిన మ్యాప్‌లు మరియు కొన్ని సెల్యులార్ ఆటోమేటాపై తమ స్వంత విశ్వాన్ని అమలు చేయాలనుకోవచ్చు (1, 2).

చిన్న శ్రేణుల నుండి డేటా పరిమాణం ఇకపై RAMకి సరిపోనప్పుడు, మీరు వారితో పని చేయవలసి ఉంటుంది, అప్పుడు గ్లోబల్స్ మరియు COS లలో సారూప్య ప్రాజెక్టులను అమలు చేసే అవకాశాన్ని పరిగణనలోకి తీసుకోవడం విలువ.

మీరు ఆసక్తి చూపినందుకు ధన్యవాదములు! వ్యాఖ్యలలో మీ ప్రశ్నలు మరియు శుభాకాంక్షల కోసం మేము ఎదురు చూస్తున్నాము.

నిరాకరణ: ఈ కథనం మరియు దానికి నా వ్యాఖ్యలు నా అభిప్రాయం మరియు ఇంటర్‌సిస్టమ్స్ కార్పొరేషన్ యొక్క అధికారిక స్థానానికి ఎటువంటి సంబంధం లేదు.

మూలం: www.habr.com

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