ಸ್ಥಳೀಯ ನೆನಪುಗಳ ನಿರ್ಮಾಣ

ಭೌತಿಕ ಪ್ರಪಂಚಕ್ಕಾಗಿ ಒಂದು Pinterest ಅನ್ನು ನಿರ್ಮಿಸಲು ನಾನು ಮೂರು ತಿಂಗಳುಗಳನ್ನು ಕಳೆದಿದ್ದೇನೆ.

ಕಲ್ಪನೆ ಸರಳವಾಗಿದೆ. ನೀವು ನಿರ್ದಿಷ್ಟ GPS ಸಂವೇದನಾ ಬಿಂದುಗಳಲ್ಲಿ (coordinates) ಡಿಜಿಟಲ್ ಟಿಪ್ಪಣಿಗಳು, ಫೋಟೋಗಳು ಅಥವಾ ಕಥೆಗಳನ್ನು ಬಿಡಬಹುದು. ಜನರು ಆ ನಿಖರವಾದ ಸ್ಥಳದಲ್ಲಿ ಭೌತಿಕವಾಗಿ ನಿಂತಾಗ ಮಾತ್ರ ಅವುಗಳನ್ನು ನೋಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಇದು ನೈಜ ಪ್ರಪಂಚವನ್ನು ಡಿಜಿಟಲ್ ಟೈಮ್ ಕ್ಯಾಪ್ಸುಲ್‌ಗಳ (time capsules) ಸಂಗ್ರಹವನ್ನಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ.

ಸ್ಥಳ ಆಧಾರಿತ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದು ನೋಡಲು ಸುಲಭವೆನಿಸಿದರೂ, ವಾಸ್ತವದಲ್ಲಿ ಅದು ಕಷ್ಟಕರವಾಗಿದೆ. ತಾಂತ್ರಿಕ ಮೂಲಾಧಾರದ (tech stack) ಬಗ್ಗೆ ನಾನು ಕಲಿತ ವಿಷಯಗಳು ಇಲ್ಲಿವೆ.

ಸ್ಪೇಷಲ್ ಡೇಟಾಬೇಸ್ (The Spatial Database)

ನೀವು ವ್ಯವಸ್ಥೆಯನ್ನು ವಿಸ್ತರಿಸಲು (scale) ಬಯಸಿದರೆ, ಅಕ್ಷಾಂಶ (latitude) ಮತ್ತು ರೇಖಾಂಶವನ್ನು (longitude) ಕೇವಲ ಸಾಮಾನ್ಯ ಸಂಖ್ಯೆಗಳಾಗಿ ಸಂಗ್ರಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮಗೆ ಸ್ಪೇಷಲ್ ಇಂಡೆಕ್ಸ್‌ಗಳ (spatial indexes) ಅಗತ್ಯವಿದೆ. ನಾನು PostgreSQL ಜೊತೆಗೆ PostGIS ಅನ್ನು ಬಳಸಿದೆ.

ಇದು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ:

  • R-tree ಮೂಲಕ ಸ್ಪೇಷಲ್ ಇಂಡೆಕ್ಸಿಂಗ್
  • ಅಂತರ್ಗತ ದೂರದ ಲೆಕ್ಕಾಚಾರಗಳು (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 ಸ್ಪೇಷಲ್ ಕ್ವೆರಿಗಳನ್ನು ವೇಗಗೊಳಿಸುತ್ತವೆ.
  • ನೇರ-to-R2 ಅಪ್‌ಲೋಡ್‌ಗಳು ಬ್ಯಾಕ್‌ಎಂಡ್ ಅನ್ನು ವಿಸ್ತರಿಸಲು (scale) ಅನುವು ಮಾಡಿಕೊಡುತ್ತವೆ.
  • Go ಮತ್ತು Gin ಕಡಿಮೆ ಮೆಮೊರಿ ಬಳಕೆಯೊಂದಿಗೆ ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ನೀಡುತ್ತವೆ.
  • ಪ್ರಗತಿಪರ ಗೌಪ್ಯತೆ (Private, Friends, ಅಥವಾ Public) ಬಳಕೆದಾರರನ್ನು ರಕ್ಷಿಸುತ್ತದೆ.

ಯಾವುದು ತಪ್ಪಾಯಿತು

  • ಎತ್ತರದ ಕಟ್ಟಡಗಳಿರುವ ನಗರಗಳಲ್ಲಿ GPS ನಿಖರತೆ ಅಸ್ಥಿರವಾಗಿರುತ್ತದೆ.
  • "cold start" ಸಮಸ್ಯೆ ನಿಜವಾಗಿಯೂ ಇದೆ. ಅಪ್ಲಿಕೇಶನ್ ಜೀವಂತವಾಗಿ ಕಾಣಲು ಹೆಚ್ಚಿನ ಬಳಕೆದಾರರ ಅಗತ್ಯವಿದೆ.
  • ಕಂಟೆಂಟ್ ಮಾಡರೇಶನ್ (Content moderation) ಗೆ ನಿರಂತರ ಗಮನದ ಅಗತ್ಯವಿದೆ.

ಇದನ್ನು ನಿರ್ಮಿಸುವುದು ನನಗೆ ಕಲಿಸಿಕೊಟ್ಟದ್ದು ಏನೆಂದರೆ, ಸಾಮಾಜಿಕ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಭೌತಿಕ ಸ್ಥಳವು ಅಧೋಮೌಲ್ಯೀಕರಿಸಲ್ಪಟ್ಟ (underrated) ಆಯಾಮವಾಗಿದೆ. ಡಿಜಿಟಲ್ ಕಂಟೆಂಟ್ ಅನ್ನು ನೈಜ ಸ್ಥಳಕ್ಕೆ ಜೋಡಿಸಿದಾಗ ಅದು ಹೆಚ್ಚು ಅರ್ಥಪೂರ್ಣವಾಗಿ ಕಾಣುತ್ತದೆ.

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