JavadAgha
JavadAgha
خواندن ۱ دقیقه·۶ ماه پیش

چگونه رستوران‌های نزدیک را در سرویس پیشنهاد رستوران پیدا می‌کنیم؟

در مورد سرویس پیشنهاد رستوران در اینجا جزئیات طراحی پشت صحنه را مشاهده می‌کنید. دو سرویس کلیدی وجود دارند (مانند شکل زیر):

  • سرویس کسب و کار.
  • اضافه کردن/حذف کردن/ویرایش اطلاعات رستوران.
  • مشتریان می‌توانند جزئیات رستوران را مشاهده کنند.
  • سرویس مبتنی بر محل (𝐋𝐨𝐜𝐚𝐥-𝐛𝐚𝐬𝐞𝐝 𝐒𝐞𝐫𝐯𝐢𝐜𝐞/LBS).
  • با در نظر گرفتن ناحیه و مکان، لیستی از رستوران‌های نزدیک را برمی‌گرداند.

چگونه اطلاعات مربوط به مکان رستوران‌ها در پایگاه داده ذخیره می‌شوند تا LBS بتواند به طور کارآمد رستوران‌های نزدیک را بر‌گرداند؟

اطلاعات مکانی (عرض و طول جغرافیایی) رستوران‌ها را در پایگاه داده ذخیره کنیم؟در صورتی که بخواهیم فاصله شما تا هر رستوران را محاسبه کنیم، کوئری‌هایِ پایگاه داده بسیار ناکارآمد خواهند بود.

یک راه برای افزایش سرعت جستجو، استفاده از الگوریتم 𝐠𝐞𝐨𝐡𝐚𝐬𝐡است.ابتدا، کره زمین را به چهار ناحیه تقسیم می‌کنیم با توجه به خط استوا و خط طول اولیه آن داریم:

  • بازه عرض جغرافیایی [۹۰-، 0] با عدد 0 نشان داده می‌شود
  • بازه عرض جغرافیایی [0، 90] با عدد 1 نشان داده می‌شود
  • بازه طول جغرافیایی [180-، 0] با عدد 0 نشان داده می‌شود
  • بازه طول جغرافیایی [0، 180] با عدد 1 نشان داده می‌شود

سپس هر گره را به چهار گره کوچکتر تقسیم می‌کنیم.هر گره می‌تواند با جابجایی بین بیت طول جغرافیایی و بیت عرض جغرافیایی نشان داده شود.

بنابراین، وقتی می‌خواهید رستوران‌های نزدیک در بلوک مشخص شده با رنگ قرمز را جستجو کنید، می‌توانید SQL مشابه زیر را بنویسید:

SELECT * FROM geohash_index WHERE geohash LIKE '01%'


جغرافیای کد (Geohash) برخی محدودیت‌ها دارد. ممکن است در یک بلوک (مانند مرکز شهر نیویورک) بسیاری از رستوران‌ها وجود داشته باشد، اما در بلوک دیگر (مانند اقیانوس) هیچ رستورانی وجود نداشته باشد. بنابراین، الگوریتم‌های پیچیده‌تر دیگری برای بهینه‌سازی فرآیند وجود دارند. اگر علاقه‌مند به جزئیات هستید، می‌توانید در این موارد بیشتر مطالعه کنید.

geohashgoogle mapsطراحی سیستم های نرم افزاریمهندسی نرم افزارنرم افزار
کنجکاو در مباحث مهندسی نرم افزار
شاید از این پست‌ها خوشتان بیاید