در مورد سرویس پیشنهاد رستوران در اینجا جزئیات طراحی پشت صحنه را مشاهده میکنید. دو سرویس کلیدی وجود دارند (مانند شکل زیر):
چگونه اطلاعات مربوط به مکان رستورانها در پایگاه داده ذخیره میشوند تا LBS بتواند به طور کارآمد رستورانهای نزدیک را برگرداند؟
اطلاعات مکانی (عرض و طول جغرافیایی) رستورانها را در پایگاه داده ذخیره کنیم؟در صورتی که بخواهیم فاصله شما تا هر رستوران را محاسبه کنیم، کوئریهایِ پایگاه داده بسیار ناکارآمد خواهند بود.
یک راه برای افزایش سرعت جستجو، استفاده از الگوریتم 𝐠𝐞𝐨𝐡𝐚𝐬𝐡است.ابتدا، کره زمین را به چهار ناحیه تقسیم میکنیم با توجه به خط استوا و خط طول اولیه آن داریم:
سپس هر گره را به چهار گره کوچکتر تقسیم میکنیم.هر گره میتواند با جابجایی بین بیت طول جغرافیایی و بیت عرض جغرافیایی نشان داده شود.
بنابراین، وقتی میخواهید رستورانهای نزدیک در بلوک مشخص شده با رنگ قرمز را جستجو کنید، میتوانید SQL مشابه زیر را بنویسید:
SELECT * FROM geohash_index WHERE geohash LIKE '01%'
جغرافیای کد (Geohash) برخی محدودیتها دارد. ممکن است در یک بلوک (مانند مرکز شهر نیویورک) بسیاری از رستورانها وجود داشته باشد، اما در بلوک دیگر (مانند اقیانوس) هیچ رستورانی وجود نداشته باشد. بنابراین، الگوریتمهای پیچیدهتر دیگری برای بهینهسازی فرآیند وجود دارند. اگر علاقهمند به جزئیات هستید، میتوانید در این موارد بیشتر مطالعه کنید.