స్పేషియల్ మెమరీని నిర్మించడం

భౌతిక ప్రపంచం కోసం ఒక Pinterest లాంటి అప్లికేషన్‌ను నిర్మించడానికి నేను మూడు నెలల సమయం కేటాయించాను.

ఆలోచన చాలా సరళమైనది. మీరు నిర్దిష్ట GPS కోఆర్డినేట్ల వద్ద డిజిటల్ నోట్స్, ఫోటోలు లేదా కథలను వదిలివేయవచ్చు. ప్రజలు ఆ ఖచ్చితమైన ప్రదేశంలో ఉన్నప్పుడు మాత్రమే వాటిని చూడగలరు. ఇది నిజ ప్రపంచాన్ని డిజిటల్ టైమ్ క్యాప్సూల్స్ (digital time capsules) సేకరణగా మారుస్తుంది.

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

స్పేషియల్ డేటాబేస్

మీరు స్కేలబిలిటీని కోరుకుంటే, లాటిట్యూడ్ మరియు లాంగిట్యూడ్‌ను కేవలం సాధారణ సంఖ్యలుగా మాత్రమే నిల్వ చేయలేరు. మీకు స్పేషియల్ ఇండెక్స్‌లు అవసరం. నేను PostgreSQLతో PostGISని ఉపయోగించాను.

ఇది వీటిని నిర్వహిస్తుంది:

  • R-treeతో స్పేషియల్ ఇండెక్సింగ్
  • బిల్ట్-ఇన్ దూర గణనలు
  • వేగవంతమైన ప్రాక్సిమిటీ క్వెరీస్

ఒక వినియోగదారునికి 50 మీటర్ల పరిధిలో ఉన్న జ్ఞాపకాలను కనుగొనాలంటే, PostGIS ఆ కష్టమైన పనిని సులభతరం చేస్తుంది.

క్యాషింగ్ వ్యూహం

ప్రసిద్ధ పర్యాటక ప్రాంతాల్లో రిక్వెస్ట్‌లు చాలా ఎక్కువగా వస్తాయి. ప్రతి రెండు సెకన్లకు డేటాబేస్‌ను హిట్ చేయడం వల్ల పనితీరు (performance) దెబ్బతింటుంది. రద్దీగా ఉండే ప్రాంతాల్లో మెమరీ IDలను క్యాష్ చేయడానికి నేను Redis GEO కమాండ్లను ఉపయోగించాను.

ఒక ప్రో టిప్: Redisలో పూర్తి ఆబ్జెక్ట్‌ను క్యాష్ చేయకండి. కేవలం IDలను మాత్రమే క్యాష్ చేయండి. ఇది మీ మెమరీ వినియోగాన్ని తక్కువగా ఉంచుతుంది మరియు క్వెరీ సమయాన్ని 20ms నుండి 2msకి తగ్గిస్తుంది.

అప్‌లోడ్ ప్యాటర్న్

ప్రతి ఫోటో అప్‌లోడ్‌ను మీ సర్వర్ నిర్వహిస్తే, అది లోడ్ వల్ల క్రాష్ అవుతుంది. నేను రెండు దశల అప్‌లోడ్ ప్యాటర్న్‌ను ఉపయోగించాను:

  • క్లయింట్ సర్వర్ నుండి pre-signed URL కోసం అడుగుతుంది
  • క్లయింట్ ఫైల్‌ను నేరుగా Cloudflare R2కి అప్‌లోడ్ చేస్తుంది
  • అప్‌లోడ్ పూర్తయిన తర్వాత క్లయింట్ సర్వర్‌కు తెలియజేస్తుంది

నేను S3 కంటే R2ని ఎంచుకున్నాను ఎందుకంటే ఇందులో egress ఫీజులు ఉండవు. వినియోగదారులు మీడియాను డౌన్‌లోడ్ చేసినప్పుడు ఇది డబ్బును ఆదా చేస్తుంది.

ఏవి బాగా పనిచేశాయి

  • PostGIS మరియు Redis GEO స్పేషియల్ క్వెరీలను వేగవంతం చేస్తాయి.
  • Direct-to-R2 అప్‌లోడ్‌లు బ్యాకెండ్‌ను స్కేల్ చేయడానికి అనుమతిస్తాయి.
  • Go మరియు Gin తక్కువ మెమరీ వినియోగంతో అధిక పనితీరును అందిస్తాయి.
  • ప్రోగ్రెసివ్ ప్రైవసీ (Private, Friends, లేదా Public) వినియోగదారులను రక్షిస్తుంది.

ఏవి తప్పుగా జరిగాయి

  • ఎత్తైన భవనాలు ఉన్న నగరాల్లో GPS ఖచ్చితత్వం స్థిరంగా ఉండదు.
  • "కోల్డ్ స్టార్ట్" (cold start) సమస్య నిజంగా ఉంది. యాప్ సజీవంగా అనిపించాలంటే చాలా మంది వినియోగదారులు కావాలి.
  • కంటెంట్ మోడరేషన్ కోసం నిరంతర శ్రద్ధ అవసరం.

దీనిని నిర్మించడం ద్వారా సోషల్ యాప్‌లకు భౌతిక స్థానం (physical location) అనేది తక్కువ అంచనా వేయబడిన అంశమని నేను తెలుసుకున్నాను. డిజిటల్ కంటెంట్ ఒక నిజమైన ప్రదేశంతో ముడిపడి ఉన్నప్పుడు అది మరింత అర్థవంతంగా అనిపిస్తుంది.

Source: https://dev.to/kevinten10/building-spatial-memory-why-i-built-a-pinterest-for-the-physical-world-and-what-i-learned-bpm

Optional learning community: https://t.me/GyaanSetuAi