স্পেশাল মেমরি তৈরি করা
আমি বাস্তব জগতের জন্য একটি Pinterest তৈরির পেছনে তিন মাস ব্যয় করেছি।
ধারণাটি সহজ। আপনি নির্দিষ্ট GPS স্থানাঙ্কে ডিজিটাল নোট, ছবি বা গল্প রেখে দিতে পারেন। মানুষ কেবল তখনই সেগুলো দেখতে পাবে যখন তারা শারীরিকভাবে ঠিক সেই স্থানে দাঁড়িয়ে থাকবে। এটি বাস্তব জগতকে ডিজিটাল টাইম ক্যাপসুলের একটি সংগ্রহে পরিণত করে।
লোকেশন-ভিত্তিক অ্যাপ তৈরি করা যতটা সহজ মনে হয় তার চেয়ে অনেক বেশি কঠিন। টেক স্ট্যাক সম্পর্কে আমি যা শিখেছি তা নিচে দেওয়া হলো।
স্পেশাল ডেটাবেস
আপনি যদি স্কেল করতে চান, তবে ল্যাটিটিউড (latitude) এবং লঙ্গিটিউড (longitude)-কে কেবল সাধারণ সংখ্যা হিসেবে সংরক্ষণ করতে পারবেন না। আপনার স্পেশাল ইনডেক্স প্রয়োজন। আমি PostgreSQL-এর সাথে PostGIS ব্যবহার করেছি।
এটি হ্যান্ডেল করে:
- R-tree দিয়ে স্পেশাল ইনডেক্সিং
- বিল্ট-ইন দূরত্ব গণনা (distance calculations)
- দ্রুত প্রক্সিমিটি কোয়েরি (proximity queries)
যদি কোনো ব্যবহারকারীর ৫০ মিটারের মধ্যে স্মৃতিগুলো খুঁজে বের করার প্রয়োজন হয়, তবে PostGIS সেই কঠিন কাজটি করে দেয়।
ক্যাশিং স্ট্র্যাটেজি
জনপ্রিয় পর্যটন কেন্দ্রগুলোতে প্রচুর রিকোয়েস্ট আসে। প্রতি দুই সেকেন্ড অন্তর ডেটাবেস হিট করা পারফরম্যান্সের জন্য ক্ষতিকর। ব্যস্ত এলাকাগুলোতে মেমরি আইডিগুলো ক্যাশ করার জন্য আমি Redis GEO কমান্ড ব্যবহার করেছি।
একটি প্রো টিপ: Redis-এ পুরো অবজেক্টটি ক্যাশ করবেন না। শুধুমাত্র আইডিগুলো ক্যাশ করুন। এটি আপনার মেমরি ব্যবহার কম রাখবে এবং কোয়েরি টাইম ২০ms থেকে কমিয়ে ২ms-এ নিয়ে আসবে।
আপলোড প্যাটার্ন
যদি আপনার সার্ভার প্রতিটি ফটো আপলোড হ্যান্ডেল করে, তবে লোড বেড়ে গেলে এটি ক্র্যাশ করবে। আমি একটি টু-ফেজ (two-phase) আপলোড প্যাটার্ন ব্যবহার করেছি:
- ক্লায়েন্ট সার্ভারের কাছে একটি pre-signed URL চায়
- ক্লায়েন্ট সরাসরি Cloudflare R2-তে ফাইল আপলোড করে
- আপলোড শেষ হলে ক্লায়েন্ট সার্ভারকে জানায়
আমি S3-এর পরিবর্তে R2 বেছে নিয়েছি কারণ এতে কোনো egress fee নেই। ব্যবহারকারীরা যখন মিডিয়া ডাউনলোড করে, তখন এটি টাকা সাশ্রয় করে।
যা কাজ করেছে
- PostGIS এবং Redis GEO স্পেশাল কোয়েরিকে দ্রুত করে।
- সরাসরি R2-তে আপলোড ব্যাকএন্ডকে স্কেল করতে সাহায্য করে।
- Go এবং Gin কম মেমরি ব্যবহার করে উচ্চ পারফরম্যান্স প্রদান করে।
- প্রগ্রেসিভ প্রাইভেসী (Private, Friends, বা Public) ব্যবহারকারীদের সুরক্ষা দেয়।
যা ভুল হয়েছে
- উঁচু দালানকোঠা বিশিষ্ট শহরগুলোতে GPS-এর নির্ভুলতা অসামঞ্জস্যপূর্ণ হয়।
- "Cold start" সমস্যাটি বাস্তব। অ্যাপটিকে প্রাণবন্ত করতে অনেক ব্যবহারকারীর প্রয়োজন।
- কন্টেন্ট মডারেশনের জন্য সার্বক্ষণিক মনোযোগ প্রয়োজন।
এটি তৈরি করতে গিয়ে আমি শিখেছি যে সোশ্যাল অ্যাপের জন্য ফিজিক্যাল লোকেশন একটি অবমূল্যায়িত মাত্রা। ডিজিটাল কন্টেন্ট যখন কোনো বাস্তব স্থানের সাথে যুক্ত থাকে, তখন তা আরও অর্থবহ মনে হয়।
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi
