સ્પેસિયલ મેમરીનું નિર્માણ
મેં ભૌતિક વિશ્વ માટે Pinterest જેવું કંઈક બનાવવામાં ત્રણ મહિના વિતાવ્યા.
વિચાર સરળ છે. તમે ચોક્કસ GPS કોઓર્ડિનેટ્સ પર ડિજિટલ નોટ્સ, ફોટા અથવા વાર્તાઓ છોડી શકો છો. લોકો તેને ત્યારે જ જોઈ શકે છે જ્યારે તેઓ શારીરિક રીતે તે જ ચોક્કસ જગ્યાએ ઊભા હોય. તે વાસ્તવિક વિશ્વને ડિજિટલ ટાઈમ કેપ્સ્યુલ્સના સંગ્રહમાં ફેરવી દે છે.
લોકેશન-આધારિત એપ બનાવવી એ દેખાય છે તેના કરતા વધુ અઘરી છે. ટેક સ્ટેક વિશે મેં જે શીખ્યું તે અહીં છે.
સ્પેસિયલ ડેટાબેઝ જો તમે સ્કેલ કરવા માંગતા હોવ, તો તમે અક્ષાંશ (latitude) અને રેખાંશ (longitude) ને ફક્ત સાદા નંબરો તરીકે સ્ટોર કરી શકતા નથી. તમારે સ્પેસિયલ ઇન્ડેક્સની જરૂર પડશે. મેં PostgreSQL સાથે PostGIS નો ઉપયોગ કર્યો.
તે હેન્ડલ કરે છે:
- R-tree સાથે સ્પેસિયલ ઇન્ડેક્સિંગ
- ઇન-બિલ્ટ અંતરની ગણતરીઓ
- ઝડપી પ્રોક્સિમિટી ક્વેરીઝ
જો તમારે વપરાશકર્તાના 50 મીટરની અંદરની યાદો શોધવી હોય, તો PostGIS મુખ્ય કામ કરી આપે છે.
કેશિંગ વ્યૂહરચના લોકપ્રિય પ્રવાસી સ્થળો પર ખૂબ વધારે વિનંતીઓ (requests) આવે છે. દર બે સેકન્ડે ડેટાબેઝનો ઉપયોગ કરવો એ પરફોર્મન્સ માટે ખરાબ છે. મેં વ્યસ્ત વિસ્તારોમાં મેમરી ID ને કેશ કરવા માટે Redis GEO કમાન્ડ્સનો ઉપયોગ કર્યો.
એક પ્રો ટિપ: Redis માં આખું ઓબ્જેક્ટ કેશ કરશો નહીં. ફક્ત ID ને જ કેશ કરો. આનાથી તમારો મેમરી વપરાશ ઓછો રહેશે અને ક્વેરીનો સમય 20ms થી ઘટીને 2ms થઈ જશે.
અપલોડ પેટર્ન જો તમારું સર્વર દરેક ફોટો અપલોડ હેન્ડલ કરશે, તો તે લોડ હેઠળ ક્રેશ થઈ જશે. મેં ટુ-ફેઝ (two-phase) અપલોડ પેટર્નનો ઉપયોગ કર્યો:
- ક્લાયન્ટ સર્વર પાસે pre-signed URL માંગે છે
- ક્લાયન્ટ સીધી Cloudflare R2 પર ફાઇલ અપલોડ કરે છે
- અપલોડ પૂરું થયા પછી ક્લાયન્ટ સર્વરને જણાવે છે
મેં S3 ને બદલે R2 પસંદ કર્યું કારણ કે તેમાં કોઈ egress fees નથી. જ્યારે વપરાશકર્તાઓ મીડિયા ડાઉનલોડ કરે છે ત્યારે આનાથી પૈસા બચે છે.
શું સફળ રહ્યું
- PostGIS અને Redis GEO સ્પેસિયલ ક્વેરીઝને ઝડપી બનાવે છે.
- Direct-to-R2 અપલોડ્સ બેકએન્ડને સ્કેલ કરવામાં મદદ કરે છે.
- Go અને Gin ઓછા મેમરી વપરાશ સાથે ઉચ્ચ પ્રદર્શન આપે છે.
- પ્રોગ્રેસિવ પ્રાઇવસી (Private, Friends, અથવા Public) વપરાશકર્તાઓને સુરક્ષિત રાખે છે.
શું ખોટું થયું
- ઊંચી ઇમારતો ધરાવતા શહેરોમાં GPS ચોકસાઈ અસ્થિર હોય છે.
- "કોલ્ડ સ્ટાર્ટ" (cold start) સમસ્યા વાસ્તવિક છે. એપને જીવંત લાગે તે માટે ઘણા વપરાશકર્તાઓની જરૂર છે.
- કન્ટેન્ટ મોડરેશન માટે સતત ધ્યાન આપવું જરૂરી છે.
આ બનાવવાથી મને શીખવા મળ્યું કે સોશિયલ એપ્સ માટે ભૌતિક સ્થાન એ એક ઓછું આંકવામાં આવેલું પરિમાણ (dimension) છે. જ્યારે ડિજિટલ કન્ટેન્ટ વાસ્તવિક જગ્યા સાથે જોડાયેલું હોય ત્યારે તે વધુ અર્થપૂર્ણ લાગે છે.
વૈકલ્પિક લર્નિંગ કોમ્યુનિટી: https://t.me/GyaanSetuAi
