स्थानिक स्मृति का निर्माण

मैंने भौतिक दुनिया के लिए एक Pinterest बनाने में तीन महीने बिताए।

विचार सरल है। आप विशिष्ट GPS निर्देशांकों (coordinates) पर डिजिटल नोट्स, फ़ोटो या कहानियाँ छोड़ते हैं। लोग उन्हें तभी देख सकते हैं जब वे शारीरिक रूप से उसी सटीक स्थान पर खड़े हों। यह वास्तविक दुनिया को डिजिटल टाइम कैप्सूल के संग्रह में बदल देता है।

लोकेशन-आधारित ऐप बनाना जितना दिखता है उससे कहीं अधिक कठिन है। यहाँ वह सब है जो मैंने टेक स्टैक (tech stack) के बारे में सीखा।

स्थानिक डेटाबेस (The Spatial Database)

यदि आप स्केल करना चाहते हैं, तो आप अक्षांश (latitude) और देशांतर (longitude) को केवल साधारण संख्याओं के रूप में संग्रहीत नहीं कर सकते। आपको स्थानिक इंडेक्स (spatial indexes) की आवश्यकता होती है। मैंने PostgreSQL के साथ PostGIS का उपयोग किया।

यह संभालता है:

  • R-tree के साथ स्थानिक इंडेक्सिंग (Spatial indexing)
  • इन-बिल्ट दूरी गणना (Built-in distance calculations)
  • तेज़ प्रॉक्सिमिटी क्वेरीज़ (Fast proximity queries)

यदि आपको किसी उपयोगकर्ता के 50 मीटर के भीतर यादें ढूँढनी हैं, तो PostGIS सारा कठिन काम कर देता है।

कैशिंग रणनीति (The Caching Strategy)

लोकप्रिय पर्यटक स्थलों पर बहुत अधिक अनुरोध (requests) आते हैं। हर दो सेकंड में डेटाबेस को हिट करना प्रदर्शन (performance) के लिए बुरा है। मैंने व्यस्त क्षेत्रों में मेमोरी ID को कैश करने के लिए Redis GEO कमांड का उपयोग किया।

एक प्रो टिप: Redis में पूरे ऑब्जेक्ट को कैश न करें। केवल ID को कैश करें। इससे आपका मेमोरी उपयोग कम रहता है और क्वेरी का समय 20ms से घटकर 2ms हो जाता है।

अपलोड पैटर्न (The Upload Pattern)

यदि आपका सर्वर हर फ़ोटो अपलोड को संभालता है, तो लोड के कारण यह क्रैश हो जाएगा। मैंने दो-चरणों वाले अपलोड पैटर्न का उपयोग किया:

  • क्लाइंट सर्वर से एक pre-signed URL मांगता है
  • क्लाइंट सीधे Cloudflare R2 पर फ़ाइल अपलोड करता है
  • क्लाइंट सर्वर को बताता है कि अपलोड कब समाप्त हुआ

मैंने S3 के बजाय R2 को चुना क्योंकि इसमें कोई egress fees नहीं है। जब उपयोगकर्ता मीडिया डाउनलोड करते हैं तो इससे पैसे बचते हैं।

क्या सफल रहा

  • PostGIS और Redis GEO स्थानिक क्वेरीज़ को तेज़ बनाते हैं।
  • Direct-to-R2 अपलोड बैकएंड को स्केल करने की अनुमति देते हैं।
  • Go और Gin कम मेमोरी उपयोग के साथ उच्च प्रदर्शन प्रदान करते हैं।
  • प्रोग्रेसिव प्राइवेसी (Private, Friends, या Public) उपयोगकर्ताओं की सुरक्षा करती है।

क्या गलत हुआ

  • ऊंची इमारतों वाले शहरों में GPS की सटीकता असंगत होती है।
  • "कोल्ड स्टार्ट" (cold start) की समस्या वास्तविक है। ऐप को जीवंत महसूस कराने के लिए कई उपयोगकर्ताओं की आवश्यकता होती है।
  • कंटेंट मॉडरेशन के लिए निरंतर ध्यान देने की आवश्यकता होती है।

इसे बनाने से मुझे यह सीखने को मिला कि सोशल ऐप्स के लिए भौतिक स्थान एक कम आंका गया आयाम (underrated dimension) है। डिजिटल कंटेंट अधिक सार्थक महसूस होता है जब यह किसी वास्तविक स्थान से जुड़ा होता है।

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

वैकल्पिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi